LG Bugfix, more keysets
authorJohn Pietrzak <john@pietrzak.org>
Mon, 13 Feb 2012 04:19:29 +0000 (23:19 -0500)
committerJohn Pietrzak <john@pietrzak.org>
Mon, 13 Feb 2012 04:19:29 +0000 (23:19 -0500)
Fixed an embarrasing error in the LG keysets, added a few more Daewoo keysets,
and made a first pass at keysets for Sky, Western Digital, and Saba

27 files changed:
keysets/daewoo.cpp
keysets/daewoo.h
keysets/lg.cpp
keysets/mce.cpp
keysets/philips.cpp
keysets/saba.cpp [new file with mode: 0644]
keysets/saba.h [new file with mode: 0644]
keysets/sky.cpp [new file with mode: 0644]
keysets/sky.h [new file with mode: 0644]
keysets/toshiba.cpp
keysets/wd.cpp [new file with mode: 0644]
keysets/wd.h [new file with mode: 0644]
main.cpp
pierogi.pro
pierogi.pro.user
pirkeysetmanager.cpp
pirmakenames.cpp
pirmakenames.h
protocols/rc6skyprotocol.cpp [new file with mode: 0644]
protocols/rc6skyprotocol.h [new file with mode: 0644]
protocols/thomsonprotocol.cpp [new file with mode: 0644]
protocols/thomsonprotocol.h [new file with mode: 0644]
qtc_packaging/debian_fremantle/changelog
qtc_packaging/debian_fremantle/control
sideshotleftform.cpp [new file with mode: 0644]
sideshotleftform.h [new file with mode: 0644]
sideshotleftform.ui [new file with mode: 0644]

index f037bde..3d8e955 100644 (file)
@@ -116,6 +116,134 @@ DaewooTV2::DaewooTV2(
 }
 
 
+DaewooTV3::DaewooTV3(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "TV Keyset 3",
+      Daewoo_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, false, true);
+
+  setPreData(0x14, 8);
+
+  addKey("0/10", Zero_Key, 0x00, 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("SOUND MODE", SoundMode_Key, 0x0A, 8);
+  addKey("100", PlusOneHundred_Key, 0x0B, 8);
+  addKey("TV/CATV", Input_Key, 0x0C, 8);
+  addKey("SLEEP", Sleep_Key, 0x0D, 8);
+  addKey("RECALL", Unmapped_Key, 0x11, 8);
+  addKey("MUTE", Mute_Key, 0x12, 8);
+  addKey("VOL UP", VolumeUp_Key, 0x13, 8);
+  addKey("VOL DOWN", VolumeDown_Key, 0x14, 8);
+  addKey("POWER", Power_Key, 0x15, 8);
+  addKey("AV/COMP", AuxInput_Key, 0x16, 8);
+  addKey("CH UP", ChannelUp_Key, 0x17, 8);
+  addKey("CH DOWN", ChannelDown_Key, 0x18, 8);
+  addKey("SOUND EFFECT", Unmapped_Key, 0x1B, 8);
+  addKey("PREVIOUS CH", PrevChannel_Key, 0x20, 8);
+  addKey("MENU", Menu_Key, 0x22, 8);
+  addKey("CAPTION TEXT", Captions_Key, 0x25, 8);
+  addKey("PANEL LOCK", Unmapped_Key, 0x26, 8);
+  addKey("PICTURE MODE NORMAL", PictureMode_Key, 0x27, 8);
+  addKey("PIP.ON/OFF", PIP_Key, 0x28, 8);
+  addKey("P.SWAP", PIPSwap_Key, 0x29, 8);
+  addKey("P.STILL", PIPPause_Key, 0x2A, 8);
+  addKey("P.POSITION", PIPMove_Key, 0x2B, 8);
+  addKey("P.INPUT", PIPSource_Key, 0x2C, 8);
+  addKey("P.CH UP", PIPChannelUp_Key, 0x2D, 8);
+  addKey("ADD/DEL", Unmapped_Key, 0x2E, 8);
+  addKey("P.CH DOWN", PIPChannelDown_Key, 0x2F, 8);
+  addKey("T.RED", Red_Key, 0x32, 8);
+  addKey("T.GREEN", Green_Key, 0x33, 8);
+  addKey("T.YELLOW", Yellow_Key, 0x34, 8);
+  addKey("T.CYAN", Blue_Key, 0x35, 8);
+  addKey("GUIDE", Guide_Key, 0x36, 8);
+  addKey("ENTER", Select_Key, 0x37, 8);
+  addKey("FAVORITE CH", Favorites_Key, 0x3C, 8);
+  addKey("WIDE MODE", AspectRatio_Key, 0x3D, 8);
+  addKey("SUBTITLE", Unmapped_Key, 0x3E, 8);
+  addKey("T.MIX", TeletextAndTV_Key, 0x40, 8);
+  addKey("T.INDEX", TeletextIndex_Key, 0x41, 8);
+  addKey("T.HOLD", TeletextHold_Key, 0x42, 8);
+  addKey("T.SIZE", TeletextSize_Key, 0x43, 8);
+  addKey("T.SUB CODE", Unmapped_Key, 0x44, 8); // shows a subpage?
+  addKey("T.REVEAL", TeletextReveal_Key, 0x45, 8);
+  addKey("T.CANCEL", Unmapped_Key, 0x48, 8); // turns off teletext
+  addKey("MINIOR CHANNEL UP", Unmapped_Key, 0x4E, 8); // I have no clue
+  addKey("MINIOR CHANNEL DOWN", Unmapped_Key, 0x4F, 8);
+  addKey("PROG. GUIDE", Unmapped_Key, 0x52, 8); // which guide is which?
+  addKey("DTV/PC (000218)", PCInput_Key, 0x54, 8);
+  addKey("KEY ALL SENSOR", Unmapped_Key, 0x55, 8);
+  addKey("CHILD LOCK DISPLAY", Unmapped_Key, 0x56, 8);
+  addKey("Digital/Analog", Unmapped_Key, 0x61, 8);
+  addKey("POWER ON", PowerOn_Key, 0x63, 8);
+  addKey("POWER DOWN", PowerOff_Key, 0x64, 8);
+}
+
+
+DaewooTV4::DaewooTV4(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "TV Keyset 4",
+      Daewoo_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x1004, 16);
+
+  addKey("0", Zero_Key, 0x00, 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("channel up", ChannelUp_Key, 0x0A, 8); // "up arrow"
+  addKey("channel up", Up_Key, 0x0A, 8); // "up arrow"
+  addKey("channel down", ChannelDown_Key, 0x0B, 8);  // "down arrow"
+  addKey("channel down", Down_Key, 0x0B, 8);  // "down arrow"
+  addKey("vol up", VolumeUp_Key, 0x0C, 8); // "right arrow"
+  addKey("vol up", Right_Key, 0x0C, 8); // "right arrow"
+  addKey("vol down", VolumeDown_Key, 0x0D, 8); // "left arrow"
+  addKey("vol down", Left_Key, 0x0D, 8); // "left arrow"
+  addKey("mute", Mute_Key, 0x0E, 8);
+  addKey("power", Power_Key, 0x0F, 8);
+  addKey("tv/catv (ant/cbl)", AntennaInput_Key, 0x10, 8);
+  addKey("+100", PlusOneHundred_Key, 0x11, 8);
+  addKey("tv/vcr", Input_Key, 0x12, 8);
+  addKey("sound", SoundMode_Key, 0x13, 8);
+  addKey("scan", Scan_Key, 0x14, 8);
+  addKey("sleep", Sleep_Key, 0x15, 8);
+  addKey("picture menu", PictureMode_Key, 0x16, 8);
+  addKey("display", Info_Key, 0x17, 8);
+  addKey("menu", Menu_Key, 0x18, 8);
+  addKey("last (prev ch)", PrevChannel_Key, 0x19, 8);
+  addKey("memory", Memory_Key, 0x1A, 8);
+  addKey("fuzzy", Unmapped_Key, 0x1B, 8);  // what?
+  // these look bad:
+//  addKey("enter", Enter_Key, 0x11, 8);
+//  addKey("pip move", PIPPosition_Key, 0x14, 8);
+//  addKey("select", Select_Key, 0x18, 8);
+//  addKey("pip on/off", PIP_Key, 0x19, 8);
+}
+
+
 DaewooDVD1::DaewooDVD1(
   QObject *guiObject,
   unsigned int index)
index 29f11a8..a13adb1 100644 (file)
@@ -21,6 +21,22 @@ public:
     unsigned int index);
 };
 
+class DaewooTV3: public PIRKeysetMetaData
+{
+public:
+  DaewooTV3(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class DaewooTV4: public PIRKeysetMetaData
+{
+public:
+  DaewooTV4(
+    QObject *guiObject,
+    unsigned int index);
+};
+
 class DaewooDVD1: public PIRKeysetMetaData
 {
 public:
index 0f9fbba..bb9d013 100644 (file)
@@ -11,7 +11,7 @@ LGTV1::LGTV1(
       LG_Make,
       index)
 {
-  threadableProtocol = new NECProtocol(guiObject, index, false, false);
+  threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
 //  setPreData(0x20DF, 16);
   setPreData(0x04, 8);
index d5c1b96..68ea81a 100644 (file)
@@ -5,7 +5,7 @@ MCERemote1::MCERemote1(
   QObject *guiObject,
   unsigned int index)
   : PIRKeysetMetaData(
-      "MCE Remote mode 1",
+      "Remote mode 1",
       Microsoft_Make,
       index)
 {
@@ -95,7 +95,7 @@ MCERemote1a::MCERemote1a(
   unsigned int index)
   : MCERemote1(guiObject, index)
 {
-  setKeysetName("MCE Remote mode 2");
+  setKeysetName("Remote mode 2");
 
   setPreData(0x14, 7);
 }
@@ -106,7 +106,7 @@ MCERemote1b::MCERemote1b(
   unsigned int index)
   : MCERemote1(guiObject, index)
 {
-  setKeysetName("MCE Remote mode 3");
+  setKeysetName("Remote mode 3");
 
   setPreData(0x24, 7);
 }
@@ -117,7 +117,7 @@ MCERemote1c::MCERemote1c(
   unsigned int index)
   : MCERemote1(guiObject, index)
 {
-  setKeysetName("MCE Remote mode 4");
+  setKeysetName("Remote mode 4");
 
   setPreData(0x34, 7);
 }
@@ -128,7 +128,7 @@ MCERemote1d::MCERemote1d(
   unsigned int index)
   : MCERemote1(guiObject, index)
 {
-  setKeysetName("MCE Remote mode 5");
+  setKeysetName("Remote mode 5");
 
   setPreData(0x44, 7);
 }
@@ -139,7 +139,7 @@ MCERemote1e::MCERemote1e(
   unsigned int index)
   : MCERemote1(guiObject, index)
 {
-  setKeysetName("MCE Remote mode 6");
+  setKeysetName("Remote mode 6");
 
   setPreData(0x54, 7);
 }
@@ -150,7 +150,7 @@ MCERemote1f::MCERemote1f(
   unsigned int index)
   : MCERemote1(guiObject, index)
 {
-  setKeysetName("MCE Remote mode 7");
+  setKeysetName("Remote mode 7");
 
   setPreData(0x64, 7);
 }
@@ -161,7 +161,7 @@ MCERemote1g::MCERemote1g(
   unsigned int index)
   : MCERemote1(guiObject, index)
 {
-  setKeysetName("MCE Remote mode 8");
+  setKeysetName("Remote mode 8");
 
   setPreData(0x74, 7);
 }
index cd3e29c..bd4fe4c 100644 (file)
@@ -244,35 +244,7 @@ PhilipsTV2::PhilipsTV2(
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x00);
 
-  addKey("Power", Power_Key, 0x0C, 8);
-  addKey("TV", Unmapped_Key, 0x9F, 8);
-  addKey("SUBTITLE", Captions_Key, 0x4B, 8);
-  addKey("TELETEXT", Teletext_Key, 0x3C, 8);
-  addKey("SOURCE", Input_Key, 0x38, 8); // "inputselect", "external"
-  addKey("red", Red_Key, 0x6D, 8);
-  addKey("green", Green_Key, 0x6E, 8);
-  addKey("yellow", Yellow_Key, 0x6F, 8);
-  addKey("blue", Blue_Key, 0x70, 8);
-  addKey("Home", Menu_Key, 0x54, 8); // "Menu"
-  addKey("Guide", Guide_Key, 0xCC, 8); // "nextview", "EPG"
-  addKey("OPTIONS", Unmapped_Key, 0x40, 8);
-  addKey("up", Up_Key, 0x58, 8);
-  addKey("down", Down_Key, 0x59, 8);
-  addKey("left", Left_Key, 0x5A, 8);
-  addKey("right", Right_Key, 0x5B, 8);
-  addKey("OK", Select_Key, 0x5C, 8);
-  addKey("INFO", Info_Key, 0x0F, 8); // "i+"
-  addKey("<<", Rewind_Key, 0x2B, 8);
-  addKey("Play", Play_Key, 0x2C, 8);
-  addKey(">>", FastForward_Key, 0x28, 8);
-  addKey("Stop", Stop_Key, 0x31, 8); // "MHEG_Cancel"
-  addKey("Record", Record_Key, 0x37, 8);
-  addKey("Vol+", VolumeUp_Key, 0x10, 8);
-  addKey("Vol-", VolumeDown_Key, 0x11, 8);
-  addKey("Mute", Mute_Key, 0x0D, 8);
-  addKey("FORMAT", AspectRatio_Key, 0xF5, 8); // "Picture_Format", "displaymode"
-  addKey("P+", ChannelUp_Key, 0x20, 8);
-  addKey("P-", ChannelDown_Key, 0x21, 8);
+  addKey("0", Zero_Key, 0x00, 8);
   addKey("1", One_Key, 0x01, 8);
   addKey("2", Two_Key, 0x02, 8);
   addKey("3", Three_Key, 0x03, 8);
@@ -282,18 +254,55 @@ PhilipsTV2::PhilipsTV2(
   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("SOUND", SoundMode_Key, 0xF4, 8); // "smartsound"
-  addKey("PICTURE", PictureMode_Key, 0xF3, 8); // "smartdisplay"
+  addKey("Previous_channel", PrevChannel_Key, 0x0A, 8); // "PP", "AB"
+  addKey("Power", Power_Key, 0x0C, 8);
+  addKey("Mute", Mute_Key, 0x0D, 8);
+  addKey("INFO", Info_Key, 0x0F, 8); // "i+"
+
+  addKey("Vol+", VolumeUp_Key, 0x10, 8);
+  addKey("Vol-", VolumeDown_Key, 0x11, 8);
+
+  addKey("P+", ChannelUp_Key, 0x20, 8);
+  addKey("P-", ChannelDown_Key, 0x21, 8);
+  addKey(">>", FastForward_Key, 0x28, 8);
+  addKey("<<", Rewind_Key, 0x2B, 8);
+  addKey("Play", Play_Key, 0x2C, 8);
+
+  addKey("Stop", Stop_Key, 0x31, 8); // "MHEG_Cancel"
+  addKey("Record", Record_Key, 0x37, 8);
+  addKey("SOURCE", Input_Key, 0x38, 8); // "inputselect", "external"
+  addKey("TELETEXT", Teletext_Key, 0x3C, 8);
+
+  addKey("OPTIONS", Unmapped_Key, 0x40, 8);
   addKey("InstallMenu", Unmapped_Key, 0x45, 8);
+  addKey("SUBTITLE", Captions_Key, 0x4B, 8);
+  addKey("1st/2nd_language", Audio_Key, 0x4E, 8); // "monostereo"
+
+  addKey("Home", Menu_Key, 0x54, 8); // "Menu"
+  addKey("up", Up_Key, 0x58, 8);
+  addKey("down", Down_Key, 0x59, 8);
+  addKey("left", Left_Key, 0x5A, 8);
+  addKey("right", Right_Key, 0x5B, 8);
+  addKey("OK", Select_Key, 0x5C, 8);
+  addKey("Dual_Screen", PIP_Key, 0x5D, 8); // "splitdisplay"
+
+  addKey("freeze", Pause_Key, 0x67, 8); // "pause"
+  addKey("red", Red_Key, 0x6D, 8);
+  addKey("green", Green_Key, 0x6E, 8);
+  addKey("yellow", Yellow_Key, 0x6F, 8);
+  addKey("blue", Blue_Key, 0x70, 8);
   addKey("SurroundSound", Surround_Key, 0x71, 8);  // "soundselect"
   addKey("Time", Sleep_Key, 0x7F, 8); // "clock", "timer_programming"
+
   addKey("ActiveControl", Unmapped_Key, 0x96, 8);
-  addKey("Dual_Screen", PIP_Key, 0x5D, 8); // "splitdisplay"
-  addKey("Previous_channel", PrevChannel_Key, 0x0A, 8); // "PP", "AB"
-  addKey("1st/2nd_language", Audio_Key, 0x4E, 8); // "monostereo"
-  addKey("freeze", Pause_Key, 0x67, 8); // "pause"
+  addKey("TV", Unmapped_Key, 0x9F, 8);
+
+  addKey("Guide", Guide_Key, 0xCC, 8); // "nextview", "EPG"
+
   addKey("zoom", Zoom_Key, 0xE7, 8);
+  addKey("PICTURE", PictureMode_Key, 0xF3, 8); // "smartdisplay"
+  addKey("SOUND", SoundMode_Key, 0xF4, 8); // "smartsound"
+  addKey("FORMAT", AspectRatio_Key, 0xF5, 8); // "Picture_Format", "displaymode"
 }
 
 
@@ -306,13 +315,13 @@ PhilipsTV2a::PhilipsTV2a(
 
   addControlledDevice(Philips_Make, "29PT8607/12", TV_Device);
 
-  addKey("tv-speed+", Unmapped_Key, 0x71, 8);
-  addKey("tv-speed-", Unmapped_Key, 0x6E, 8);
-  addKey("tv-play", Play_Key, 0x70, 8);
-  addKey("tv-stop", Stop_Key, 0x6F, 8);
-  addKey("tv-recording", Record_Key, 0x6D, 8);
   addKey("tv-display", Info_Key, 0x3C, 8);
   addKey("tv-teletext_submode_(J:12)", Unmapped_Key, 0x5D, 8);
+  addKey("tv-recording", Record_Key, 0x6D, 8);
+  addKey("tv-speed-", Unmapped_Key, 0x6E, 8);
+  addKey("tv-stop", Stop_Key, 0x6F, 8);
+  addKey("tv-play", Play_Key, 0x70, 8);
+  addKey("tv-speed+", Unmapped_Key, 0x71, 8);
   addKey("tv-solarization", Unmapped_Key, 0xCC, 8);
 }
 
@@ -343,28 +352,7 @@ PhilipsTV3::PhilipsTV3(
 
   threadableProtocol = new RC6Protocol(guiObject, index, 0x28);
 
-  addKey("power", Power_Key, 0x0C, 8);
-  addKey("text", Teletext_Key, 0x3C, 8);
-  addKey("red", Red_Key, 0x6D, 8);
-  addKey("green", Green_Key, 0x6E, 8);
-  addKey("yellow", Yellow_Key, 0x6F, 8);
-  addKey("blue", Blue_Key, 0x70, 8);
-  addKey("menu", Menu_Key, 0x54, 8);
-  addKey("wide", AspectRatio_Key, 0xD8, 8);
-  addKey("subtitle", Captions_Key, 0x4B, 8);
-  addKey("info", Info_Key, 0x0F, 8);
-  addKey("guide", Guide_Key, 0xCC, 8);
-  addKey("select", Select_Key, 0x5C, 8);
-  addKey("exit", Exit_Key, 0x83, 8);
-  addKey("up", Up_Key, 0x58, 8);
-  addKey("left", Left_Key, 0x5A, 8);
-  addKey("right", Right_Key, 0x5B, 8);
-  addKey("down", Down_Key, 0x59, 8);
-  addKey("vol+", VolumeUp_Key, 0x10, 8);
-  addKey("vol-", VolumeDown_Key, 0x11, 8);
-  addKey("p+", ChannelUp_Key, 0x20, 8);
-  addKey("p-", ChannelDown_Key, 0x21, 8);
-  addKey("mute", Mute_Key, 0x0D, 8);
+  addKey("0", Zero_Key, 0x00, 8);
   addKey("1", One_Key, 0x01, 8);
   addKey("2", Two_Key, 0x02, 8);
   addKey("3", Three_Key, 0x03, 8);
@@ -374,8 +362,36 @@ PhilipsTV3::PhilipsTV3(
   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("power", Power_Key, 0x0C, 8);
+  addKey("mute", Mute_Key, 0x0D, 8);
+  addKey("info", Info_Key, 0x0F, 8);
+
+  addKey("vol+", VolumeUp_Key, 0x10, 8);
+  addKey("vol-", VolumeDown_Key, 0x11, 8);
+
+  addKey("p+", ChannelUp_Key, 0x20, 8);
+  addKey("p-", ChannelDown_Key, 0x21, 8);
+
+  addKey("text", Teletext_Key, 0x3C, 8);
+
   addKey("tv/dtv", Input_Key, 0x43, 8);
+  addKey("subtitle", Captions_Key, 0x4B, 8);
+  addKey("menu", Menu_Key, 0x54, 8);
+  addKey("up", Up_Key, 0x58, 8);
+  addKey("down", Down_Key, 0x59, 8);
+  addKey("left", Left_Key, 0x5A, 8);
+  addKey("right", Right_Key, 0x5B, 8);
+  addKey("select", Select_Key, 0x5C, 8);
+
+  addKey("red", Red_Key, 0x6D, 8);
+  addKey("green", Green_Key, 0x6E, 8);
+  addKey("yellow", Yellow_Key, 0x6F, 8);
+  addKey("blue", Blue_Key, 0x70, 8);
+  addKey("exit", Exit_Key, 0x83, 8);
+
+  addKey("guide", Guide_Key, 0xCC, 8);
+  addKey("wide", AspectRatio_Key, 0xD8, 8);
 }
 
 
diff --git a/keysets/saba.cpp b/keysets/saba.cpp
new file mode 100644 (file)
index 0000000..d0be389
--- /dev/null
@@ -0,0 +1,112 @@
+#include "saba.h"
+#include "protocols/thomsonprotocol.h"
+
+SabaTV1::SabaTV1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "TV/VCR Keyset 1",
+      Saba_Make,
+      index)
+{
+  threadableProtocol = new ThomsonProtocol(guiObject, index);
+
+  setPreData(0x0, 4);
+
+  addKey("1", One_Key, 0x00, 7);
+  addKey("4", Four_Key, 0x01, 7);
+  addKey("7", Seven_Key, 0x02, 7);
+  addKey("SP/LP", VHSSpeed_Key, 0x05, 7);
+  addKey("2", Two_Key, 0x08, 7);
+  addKey("5", Five_Key, 0x09, 7);
+  addKey("8", Eight_Key, 0x0A, 7);
+  addKey("0/--", Zero_Key, 0x0E, 7);
+
+  addKey("3", Three_Key, 0x10, 7);
+  addKey("6", Six_Key, 0x11, 7);
+  addKey("9", Nine_Key, 0x12, 7);
+  addKey("Timer", Timer_Key, 0x15, 7); // "D"
+  addKey("AV", AuxInput_Key, 0x18, 7);
+  addKey("Power", Power_Key, 0x1D, 7);
+  addKey("Status/Exit", Exit_Key, 0x1E, 7); // "F"
+  addKey("Rew", Rewind_Key, 0x1F, 7);
+
+  addKey("Play", Play_Key, 0x20, 7);
+  addKey("FF", FastForward_Key, 0x21, 7);
+  addKey("Pause", Pause_Key, 0x22, 7);
+  addKey("Record", Record_Key, 0x23, 7);
+  addKey("Stop", Stop_Key, 0x24, 7);
+  addKey("Channel+", ChannelUp_Key, 0x29, 7); // "P/T+", "Vol+"
+  addKey("Channel-", ChannelDown_Key, 0x2A, 7); // "P/T-", "Vol-"
+  addKey("AutoTrack", AutoTracking_Key, 0x2C, 7);
+
+  addKey("OK", Select_Key, 0x33, 7);
+  addKey("Up", Up_Key, 0x34, 7);
+  addKey("Down", Down_Key, 0x35, 7);
+  addKey("Left", Left_Key, 0x36, 7);
+  addKey("Right", Right_Key, 0x37, 7);
+  addKey("Clock", Unmapped_Key, 0x38, 7); // "C"
+  addKey("Menu", Menu_Key, 0x39, 7); // "Install"
+  addKey("Ch.setup", Unmapped_Key, 0x3B, 7); // "B"
+  addKey("Mark", Unmapped_Key, 0x3C, 7);
+  addKey("Scan/Erase", Unmapped_Key, 0x3D, 7); // "Index"
+}
+
+
+SabaTV2::SabaTV2(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "TV Keyset 2",
+      Saba_Make,
+      index)
+{
+  threadableProtocol = new ThomsonProtocol(guiObject, index);
+
+  setPreData(0x3, 4);
+
+  addKey("1", One_Key, 0x00, 7);
+  addKey("4", Four_Key, 0x01, 7);
+  addKey("7", Seven_Key, 0x02, 7);
+  addKey("MUTE", Mute_Key, 0x05, 7);
+  addKey("2", Two_Key, 0x08, 7);
+  addKey("5", Five_Key, 0x09, 7);
+  addKey("8", Eight_Key, 0x0A, 7);
+  addKey("UP", Up_Key, 0x0B, 7);
+  addKey("OK", Select_Key, 0x0C, 7);
+  addKey("DOWN", Down_Key, 0x0D, 7);
+  addKey("0/--", Zero_Key, 0x0E, 7);
+
+  addKey("3", Three_Key, 0x10, 7);
+  addKey("6", Six_Key, 0x11, 7);
+  addKey("9", Nine_Key, 0x12, 7);
+  addKey("BLUE", Blue_Key, 0x15, 7);
+  addKey("AV", AuxInput_Key, 0x18, 7);
+  addKey("Power", Power_Key, 0x1D, 7);
+  addKey("TEXT", Teletext_Key, 0x1E, 7);
+//  addKey("Rew", Rewind_Key, 0x1F, 7);
+
+//  addKey("Play", Play_Key, 0x20, 7);
+//  addKey("FF", FastForward_Key, 0x21, 7);
+//  addKey("Pause", Pause_Key, 0x22, 7);
+//  addKey("Record", Record_Key, 0x23, 7);
+//  addKey("Stop", Stop_Key, 0x24, 7);
+  addKey("PR+", ChannelUp_Key, 0x25, 7);
+  addKey("PR-", ChannelDown_Key, 0x27, 7);
+  addKey("VOL+", VolumeUp_Key, 0x29, 7);
+  addKey("VOL-", VolumeDown_Key, 0x2A, 7);
+//  addKey("AutoTrack", AutoTracking_Key, 0x2C, 7);
+
+  addKey("MENU", Menu_Key, 0x31, 7);
+//  addKey("OK", Select_Key, 0x33, 7);
+//  addKey("Up", Up_Key, 0x34, 7);
+//  addKey("Down", Down_Key, 0x35, 7);
+  addKey("Left", Left_Key, 0x36, 7);
+  addKey("Right", Right_Key, 0x37, 7);
+  addKey("YELLOW", Yellow_Key, 0x38, 7);
+  addKey("RED", Red_Key, 0x39, 7);
+  addKey("GREEN", Green_Key, 0x3B, 7);
+//  addKey("Mark", Unmapped_Key, 0x3C, 7);
+//  addKey("Scan/Erase", Unmapped_Key, 0x3D, 7); // "Index"
+  addKey("EXIT", Exit_Key, 0x3E, 7);
+}
diff --git a/keysets/saba.h b/keysets/saba.h
new file mode 100644 (file)
index 0000000..bea56bc
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef SABA_H
+#define SABA_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class SabaTV1: public PIRKeysetMetaData
+{
+public:
+  SabaTV1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class SabaTV2: public PIRKeysetMetaData
+{
+public:
+  SabaTV2(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+#endif // SABA_H
diff --git a/keysets/sky.cpp b/keysets/sky.cpp
new file mode 100644 (file)
index 0000000..440f194
--- /dev/null
@@ -0,0 +1,73 @@
+#include "sky.h"
+#include "protocols/rc6skyprotocol.h"
+
+SkyReceiver1::SkyReceiver1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Receiver Keyset 1",
+      Sky_Make,
+      index)
+{
+  threadableProtocol = new RC6SkyProtocol(guiObject, index);
+
+  setPreData(0x000, 12);
+
+  addKey("0", Zero_Key, 0x00, 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("POWER", Power_Key, 0x0C, 8);
+
+  addKey("CH+", ChannelUp_Key, 0x20, 8);
+  addKey("CH-", ChannelDown_Key, 0x21, 8);
+  addKey("PAUSE", Pause_Key, 0x24, 8);
+  addKey("FFW", FastForward_Key, 0x28, 8);
+
+  addKey("TEXT", Teletext_Key, 0x3C, 8); // is this right?
+  addKey("REW", Rewind_Key, 0x3D, 8);
+  addKey("PLAY", Play_Key, 0x3E, 8);
+  addKey("STOP", Stop_Key, 0x3F, 8);
+  addKey("REC", Record_Key, 0x40, 8);
+
+  addKey("UP", Up_Key, 0x58, 8);
+  addKey("DOWN", Down_Key, 0x59, 8);
+  addKey("LEFT", Left_Key, 0x5A, 8);
+  addKey("RIGHT", Right_Key, 0x5B, 8);
+  addKey("SELECT", Select_Key, 0x5C, 8);
+
+  addKey("RED", Red_Key, 0x6D, 8);
+  addKey("GREEN", Green_Key, 0x6E, 8);
+  addKey("YELLOW", Yellow_Key, 0x6F, 8);
+  addKey("BLUE", Blue_Key, 0x70, 8);
+
+  addKey("BOX_OFFICE", Unmapped_Key, 0x7D, 8);
+  addKey("SERVICES", Menu_Key, 0x7E, 8); // ?
+
+  addKey("SKY", Unmapped_Key, 0x80, 8);
+  addKey("HELP", Unmapped_Key, 0x81, 8); // menu?
+  addKey("BACK", Exit_Key, 0x83, 8);
+  addKey("TV", Unmapped_Key, 0x84, 8);
+
+  addKey("INFO", Info_Key, 0xCB, 8);
+  addKey("TV_GUIDE", Guide_Key, 0xCC, 8);
+
+  addKey("INTERACTIVE", Unmapped_Key, 0xF5, 8);
+}
+
+
+SkyReceiver1a::SkyReceiver1a(
+  QObject *guiObject,
+  unsigned int index)
+  : SkyReceiver1(guiObject, index)
+{
+  setKeysetName("Receiver Keyset 1a");
+
+  setPreData(0x00C, 12);
+}
diff --git a/keysets/sky.h b/keysets/sky.h
new file mode 100644 (file)
index 0000000..46043ee
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef SKY_H
+#define SKY_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class SkyReceiver1: public PIRKeysetMetaData
+{
+public:
+  SkyReceiver1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class SkyReceiver1a: public SkyReceiver1
+{
+public:
+  SkyReceiver1a(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+#endif // SKY_H
index 8cac3e6..6d194a6 100644 (file)
@@ -218,7 +218,7 @@ ToshibaVCR1::ToshibaVCR1(
 {
   threadableProtocol = new NECProtocol(guiObject, index, false, true);
 
-  setPreData(0x44, 16);
+  setPreData(0x44, 8);
 
   addKey("1", One_Key, 0x01, 8);
   addKey("2", Two_Key, 0x02, 8);
diff --git a/keysets/wd.cpp b/keysets/wd.cpp
new file mode 100644 (file)
index 0000000..1239d8e
--- /dev/null
@@ -0,0 +1,68 @@
+#include "wd.h"
+#include "protocols/necprotocol.h"
+
+WDMediaPlayer1::WDMediaPlayer1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Media Player Keyset 1",
+      WD_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x7984, 16);
+
+  addKey("KEY_DOWN", Down_Key, 0x00, 8); // "down arrow"
+  addKey("KEY_NEXT", Next_Key, 0x01, 8); // "next"
+  addKey("KEY_NEXT", PageDown_Key, 0x01, 8);
+  addKey("KEY_PREVIOUS", Previous_Key, 0x02, 8); // "prev"
+  addKey("KEY_PREVIOUS", PageUp_Key, 0x02, 8);
+  addKey("KEY_STOP", Stop_Key, 0x04, 8); // "stop"
+  addKey("KEY_UP", Up_Key, 0x05, 8); // "up arrow"
+  addKey("KEY_HOME", Menu_Key, 0x06, 8); // "home"
+  addKey("KEY_LEFT", Left_Key, 0x07, 8); // "left arrow"
+  addKey("KEY_ENTER", Select_Key, 0x08, 8); // "enter"
+  addKey("KEY_ENTER", Info_Key, 0x08, 8);
+  addKey("KEY_RIGHT", Right_Key, 0x09, 8); // "right arrow"
+  addKey("KEY_PLAYPAUSE", Play_Key, 0x0A, 8); // "pause/play"
+  addKey("KEY_PLAYPAUSE", Pause_Key, 0x0A, 8);
+  addKey("KEY_SEARCH", Scan_Key, 0x0F, 8); // "search"
+  addKey("KEY_EJECTCD", Eject_Key, 0x10, 8);
+  addKey("KEY_POWER", Power_Key, 0x12, 8); // "power"
+  addKey("KEY_OPTION", Unmapped_Key, 0x1A, 8); // "option"
+  addKey("KEY_BACK", Exit_Key, 0x1B, 8); // "back"
+  addKey("KEY_FASTFORWARD", FastForward_Key, 0x1E, 8); // "fast fwd"
+  addKey("KEY_REWIND", Rewind_Key, 0x1F, 8); // "rewind"
+}
+
+
+WDMediaPlayer1a::WDMediaPlayer1a(
+  QObject *guiObject,
+  unsigned int index)
+  : WDMediaPlayer1(guiObject, index)
+{
+  setKeysetName("Media Player Keyset 1a");
+
+  addKey("next page", PageDown_Key, 0x03, 8);
+  addKey("subtitle", Captions_Key, 0x0C, 8);
+  addKey("audio", Audio_Key, 0x0D, 8);
+  addKey("3", Three_Key, 0x0E, 8);
+  addKey("mute", Mute_Key, 0x28, 8);
+  addKey("prev page", PageUp_Key, 0x2C, 8);
+  addKey("setup", Guide_Key, 0x2E, 8);
+  addKey("8", Eight_Key, 0x5C, 8);
+  addKey("7", Seven_Key, 0x5D, 8);
+  addKey("6", Six_Key, 0x5E, 8);
+  addKey("9", Nine_Key, 0x5F, 8);
+  addKey("eject", Eject_Key, 0xE0, 8);
+  addKey("2", Two_Key, 0xE6, 8);
+  addKey("1", One_Key, 0xE7, 8);
+  addKey("B (red)", Red_Key, 0xE5, 8);
+  addKey("D (blue)", Blue_Key, 0xE8, 8);
+  addKey("C (yellow)", Yellow_Key, 0xE9, 8);
+  addKey("A (green)", Green_Key, 0xEB, 8);
+  addKey("4", Four_Key, 0xEC, 8);
+  addKey("5", Five_Key, 0xED, 8);
+  addKey("0", Zero_Key, 0xEE, 8);
+}
diff --git a/keysets/wd.h b/keysets/wd.h
new file mode 100644 (file)
index 0000000..acd9f96
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef WD_H
+#define WD_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class WDMediaPlayer1: public PIRKeysetMetaData
+{
+public:
+  WDMediaPlayer1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class WDMediaPlayer1a: public WDMediaPlayer1
+{
+public:
+  WDMediaPlayer1a(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+#endif // WD_H
index b87355a..db0d632 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -7,6 +7,7 @@ int main(int argc, char *argv[])
 
   MainWindow mainWindow;
   mainWindow.setOrientation(MainWindow::ScreenOrientationLockLandscape);
+//  mainWindow.setOrientation(MainWindow::ScreenOrientationAuto);
   mainWindow.showExpanded();
 
   // A connection to perform any final cleanup work:
index 3e041b1..3d41001 100644 (file)
@@ -94,7 +94,13 @@ SOURCES += main.cpp mainwindow.cpp \
     keysets/grundig.cpp \
     keysets/topfield.cpp \
     keysets/logitech.cpp \
-    protocols/necxprotocol.cpp
+    protocols/necxprotocol.cpp \
+    sideshotleftform.cpp \
+    keysets/wd.cpp \
+    keysets/saba.cpp \
+    keysets/sky.cpp \
+    protocols/rc6skyprotocol.cpp \
+    protocols/thomsonprotocol.cpp
 HEADERS += mainwindow.h \
     pirkeynames.h \
     pirmakenames.h \
@@ -165,12 +171,19 @@ HEADERS += mainwindow.h \
     keysets/grundig.h \
     keysets/topfield.h \
     keysets/logitech.h \
-    protocols/necxprotocol.h
+    protocols/necxprotocol.h \
+    sideshotleftform.h \
+    keysets/wd.h \
+    keysets/saba.h \
+    keysets/sky.h \
+    protocols/rc6skyprotocol.h \
+    protocols/thomsonprotocol.h
 FORMS += mainwindow.ui \
     pirdocumentationform.ui \
     piraboutform.ui \
     pirselectkeysetform.ui \
-    pirsecondaryform.ui
+    pirsecondaryform.ui \
+    sideshotleftform.ui
 
 # Please do not modify the following two lines. Required for deployment.
 include(deployment.pri)
index cc0b605..05576b3 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by Qt Creator 2.4.1, 2012-02-11T18:08:38. -->
+<!-- Written by Qt Creator 2.4.1, 2012-02-12T23:18:04. -->
 <qtcreator>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -78,8 +78,8 @@
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
       <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.0</value>
+      <value type="bool" key="ProjectExplorer.ProcessStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">/Users/john/Develop/n900/pierogi-0.6.2</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>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedFiles">
        <value type="QString">/Users/john/Develop/n900/pierogi-build-maemo-Qt_for_Fremantle_PR1_3_Devices__Qt_SDK__Release/pierogi_0_5_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_1_5_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_2_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_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_4_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_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_1_3_armel.deb</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>
+       <value type="QString">192.168.0.15</value>
+       <value type="QString">192.168.0.15</value>
        <value type="QString">localhost</value>
        <value type="QString">192.168.0.15</value>
        <value type="QString">192.168.0.15</value>
        <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-02-03T10:04:34</value>
        <value type="QDateTime">2012-01-23T09:47:37</value>
+       <value type="QDateTime">2012-02-12T23:16:00</value>
+       <value type="QDateTime">2012-02-12T23:10:44</value>
        <value type="QDateTime">2012-01-19T22:18:07</value>
        <value type="QDateTime">2012-02-11T18:03:15</value>
        <value type="QDateTime">2012-01-17T13:21:05</value>
index 15d0de0..ba75e37 100644 (file)
 #include "keysets/raite.h"
 #include "keysets/rca.h"
 #include "keysets/roku.h"
+#include "keysets/saba.h"
 #include "keysets/sagem.h"
 #include "keysets/samsung.h"
 #include "keysets/sanyo.h"
 #include "keysets/sharp.h"
+#include "keysets/sky.h"
 #include "keysets/sony.h"
 #include "keysets/tivo.h"
 #include "keysets/topfield.h"
 #include "keysets/toshiba.h"
+#include "keysets/wd.h"
 #include "keysets/westinghouse.h"
 #include "keysets/yamaha.h"
 #include "keysets/zenith.h"
@@ -94,6 +97,8 @@ PIRKeysetManager::PIRKeysetManager(
 
   populateKeyset(new DaewooTV1(guiObject, counter++));
   populateKeyset(new DaewooTV2(guiObject, counter++));
+  populateKeyset(new DaewooTV3(guiObject, counter++));
+  populateKeyset(new DaewooTV4(guiObject, counter++));
   populateKeyset(new DaewooDVD1(guiObject, counter++));
   populateKeyset(new DaewooVCR1(guiObject, counter++));
   populateKeyset(new DaewooVCR2(guiObject, counter++));
@@ -304,6 +309,9 @@ PIRKeysetManager::PIRKeysetManager(
   populateKeyset(new RokuBox1(guiObject, counter++));
   populateKeyset(new RokuBox2(guiObject, counter++));
 
+  populateKeyset(new SabaTV1(guiObject, counter++));
+  populateKeyset(new SabaTV2(guiObject, counter++));
+
   populateKeyset(new SagemTVBox1(guiObject, counter++));
   populateKeyset(new SagemTVBox1a(guiObject, counter++));
 
@@ -346,6 +354,9 @@ PIRKeysetManager::PIRKeysetManager(
   populateKeyset(new SharpVCR1(guiObject, counter++));
   populateKeyset(new SharpReceiver1(guiObject, counter++));
 
+  populateKeyset(new SkyReceiver1(guiObject, counter++));
+  populateKeyset(new SkyReceiver1a(guiObject, counter++));
+
   populateKeyset(new SonyTV1(guiObject, counter++));
   populateKeyset(new SonyTV1a(guiObject, counter++));
   populateKeyset(new SonyTV1b(guiObject, counter++));
@@ -390,6 +401,9 @@ PIRKeysetManager::PIRKeysetManager(
   populateKeyset(new ToshibaDisc1c(guiObject, counter++));
   populateKeyset(new ToshibaDisc1d(guiObject, counter++));
 
+  populateKeyset(new WDMediaPlayer1(guiObject, counter++));
+  populateKeyset(new WDMediaPlayer1a(guiObject, counter++));
+
   populateKeyset(new WestinghouseTV1(guiObject, counter++));
   populateKeyset(new WestinghouseTV2(guiObject, counter++));
 
index f74ed5d..7338b8a 100644 (file)
@@ -33,14 +33,17 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Raite_Make] = "Raite";
   makes[RCA_Make] = "RCA";
   makes[Roku_Make] = "Roku";
+  makes[Saba_Make] = "Saba";
   makes[Sagem_Make] = "Sagem";
   makes[Samsung_Make] = "Samsung";
   makes[Sanyo_Make] = "Sanyo";
   makes[Sharp_Make] = "Sharp";
+  makes[Sky_Make] = "Sky";
   makes[Sony_Make] = "Sony";
   makes[Tivo_Make] = "TiVo";
   makes[Topfield_Make] = "Topfield";
   makes[Toshiba_Make] = "Toshiba";
+  makes[WD_Make] = "Western Digital";
   makes[Westinghouse_Make] = "Westinghouse";
   makes[Yamaha_Make] = "Yamaha";
   makes[Zenith_Make] = "Zenith";
index ff8e407..9f0692d 100644 (file)
@@ -34,14 +34,17 @@ enum PIRMakeName{
   Raite_Make,
   RCA_Make,
   Roku_Make,
+  Saba_Make,
   Sagem_Make,
   Samsung_Make,
   Sanyo_Make,
   Sharp_Make,
+  Sky_Make,
   Sony_Make,
   Tivo_Make,
   Topfield_Make,
   Toshiba_Make,
+  WD_Make,
   Westinghouse_Make,
   Yamaha_Make,
   Zenith_Make
diff --git a/protocols/rc6skyprotocol.cpp b/protocols/rc6skyprotocol.cpp
new file mode 100644 (file)
index 0000000..53c882a
--- /dev/null
@@ -0,0 +1,254 @@
+#include "rc6skyprotocol.h"
+
+#include "pirrx51hardware.h"
+
+#include "pirexception.h"
+
+#include <QMutex>
+extern bool commandInFlight;
+extern QMutex commandIFMutex;
+
+// These defines might need to be turned into variables, for odd devices.
+#define HEADER_PULSE 2666
+#define HEADER_SPACE 888
+#define TRAILER_BIPHASE 888
+
+// This version of Mode 6 RC6 is used in Sky and Sky+ receivers.  It seems to
+// be pretty close to vanilla RC6.
+// The biphase unit of time is 444 usec.
+// The RC6 header block starts with the normal 2666 usec pulse, 888 usec space.
+// The next bit is fixed as a "1", as usual.
+// The next three bits are 110, marking this as a mode 6 protocol.
+// The trailer bit has an 888 usec biphase.  It is a toggle bit.
+// Next comes 8 bits of address, 4 bits I don't know about (subdevice?),
+// and finally 8 bits of command.
+// A space of (at least) 2666 usec must follow any command.
+// The carrier frequency is 36 kHZ, duty cycle between 25 and 50 %.
+
+RC6SkyProtocol::RC6SkyProtocol(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRProtocol(guiObject, index, 2666, false),
+    biphaseUnit(444),
+    buffer(0),
+    keypressCount(0)
+{
+  setCarrierFrequency(36000);
+}
+
+
+void RC6SkyProtocol::startSendingCommand(
+  unsigned int threadableID,
+  PIRKeyName command)
+{
+  try
+  {
+    // Is this command meant for us?
+    if (threadableID != id) return;
+
+    clearRepeatFlag();
+
+    KeycodeCollection::const_iterator i = keycodes.find(command);
+
+    // Sanity check:
+    if (i == keycodes.end())
+    {
+      std::string s = "Tried to send a non-existent command.\n";
+      throw PIRException(s);
+    }
+
+    PIRRX51Hardware rx51device(carrierFrequency, dutyCycle);
+
+    int repeatCount = 0;
+    int duration = 0;
+    while (repeatCount < MAX_REPEAT_COUNT)
+    {
+      bufferContainsSpace = false;
+      bufferContainsPulse = false;
+      // First, construct the "Header" segment of the pulse train.
+      //
+      // The header involves:
+      // a) a "lead" of 2666 us pulse, 888 us space;
+      // b) a "start bit", value 1 (so 444 us pulse, 444 us space)
+      // c) three control bits, set to "110" (i.e., mode "6")
+      // d) the double-sized "trailer" bit, set based on the keypress count:
+
+      rx51device.addSingle(HEADER_PULSE); // lead pulse
+      duration += HEADER_PULSE;
+      rx51device.addSingle(HEADER_SPACE); // lead space
+      duration += HEADER_SPACE;
+      rx51device.addSingle(biphaseUnit); // start bit pulse
+      duration += biphaseUnit;
+      rx51device.addSingle(biphaseUnit); // start bit space
+      duration += biphaseUnit;
+      rx51device.addSingle(biphaseUnit); // bit 1 pulse;
+      duration += biphaseUnit;
+      rx51device.addSingle(biphaseUnit); // bit 1 space;
+      duration += biphaseUnit;
+      rx51device.addSingle(biphaseUnit); // bit 2 pulse;
+      duration += biphaseUnit;
+      rx51device.addSingle(2 * biphaseUnit); // bit 2 space + bit 3 space;
+      duration += 2 * biphaseUnit;
+
+      if (keypressCount % 2)
+      {
+        rx51device.addSingle(biphaseUnit); // bit 3 pulse;
+        duration += biphaseUnit;
+        rx51device.addSingle(2 * biphaseUnit); // trailer space
+        duration += 2 * biphaseUnit;
+        buffer = 2 * biphaseUnit; // trailer pulse goes into the buffer
+        bufferContainsPulse = true;
+      }
+      else
+      {
+        rx51device.addSingle(3 * biphaseUnit); // bit 3 + trailer pulses
+        duration += 3 * biphaseUnit;
+        buffer = 2 * biphaseUnit; // trailer space goes into the buffer
+        bufferContainsSpace = true;
+      }
+
+      // Now, we can start the normal buffering process:
+
+      // push the address data:
+      duration += pushBits(preData, rx51device);
+
+      // push the command data:
+      duration += pushBits((*i).second.firstCode, rx51device);
+
+      // Flush out the buffer, if necessary:
+      if (buffer)
+      {
+        rx51device.addSingle(buffer);
+        duration += buffer;
+        buffer = 0;
+      }
+
+      // Actually send out the command:
+      rx51device.sendCommandToDevice();
+
+      // Sleep for an amount of time.  (RC6 demands an addtional 6 unit space
+      // at the end of any command...)
+      sleepUntilRepeat(duration + 6 * biphaseUnit);
+
+      // Have we been told to stop yet?
+      if (checkRepeatFlag())
+      {
+        // Yes, we can now quit repeating:
+        ++keypressCount;
+        QMutexLocker ciflocker(&commandIFMutex);
+        commandInFlight = false;
+        return;
+      }
+    }
+  }
+  catch (PIRException e)
+  {
+    emit commandFailed(e.getError().c_str());
+  }
+
+  ++keypressCount;
+  QMutexLocker cifLocker(&commandIFMutex);
+  commandInFlight = false;
+}
+
+
+int RC6SkyProtocol::pushBits(
+  const CommandSequence &bits,
+  PIRRX51Hardware &rx51device)
+{
+  int duration = 0;
+
+  CommandSequence::const_iterator i = bits.begin();
+
+  while (i != bits.end())
+  {
+    if (*i)
+    {
+      duration += pushOne(rx51device);
+    }
+    else
+    {
+      duration += pushZero(rx51device);
+    }
+
+    ++i;
+  }
+
+  return duration;
+}
+
+
+// This should be part of a general RC6 parent maybe?
+int RC6SkyProtocol::pushZero(
+  PIRRX51Hardware &rx51device)
+{
+  // Need to add a space, then a pulse.
+  int duration = 0;
+
+  if (bufferContainsSpace)
+  {
+    // Merge this space and the previous one, and send to device:
+    rx51device.addSingle(buffer + biphaseUnit);
+    duration += (buffer + biphaseUnit);
+    buffer = 0;
+     bufferContainsSpace = false;
+  }
+  else
+  {
+    if (bufferContainsPulse)
+    {
+      // Flush out the buffer:
+      rx51device.addSingle(buffer);
+      duration += buffer;
+      buffer = 0;
+      bufferContainsPulse = false;
+    }
+
+    // push a space onto the device:
+    rx51device.addSingle(biphaseUnit);
+    duration += biphaseUnit;
+  }
+
+  // Put a pulse into the buffer to wait:
+  buffer = biphaseUnit;
+  bufferContainsPulse = true;
+
+  return duration;
+}
+
+
+int RC6SkyProtocol::pushOne(
+  PIRRX51Hardware &rx51device)
+{
+  // Need to add a pulse, then a space.
+  int duration = 0;
+
+  // First, the pulse:
+  if (bufferContainsPulse)
+  {
+    rx51device.addSingle(buffer + biphaseUnit);
+    duration += (buffer + biphaseUnit);
+    buffer = 0;
+    bufferContainsPulse = false;
+  }
+  else
+  {
+    if (bufferContainsSpace)
+    {
+      // Flush the buffer:
+      rx51device.addSingle(buffer);
+      duration += buffer;
+      buffer = 0;
+      bufferContainsSpace = false;
+    }
+    // Now, add the pulse:
+    rx51device.addSingle(biphaseUnit);
+    duration += biphaseUnit;
+  }
+
+  // Next, push a space onto the buffer:
+  buffer = biphaseUnit;
+  bufferContainsSpace = true;
+
+  return duration;
+}
diff --git a/protocols/rc6skyprotocol.h b/protocols/rc6skyprotocol.h
new file mode 100644 (file)
index 0000000..18a8a52
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef RC6SKYPROTOCOL_H
+#define RC6SKYPROTOCOL_H
+
+#include "pirprotocol.h"
+
+class PIRRX51Hardware;
+
+//
+// The Sky protocol is a fairly close implementation of RC6 mode 6.
+//
+
+class RC6SkyProtocol: public PIRProtocol
+{
+public:
+  RC6SkyProtocol(
+    QObject *guiObject,
+    unsigned int index);
+
+public slots:
+  void startSendingCommand(
+    unsigned int threadableID,
+    PIRKeyName command);
+
+private:
+  int pushBits(
+    const CommandSequence &bits,
+    PIRRX51Hardware &device);
+
+  int pushZero(
+    PIRRX51Hardware &device);
+
+  int pushOne(
+    PIRRX51Hardware &device);
+
+  unsigned int biphaseUnit;
+
+  unsigned int buffer;
+  int keypressCount;
+
+  bool bufferContainsSpace;
+  bool bufferContainsPulse;
+};
+
+#endif // RC6SKYPROTOCOL_H 
diff --git a/protocols/thomsonprotocol.cpp b/protocols/thomsonprotocol.cpp
new file mode 100644 (file)
index 0000000..b53075f
--- /dev/null
@@ -0,0 +1,130 @@
+#include "thomsonprotocol.h"
+
+#include "pirrx51hardware.h"
+
+#include "pirexception.h"
+
+// Some global communications stuff:
+#include <QMutex>
+extern bool commandInFlight;
+extern QMutex commandIFMutex;
+
+// This Thomson protocol is a very simple one:
+// A "zero" is encoded with a 500 usec pulse, 2000 usec space.
+// A "one" is encoded with a 500 usec pulse, and 4500 usec space.
+// There is no header.
+// Commands end with a trailing 500 usec pulse.
+// When repeating, the full pulse train is re-sent.
+// Each command runs for 80000 usec total.
+// The carrier frequency should be 33 kHz, but I'm not so sure...
+
+ThomsonProtocol::ThomsonProtocol(
+  QObject *guiObject,
+  unsigned int index)
+  : SpaceProtocol(
+      guiObject, index,
+      500, 2000,
+      500, 4500,
+      0, 0,
+      500,
+      80000, true),
+    keypressCount(0)
+{
+}
+
+
+void ThomsonProtocol::startSendingCommand(
+  unsigned int threadableID,
+  PIRKeyName command)
+{
+  // Exceptions here are problematic; I'll try to weed them out by putting the
+  // whole thing in a try/catch block:
+  try
+  {
+    // First, check if we are meant to be the recipient of this command:
+    if (threadableID != id) return;
+
+    clearRepeatFlag();
+
+    KeycodeCollection::const_iterator i = keycodes.find(command);
+
+    // Do we even have this key defined?
+    if (i == keycodes.end())
+    {
+      std::string s = "Tried to send a non-existent command.\n";
+      throw PIRException(s);
+    }
+
+    // construct the device:
+    PIRRX51Hardware rx51device(carrierFrequency, dutyCycle);
+
+    int repeatCount = 0;
+    int commandDuration = 0;
+    while (repeatCount < MAX_REPEAT_COUNT)
+    {
+      commandDuration = generateStandardCommand((*i).second, rx51device);
+
+      // Now, tell the device to send the whole command:
+      rx51device.sendCommandToDevice();
+
+      // sleep until the next repetition of command:
+      sleepUntilRepeat(commandDuration);
+
+      // Check whether we've reached the minimum required number of repetitons:
+      if (repeatCount >= minimumRepetitions)
+      {
+        // Check whether we've been asked to stop:
+        if (checkRepeatFlag())
+        {
+          ++keypressCount;
+          QMutexLocker cifLocker(&commandIFMutex);
+          commandInFlight = false;
+          return;
+        }
+      }
+
+      ++repeatCount;
+    }
+  }
+  catch (PIRException e)
+  {
+    // inform the gui:
+    emit commandFailed(e.getError().c_str());
+  }
+
+  ++keypressCount;
+  QMutexLocker cifLocker(&commandIFMutex);
+  commandInFlight = false;
+}
+
+
+int ThomsonProtocol::generateStandardCommand(
+  const PIRKeyBits &pkb,
+  PIRRX51Hardware &rx51device)
+{
+  int duration = 0;
+
+  // First, four bits of address:
+  duration += pushBits(preData, rx51device);
+
+  // Next, the toggle bit:
+  if (keypressCount % 2)
+  {
+    rx51device.addPair(onePulse, oneSpace);
+    duration += (onePulse + oneSpace);
+  }
+  else
+  {
+    rx51device.addPair(zeroPulse, zeroSpace);
+    duration += (zeroPulse + zeroSpace);
+  }
+
+  // Next, seven bits of command:
+  duration += pushBits(pkb.firstCode, rx51device);
+
+  // Finally add the "trail":
+  rx51device.addSingle(trailerPulse);
+  duration += trailerPulse;
+
+  return duration;
+}
diff --git a/protocols/thomsonprotocol.h b/protocols/thomsonprotocol.h
new file mode 100644 (file)
index 0000000..4c11595
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef THOMSONPROTOCOL_H
+#define THOMSONPROTOCOL_H
+
+#include "spaceprotocol.h"
+
+class PIRRX51Hardware;
+
+//
+// Thomson protocol is a nice little protocol, taking space-encoded values
+// from the NEC protocol family and adding a toggle bit from the Philips
+// family...
+//
+
+class ThomsonProtocol: public SpaceProtocol
+{
+public:
+  ThomsonProtocol(
+    QObject *guiObject,
+    unsigned int index);
+
+public slots:
+  void startSendingCommand(
+    unsigned int threadableID,
+    PIRKeyName command);
+
+private:
+  unsigned int keypressCount;
+
+  int generateStandardCommand(
+    const PIRKeyBits &bits,
+    PIRRX51Hardware &device);
+};
+
+#endif // NECPROTOCOL_H
index f56ade2..9cd34db 100644 (file)
@@ -1,3 +1,10 @@
+pierogi (0.6.2) unstable; urgency=low
+  * Fixed an embarrasing bug in the LG keysets
+  * Added a few more Daewoo keysets
+  * Make a first pass at keysets for Sky, Western Digital, and Saba
+
+ -- John Pietrzak <jpietrzak8@gmail.com>  Sun, 12 Feb 2012 23:11:58 -0500
+
 pierogi (0.6.1) unstable; urgency=low
   * Moved Mute button to main tab, brought Picture Mode and Sound Mode back up to utility tab
   * Added keysets for Admiral, Daewoo, Grundig, Logitech, Philco, Roku, and Topfield
index b455e73..8ae4c65 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: UI change, lots more keysets
- Due to popular demand, the Mute button has been moved to the main tab.  Also added lots of keysets: Admiral, Daewoo, Grundig, Logitech, Philco, Roku, and Topfield.  As usual, these all need to be tested!
+XB-Maemo-Upgrade-Description: Small bug fix, more keysets
+ An embarrasing bug in the LG keysets has been fixed.  Also, added more Daewoo keysets, and made a first pass at Sky, WD, and Saba keysets.
 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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
diff --git a/sideshotleftform.cpp b/sideshotleftform.cpp
new file mode 100644 (file)
index 0000000..2ff531d
--- /dev/null
@@ -0,0 +1,14 @@
+#include "sideshotleftform.h"
+#include "ui_sideshotleftform.h"
+
+SideshotLeftForm::SideshotLeftForm(QWidget *parent) :
+  QWidget(parent),
+  ui(new Ui::SideshotLeftForm)
+{
+  ui->setupUi(this);
+}
+
+SideshotLeftForm::~SideshotLeftForm()
+{
+  delete ui;
+}
diff --git a/sideshotleftform.h b/sideshotleftform.h
new file mode 100644 (file)
index 0000000..68b105e
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef SIDESHOTLEFTFORM_H
+#define SIDESHOTLEFTFORM_H
+
+#include <QWidget>
+
+namespace Ui {
+class SideshotLeftForm;
+}
+
+class SideshotLeftForm : public QWidget
+{
+  Q_OBJECT
+  
+public:
+  explicit SideshotLeftForm(QWidget *parent = 0);
+  ~SideshotLeftForm();
+  
+private:
+  Ui::SideshotLeftForm *ui;
+};
+
+#endif // SIDESHOTLEFTFORM_H
diff --git a/sideshotleftform.ui b/sideshotleftform.ui
new file mode 100644 (file)
index 0000000..2630fa6
--- /dev/null
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SideshotLeftForm</class>
+ <widget class="QWidget" name="SideshotLeftForm">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>480</width>
+    <height>800</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="margin">
+    <number>8</number>
+   </property>
+   <item row="0" column="0">
+    <widget class="QPushButton" name="sslVolumeUpButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Volume Up</string>
+     </property>
+     <property name="icon">
+      <iconset resource="PierogiResources.qrc">
+       <normaloff>:/icons/sound_high_icon&amp;48.png</normaloff>:/icons/sound_high_icon&amp;48.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QPushButton" name="sslVolumeDownButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Volume Down</string>
+     </property>
+     <property name="icon">
+      <iconset resource="PierogiResources.qrc">
+       <normaloff>:/icons/sound_low_icon&amp;48.png</normaloff>:/icons/sound_low_icon&amp;48.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QPushButton" name="sslMuteButton">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>Mute</string>
+       </property>
+       <property name="icon">
+        <iconset resource="PierogiResources.qrc">
+         <normaloff>:/icons/sound_mute_icon&amp;48.png</normaloff>:/icons/sound_mute_icon&amp;48.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>48</width>
+         <height>48</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="sslPowerButton">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>Power</string>
+       </property>
+       <property name="icon">
+        <iconset resource="PierogiResources.qrc">
+         <normaloff>:/icons/on-off_icon&amp;48.png</normaloff>:/icons/on-off_icon&amp;48.png</iconset>
+       </property>
+       <property name="iconSize">
+        <size>
+         <width>48</width>
+         <height>48</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="1">
+    <widget class="QPushButton" name="sslChannelUpButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Channel Up</string>
+     </property>
+     <property name="icon">
+      <iconset resource="PierogiResources.qrc">
+       <normaloff>:/icons/br_up_icon&amp;48.png</normaloff>:/icons/br_up_icon&amp;48.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <item>
+      <widget class="QLabel" name="sslMakeLabel">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>Samsung</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="sslKeysetLabel">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>TV Keyset 1</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="1">
+    <widget class="QPushButton" name="sslChannelDownButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Channel Down</string>
+     </property>
+     <property name="icon">
+      <iconset resource="PierogiResources.qrc">
+       <normaloff>:/icons/br_down_icon&amp;48.png</normaloff>:/icons/br_down_icon&amp;48.png</iconset>
+     </property>
+     <property name="iconSize">
+      <size>
+       <width>48</width>
+       <height>48</height>
+      </size>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="PierogiResources.qrc"/>
+ </resources>
+ <connections/>
+</ui>