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, 16 Feb 2012 03:52:13 +0000 (22:52 -0500)
committerJohn Pietrzak <john@pietrzak.org>
Thu, 16 Feb 2012 03:52:13 +0000 (22:52 -0500)
Just adding a few more keysets, this time for Beko, Cambridge, Haier, and
Kenwood.

17 files changed:
keysets/beko.cpp [new file with mode: 0644]
keysets/beko.h [new file with mode: 0644]
keysets/cambridge.cpp [new file with mode: 0644]
keysets/cambridge.h [new file with mode: 0644]
keysets/haier.cpp [new file with mode: 0644]
keysets/haier.h [new file with mode: 0644]
keysets/kenwood.cpp [new file with mode: 0644]
keysets/kenwood.h [new file with mode: 0644]
keysets/panasonic.cpp
keysets/samsung.cpp
pierogi.pro
pierogi.pro.user
pirkeysetmanager.cpp
pirmakenames.cpp
pirmakenames.h
qtc_packaging/debian_fremantle/changelog
qtc_packaging/debian_fremantle/control

diff --git a/keysets/beko.cpp b/keysets/beko.cpp
new file mode 100644 (file)
index 0000000..f70fc32
--- /dev/null
@@ -0,0 +1,56 @@
+#include "beko.h"
+#include "protocols/rc5protocol.h"
+
+
+BekoTV1::BekoTV1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "TV Keyset 1",
+      Beko_Make,
+      index)
+{
+  threadableProtocol = new RC5Protocol(guiObject, index);
+
+  addKey("MIX", TeletextAndTV_Key, 0x1004, 13);
+  addKey("DOUBLE", TeletextSize_Key, 0x1007, 13);
+  addKey("SUB", Unmapped_Key, 0x100A, 13);
+  addKey("STOP", TeletextHold_Key, 0x100C, 13);
+  addKey("REVEAL", TeletextReveal_Key, 0x100E, 13);
+  addKey("UPDATE", Unmapped_Key, 0x100F, 13);
+
+  addKey("0", Zero_Key, 0x1010, 13);
+  addKey("1", One_Key, 0x1011, 13);
+  addKey("2", Two_Key, 0x1012, 13);
+  addKey("3", Three_Key, 0x1013, 13);
+  addKey("4", Four_Key, 0x1014, 13);
+  addKey("5", Five_Key, 0x1015, 13);
+  addKey("6", Six_Key, 0x1016, 13);
+  addKey("7", Seven_Key, 0x1017, 13);
+  addKey("8", Eight_Key, 0x1018, 13);
+  addKey("9", Nine_Key, 0x1019, 13);
+  addKey("1_X_CHANNELS", DoubleDigit_Key, 0x101A, 13);
+  addKey("PR_DOWN", ChannelDown_Key, 0x101B, 13);
+  addKey("PR_DOWN", Down_Key, 0x101B, 13);
+  addKey("PR_UP", ChannelUp_Key, 0x101C, 13);
+  addKey("PR_UP", Up_Key, 0x101C, 13);
+
+  addKey("POWER_OFF", PowerOff_Key, 0x1020, 13); // ?
+  addKey("16:9", AspectRatio_Key, 0x1023, 13);
+  addKey("VOL_UP", VolumeUp_Key, 0x1024, 13);
+  addKey("VOL_UP", Right_Key, 0x1024, 13);
+  addKey("VOL_LOW", VolumeDown_Key, 0x1025, 13);
+  addKey("VOL_LOW", Left_Key, 0x1025, 13);
+  addKey("RED", Red_Key, 0x1026, 13);
+  addKey("SWAP", PrevChannel_Key, 0x1027, 13);
+  addKey("OK", Select_Key, 0x1028, 13);
+  addKey("MENU", Menu_Key, 0x1029, 13);
+  addKey("AV/TV", Input_Key, 0x102A, 13);
+  addKey("MUTE", Mute_Key, 0x102B, 13);
+  addKey("GREEN", Green_Key, 0x102C, 13);
+  addKey("YELLOW", Yellow_Key, 0x102E, 13);
+  addKey("I", Info_Key, 0x102F, 13); // ?
+
+  addKey("TXT", Teletext_Key, 0x1031, 13); // ?
+  addKey("BLUE", Blue_Key, 0x1033, 13);
+}
diff --git a/keysets/beko.h b/keysets/beko.h
new file mode 100644 (file)
index 0000000..839e30b
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef BEKO_H
+#define BEKO_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class BekoTV1: public PIRKeysetMetaData
+{
+public:
+  BekoTV1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+#endif // BEKO_H
diff --git a/keysets/cambridge.cpp b/keysets/cambridge.cpp
new file mode 100644 (file)
index 0000000..6bc9ea6
--- /dev/null
@@ -0,0 +1,247 @@
+#include "cambridge.h"
+#include "protocols/necprotocol.h"
+#include "protocols/necxprotocol.h"
+#include "protocols/rc5protocol.h"
+
+
+CambridgeCD1::CambridgeCD1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "CD Keyset 1",
+      Cambridge_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x4D84, 16);
+
+  addKey("RANDOM", Random_Key, 0x00, 8);
+  addKey("REPEAT", Repeat_Key, 0x01, 8);
+  addKey("REMAIN", Unmapped_Key, 0x02, 8);
+  addKey("PROG", Program_Key, 0x03, 8);
+  addKey("INTRO", Unmapped_Key, 0x04, 8);
+  addKey("SPACE", Unmapped_Key, 0x05, 8);
+  addKey("A<>B", RepeatAB_Key, 0x06, 8);
+  addKey("1", One_Key, 0x09, 8);
+  addKey("<<", Rewind_Key, 0x0A, 8);
+  addKey("PAUSE", Pause_Key, 0x0B, 8);
+  addKey("4", Four_Key, 0x0D, 8);
+  addKey("|<<", Previous_Key, 0x0E, 8);
+  addKey("STOP", Stop_Key, 0x0F, 8);
+
+  addKey("OPEN/CLOSE", Eject_Key, 0x10, 8);
+  addKey("7", Seven_Key, 0x11, 8);
+  addKey("10", Zero_Key, 0x12, 8);
+  addKey("PLAY", Play_Key, 0x13, 8);
+  addKey("8", Eight_Key, 0x15, 8);
+  addKey("+10", DoubleDigit_Key, 0x16, 8);
+  addKey("9", Nine_Key, 0x17, 8);
+  addKey("5", Five_Key, 0x19, 8);
+  addKey(">>|", Next_Key, 0x1A, 8);
+  addKey("6", Six_Key, 0x1B, 8);
+  addKey("2", Two_Key, 0x1D, 8);
+  addKey(">>", FastForward_Key, 0x1E, 8);
+  addKey("3", Three_Key, 0x1F, 8);
+}
+
+
+CambridgeAudio1::CambridgeAudio1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Audio Keyset 1",
+      Cambridge_Make,
+      index)
+{
+  threadableProtocol = new NECXProtocol(guiObject, index, true);
+
+  setPreData(0xA0A0, 16);
+
+  addKey("1", One_Key, 0x01, 8);
+  addKey("5", Five_Key, 0x02, 8);
+  addKey("9", Nine_Key, 0x03, 8);
+  addKey("rew", Rewind_Key, 0x04, 8);
+  addKey("prev", Previous_Key, 0x05, 8);
+  addKey("intro", Unmapped_Key, 0x06, 8);
+  addKey("eject", Eject_Key, 0x07, 8);
+  addKey("2", Two_Key, 0x09, 8);
+  addKey("6", Six_Key, 0x0A, 8);
+  addKey("0", Zero_Key, 0x0B, 8);
+  addKey("fwd", FastForward_Key, 0x0C, 8);
+  addKey("next", Next_Key, 0x0D, 8);
+  addKey("rnd", Random_Key, 0x0E, 8);
+  addKey("remain", Unmapped_Key, 0x0F, 8);
+
+  addKey("3", Three_Key, 0x11, 8);
+  addKey("7", Seven_Key, 0x12, 8);
+  addKey("onetwodash", DoubleDigit_Key, 0x13, 8);
+  addKey("play", Play_Key, 0x15, 8);
+  addKey("repeat", Repeat_Key, 0x16, 8);
+  addKey("ab", RepeatAB_Key, 0x17, 8);
+  addKey("4", Four_Key, 0x19, 8);
+  addKey("8", Eight_Key, 0x1A, 8);
+  addKey("prog", Program_Key, 0x1B, 8);
+  addKey("stop", Stop_Key, 0x1C, 8);
+  addKey("pause", Pause_Key, 0x1D, 8);
+  addKey("skip", NextDisc_Key, 0x1E, 8);
+
+  addKey("light", Info_Key, 0x47, 8);
+}
+
+
+CambridgeAudio2::CambridgeAudio2(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Audio Keyset 2",
+      Cambridge_Make,
+      index)
+{
+  threadableProtocol = new NECXProtocol(guiObject, index, true);
+
+  setPreData(0xC0C0, 16);
+
+  addKey("SPK_SETUP", Unmapped_Key, 0x01, 8);
+  addKey("PLII_NEO6", Unmapped_Key, 0x02, 8);
+  addKey("VOLUME_UP", VolumeUp_Key, 0x03, 8);
+  addKey("VOLUME_UP", Up_Key, 0x03, 8);
+  addKey("DISPLAY", Info_Key, 0x04, 8);
+  addKey("LEFT", Left_Key, 0x06, 8);
+  addKey("TEST_TONE", Unmapped_Key, 0x07, 8);
+  addKey("DSP_MODE", Unmapped_Key, 0x09, 8);
+  addKey("BASS_TRIBLE", Unmapped_Key, 0x0A, 8);
+  addKey("POWER", Power_Key, 0x0C, 8);
+  addKey("CH_SELECT", Unmapped_Key, 0x0D, 8);
+  addKey("STEREO_MONO", Audio_Key, 0x0E, 8);
+  addKey("6.1_DIRECT", Unmapped_Key, 0x0F, 8);
+
+  addKey("I-O", Unmapped_Key, 0x11, 8);
+  addKey("SUB_ON_OFF", Unmapped_Key, 0x12, 8);
+  addKey("DYNAMIC", Unmapped_Key, 0x13, 8);
+  addKey("MUTE", Mute_Key, 0x14, 8);
+  addKey("RIGHT", Right_Key, 0x15, 8);
+  addKey("PTY", Unmapped_Key, 0x16, 8);
+  addKey("DDEX_DTSES", Unmapped_Key, 0x17, 8);
+  addKey("STEREO", Unmapped_Key, 0x1A, 8);
+  addKey("APS", Unmapped_Key, 0x1B, 8);
+  addKey("TUNER_AM_FM", TunerBand_Key, 0x1C, 8);
+  addKey("STORE", Memory_Key, 0x1D, 8);
+  addKey("MODE", Mode_Key, 0x1E, 8);
+  addKey("VOLUME_DOWN", VolumeDown_Key, 0x1F, 8);
+  addKey("VOLUME_DOWN", Down_Key, 0x1F, 8);
+  addKey("LFE_TRIM", Unmapped_Key, 0x20, 8);
+  addKey("ENTER", Select_Key, 0x21, 8);
+
+  addKey("DVD", DVDInput_Key, 0x22, 8);
+  addKey("VIDEO1", Unmapped_Key, 0x23, 8);
+  addKey("VIDEO2", Unmapped_Key, 0x24, 8);
+  addKey("VIDEO3", Unmapped_Key, 0x25, 8);
+  addKey("TAPE_MD_CDR", TapeInput_Key, 0x26, 8);
+  addKey("CD_AUX", AuxInput_Key, 0x27, 8);
+
+  addKey("INPUT_MODE", Unmapped_Key, 0x60, 8);
+  addKey("DELAY", Unmapped_Key, 0xA0, 8);
+}
+
+
+CambridgeAudio3::CambridgeAudio3(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Audio Keyset 3",
+      Cambridge_Make,
+      index)
+{
+  threadableProtocol = new RC5Protocol(guiObject, index);
+
+  addKey("Tape_Mon", TapeInput_Key, 0x1400, 13);
+  addKey("DVD", DVDInput_Key, 0x1401, 13);
+  addKey("AV_MD", MDInput_Key, 0x1402, 13);
+  addKey("Tuner_DAB", TunerInput_Key, 0x1403, 13);
+  addKey("Aux_Phono", AuxInput_Key, 0x1404, 13);
+  addKey("CD", CDInput_Key, 0x1405, 13);
+  addKey("Standby", Power_Key, 0x140C, 13);
+  addKey("Mute", Mute_Key, 0x140D, 13);
+  addKey("Power_On", PowerOn_Key, 0x140E, 13);
+  addKey("Power_Off", PowerOff_Key, 0x140F, 13);
+  addKey("Vol_Up", VolumeUp_Key, 0x1410, 13);
+  addKey("Vol_Down", VolumeDown_Key, 0x1411, 13);
+  addKey("Brightness", Unmapped_Key, 0x1412, 13); // dimmer?
+  addKey("Source_Up", Unmapped_Key, 0x1413, 13);
+  addKey("Source_Down", Unmapped_Key, 0x1414, 13);
+  addKey("Clip_Off", Unmapped_Key, 0x1415, 13);
+  addKey("Clip_On", Unmapped_Key, 0x1416, 13);
+  addKey("Mute_On", Unmapped_Key, 0x1432, 13);
+  addKey("Mute_Off", Unmapped_Key, 0x1433, 13);
+}
+
+
+CambridgeDVD1::CambridgeDVD1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "DVD Keyset 1",
+      Cambridge_Make,
+      index)
+{
+  addControlledDevice(Cambridge_Make, "DVD53", DVD_Device);
+  addControlledDevice(Cambridge_Make, "DVD55", DVD_Device);
+  addControlledDevice(Cambridge_Make, "DVD57", DVD_Device);
+  addControlledDevice(Cambridge_Make, "DVD59B", DVD_Device);
+
+  threadableProtocol = new NECProtocol(guiObject, index, false, true);
+
+  setPreData(0x07, 8);
+
+  addKey("STANDBY", Power_Key, 0x01, 8);
+  addKey("SF", Unmapped_Key, 0x04, 8);
+  addKey("0", Zero_Key, 0x05, 8);
+  addKey("EQ", Unmapped_Key, 0x06, 8);
+  addKey("PAL/NTSC", Unmapped_Key, 0x07, 8);
+  addKey("<<", Rewind_Key, 0x08, 8);
+  addKey("1", One_Key, 0x09, 8);
+  addKey(">>", FastForward_Key, 0x0A, 8);
+  addKey("|<<", Previous_Key, 0x0B, 8);
+  addKey("PSM", Unmapped_Key, 0x0C, 8);
+  addKey("5", Five_Key, 0x0D, 8);
+  addKey("REPEAT", Repeat_Key, 0x0E, 8);
+  addKey("A-B", RepeatAB_Key, 0x0F, 8);
+
+  addKey("SLOW", Slow_Key, 0x10, 8);
+  addKey("9", Nine_Key, 0x11, 8);
+  addKey("MODE", Mode_Key, 0x12, 8);
+  addKey("MUTE", Mute_Key, 0x13, 8);
+  addKey("PLAY", Play_Key, 0x14, 8);
+  addKey("AUDIO", Audio_Key, 0x15, 8);
+  addKey("PAUSE", Pause_Key, 0x16, 8);
+  addKey("STOP", Stop_Key, 0x17, 8);
+  addKey("TITLE", DiscTitle_Key, 0x19, 8);
+  addKey("SETUP", Menu_Key, 0x1D, 8);
+
+  addKey("EJECT", Eject_Key, 0x43, 8);
+  addKey("OSD", Info_Key, 0x46, 8);
+  addKey("2", Two_Key, 0x48, 8);
+  addKey("3", Three_Key, 0x49, 8);
+  addKey(">>|", Next_Key, 0x4A, 8);
+  addKey("4", Four_Key, 0x4B, 8);
+  addKey("6", Six_Key, 0x4C, 8);
+  addKey("7", Seven_Key, 0x4D, 8);
+  addKey("CLEAR", Clear_Key, 0x4E, 8);
+  addKey("8", Eight_Key, 0x4F, 8);
+
+  addKey("10+", DoubleDigit_Key, 0x51, 8);
+  addKey("VOL-", VolumeDown_Key, 0x52, 8);
+  addKey("GOTO", Unmapped_Key, 0x53, 8);
+  addKey("SUBTITLE", Captions_Key, 0x54, 8);
+  addKey("ANGLE", Angle_Key, 0x55, 8);
+  addKey("VOL+", VolumeUp_Key, 0x56, 8);
+  addKey("ZOOM", Zoom_Key, 0x57, 8);
+  addKey("left", Left_Key, 0x58, 8);
+  addKey("up", Up_Key, 0x59, 8);
+  addKey("MENU", DiscMenu_Key,0x5B, 8);
+  addKey("down", Down_Key, 0x5C, 8);
+  addKey("SELECT", Select_Key, 0x5D, 8);
+  addKey("right", Right_Key, 0x5E, 8);
+  addKey("RETURN", Exit_Key, 0x5F, 8);
+}
diff --git a/keysets/cambridge.h b/keysets/cambridge.h
new file mode 100644 (file)
index 0000000..9e7c800
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef CAMBRIDGE_H
+#define CAMBRIDGE_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class CambridgeCD1: public PIRKeysetMetaData
+{
+public:
+  CambridgeCD1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class CambridgeAudio1: public PIRKeysetMetaData
+{
+public:
+  CambridgeAudio1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class CambridgeAudio2: public PIRKeysetMetaData
+{
+public:
+  CambridgeAudio2(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class CambridgeAudio3: public PIRKeysetMetaData
+{
+public:
+  CambridgeAudio3(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class CambridgeDVD1: public PIRKeysetMetaData
+{
+public:
+  CambridgeDVD1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+#endif // CAMBRIDGE_H
diff --git a/keysets/haier.cpp b/keysets/haier.cpp
new file mode 100644 (file)
index 0000000..df14f06
--- /dev/null
@@ -0,0 +1,44 @@
+#include "haier.h"
+#include "protocols/aiwaprotocol.h"
+
+HaierTV1::HaierTV1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "TV Keyset 1",
+      Haier_Make,
+      index)
+{
+  addControlledDevice(Haier_Make, "TN201AUV", TV_Device);
+
+  threadableProtocol = new AiwaProtocol(guiObject, index);
+
+  setPreData(0x011C, 13);
+
+  addKey("1", One_Key, 0x00, 8);
+  addKey("2", Two_Key, 0x01, 8);
+  addKey("3", Three_Key, 0x02, 8);
+  addKey("4", Four_Key, 0x03, 8);
+  addKey("5", Five_Key, 0x04, 8);
+  addKey("6", Six_Key, 0x05, 8);
+  addKey("7", Seven_Key, 0x06, 8);
+  addKey("8", Eight_Key, 0x07, 8);
+  addKey("9", Nine_Key, 0x08, 8);
+  addKey("0", Zero_Key, 0x09, 8);
+  addKey("last (prev ch)", PrevChannel_Key, 0x0E, 8);
+  addKey("menu", Menu_Key, 0x0D, 8);
+  addKey("tv/av", Input_Key, 0x0F, 8);
+
+  addKey("vol up", VolumeUp_Key, 0x10, 8); // "right arrow"
+  addKey("vol up", Right_Key, 0x10, 8); // "right arrow"
+  addKey("power", Power_Key, 0x12, 8);
+  addKey("channel up", ChannelUp_Key, 0x13, 8); // "up arrow"
+  addKey("channel up", Up_Key, 0x13, 8); // "up arrow"
+  addKey("vol down", VolumeDown_Key, 0x14, 8); // "left arrow"
+  addKey("vol down", Left_Key, 0x14, 8); // "left arrow"
+  addKey("mute", Mute_Key, 0x16, 8);
+  addKey("channel down", ChannelDown_Key, 0x17, 8); // "down arrow"
+  addKey("channel down", Down_Key, 0x17, 8); // "down arrow"
+  addKey("display", Info_Key, 0x18, 8);
+  addKey("rating", Unmapped_Key, 0x1B, 8);
+}
diff --git a/keysets/haier.h b/keysets/haier.h
new file mode 100644 (file)
index 0000000..c0ae1ea
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef HAIER_H
+#define HAIER_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class HaierTV1: public PIRKeysetMetaData
+{
+public:
+  HaierTV1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+#endif // HAIER_H
diff --git a/keysets/kenwood.cpp b/keysets/kenwood.cpp
new file mode 100644 (file)
index 0000000..96653b0
--- /dev/null
@@ -0,0 +1,508 @@
+#include "kenwood.h"
+#include "protocols/necprotocol.h"
+
+
+KenwoodAudio1::KenwoodAudio1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Audio Keyset 1",
+      Kenwood_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, false, true);
+
+  setPreData(0xB8, 8);
+
+  addKey("REW", Rewind_Key, 0x06, 8); // "CD_REW"
+  addKey("FWD", FastForward_Key, 0x07, 8); // "CD_FFWD"
+  addKey("DISC", NextDisc_Key, 0x08, 8);
+  addKey("VOL_CENTRE_DOWN", CenterVolumeDown_Key, 0x0A, 8);
+  addKey("VOL_CENTRE_UP", CenterVolumeUp_Key, 0x0B, 8);
+  addKey("10", DoubleDigit_Key, 0x0D, 8);
+
+  addKey("ENTER", Enter_Key, 0x1D, 8);
+
+  addKey("SQ2", Unmapped_Key, 0x4D, 8); // "DELAY_SURROUND"
+
+  addKey("SOURCEDIRECT", Unmapped_Key, 0x54, 8);
+  addKey("FUNCTION", Unmapped_Key, 0x57, 8);
+  addKey("RED", Red_Key, 0x56, 8); // "TEST_TONE"
+
+  addKey("0", Zero_Key, 0x80, 8);
+  addKey("1", One_Key, 0x81, 8);
+  addKey("2", Two_Key, 0x82, 8);
+  addKey("3", Three_Key, 0x83, 8);
+  addKey("4", Four_Key, 0x84, 8);
+  addKey("5", Five_Key, 0x85, 8);
+  addKey("6", Six_Key, 0x86, 8);
+  addKey("7", Seven_Key, 0x87, 8);
+  addKey("8", Eight_Key, 0x88, 8);
+  addKey("9", Nine_Key, 0x89, 8);
+  addKey("TUNER_DOWN", ChannelDown_Key, 0x8C, 8);
+  addKey("TUNER_AM", Unmapped_Key, 0x8E, 8);
+  addKey("TUNER_BAND", TunerBand_Key, 0x8F, 8); // "Tuner_FM"
+
+  addKey("PHONO", PhonoInput_Key, 0x90, 8);
+  addKey("SELECT_TUNER", TunerInput_Key, 0x91, 8);
+  addKey("SELECT_CD", CDInput_Key, 0x92, 8);
+  addKey("SELECT_VIDEO_2", AuxInput_Key, 0x93, 8); // "AUX"
+  addKey("SELECT_TAPE_A", TapeInput_Key, 0x94, 8);
+  addKey("SELECT_TAPE_B", Unmapped_Key, 0x95, 8);
+  addKey("SELECT_VIDEO_1", Unmapped_Key, 0x96, 8);
+  addKey("TUNER_UP", ChannelUp_Key, 0x99, 8);
+  addKey("VOL-", VolumeDown_Key, 0x9A, 8);
+  addKey("VOL+", VolumeUp_Key, 0x9B, 8);
+  addKey("MUTE", Mute_Key, 0x9C, 8);
+  addKey("POWER", Power_Key, 0x9D, 8);
+  addKey("TUNER_DIRECT", Unmapped_Key, 0x9E, 8);
+  addKey("TUNER_A/B", Unmapped_Key, 0x9F, 8);
+
+  addKey("Phono-STOP", Unmapped_Key, 0xC0, 8);
+  addKey("Phono-PLAY", Unmapped_Key, 0xC1, 8);
+  addKey("M.CALL", Call_Key, 0xC5, 8);
+  addKey("VOL_REAR_DOWN", RearVolumeDown_Key, 0xC6, 8);
+  addKey("VOL_REAR_UP", RearVolumeUp_Key, 0xC7, 8);
+  addKey("CD_STOP", Stop_Key, 0xC9, 8);
+  addKey("CD_PLAY/PAUSE", Play_Key, 0xCB, 8);
+  addKey("CD_PLAY/PAUSE", Pause_Key, 0xCB, 8);
+  addKey("CD_SEARCH_REW", Previous_Key, 0xCE, 8); // "CD_SKIPBACK"
+  addKey("CD_SEARCH_FWD", Next_Key, 0xCF, 8); // "CD_SKIPFORWARD"
+
+  addKey("TAPE_A_REV_PLAY", Unmapped_Key, 0xD0, 8);
+  addKey("TAPE_A_FWD_PLAY", Unmapped_Key, 0xD1, 8);
+  addKey("TAPE_A_REWIND", Unmapped_Key, 0xD2, 8);
+  addKey("TAPE_A_FFWD", Unmapped_Key, 0xD3, 8);
+  addKey("TAPE_A_PAUSE", Unmapped_Key, 0xD4, 8);
+  addKey("TAPE_A_STOP", Unmapped_Key, 0xD5, 8);
+  addKey("TAPE_A_RECORD", Unmapped_Key, 0xD6, 8);
+  addKey("STEREO", Audio_Key, 0xD7, 8);
+  addKey("TAPE_B_REV_PLAY", Unmapped_Key, 0xD8, 8);
+  addKey("TAPE_A_FWD_PLAY", Unmapped_Key, 0xD9, 8);
+  addKey("TAPE_A_REWIND", Unmapped_Key, 0xDA, 8);
+  addKey("TAPE_A_FFWD", Unmapped_Key, 0xDB, 8);
+  addKey("TAPE_A_PAUSE", Unmapped_Key, 0xDC, 8);
+  addKey("TAPE_A_STOP", Unmapped_Key, 0xDD, 8);
+  addKey("TAPE_A_RECORD", Unmapped_Key, 0xDE, 8);
+  addKey("SURROUND", Surround_Key, 0xDF, 8);
+}
+
+/*
+KenwoodAudio2::KenwoodAudio2(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Audio Keyset 2",
+      Kenwood_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x0000, 16);
+
+  addKey("POWER", Power_Key, 0x9D, 8);
+  addKey("REW", Rewind_Key, 0xDA, 8);
+  addKey("FWD", FastForward_Key, 0xDB, 8);
+}
+*/
+
+
+KenwoodComponent1::KenwoodComponent1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Component Keyset 1",
+      Kenwood_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x00B8, 16);
+
+  addKey("discskip", NextDisc_Key, 0x08, 8);
+  addKey("CENTER_DOWN", CenterVolumeDown_Key, 0x0A, 8);
+  addKey("CENTER_UP", CenterVolumeUp_Key, 0x0B, 8);
+  addKey("+10", DoubleDigit_Key, 0x0D, 8);
+  addKey("TIME", Unmapped_Key, 0x0E, 8); // "pty/time"
+  addKey("EFFECT", Unmapped_Key, 0x0F, 8); // "GE_EFFECT", "EQ.ON/OFF"
+
+  addKey("LD", Unmapped_Key, 0x16, 8);
+
+  addKey("DELAY/ASFC-", Unmapped_Key, 0x4C, 8);
+  addKey("DELAY/ASFC+", Unmapped_Key, 0x4D, 8);
+
+  addKey("CENTER_MODE", Unmapped_Key, 0x55, 8);
+  addKey("TEST_TONE", Unmapped_Key, 0x56, 8);
+  addKey("RDS_DISP", Info_Key, 0x58, 8);
+  addKey("Loudness", Unmapped_Key, 0x5F, 8);
+
+  addKey("0", Zero_Key, 0x80, 8);
+  addKey("1", One_Key, 0x81, 8);
+  addKey("2", Two_Key, 0x82, 8);
+  addKey("3", Three_Key, 0x83, 8);
+  addKey("4", Four_Key, 0x84, 8);
+  addKey("5", Five_Key, 0x85, 8);
+  addKey("6", Six_Key, 0x86, 8);
+  addKey("7", Seven_Key, 0x87, 8);
+  addKey("8", Eight_Key, 0x88, 8);
+  addKey("9", Nine_Key, 0x89, 8);
+  addKey("BAND", TunerBand_Key, 0x8F, 8);
+
+  addKey("Phono-play", Unmapped_Key, 0x90, 8);
+  addKey("TUNER", TunerInput_Key, 0x91, 8);
+  addKey("CD", CDInput_Key, 0x92, 8);
+  addKey("AUX", AuxInput_Key, 0x93, 8);
+  addKey("tape/a_<>", Unmapped_Key, 0x94, 8);
+  addKey("TAPE", TapeInput_Key, 0x95, 8); // "tape/b_<>"
+  addKey("VIDEO", Unmapped_Key, 0x96, 8);
+  addKey("Sleep", Sleep_Key, 0x97, 8);
+  addKey("VOLUME_DOWN", VolumeDown_Key, 0x9A, 8); // "DOWN"
+  addKey("VOLUME_DOWN", Down_Key, 0x9A, 8); // "DOWN"
+  addKey("VOLUME_UP", VolumeUp_Key, 0x9B, 8); // "UP"
+  addKey("VOLUME_UP", Up_Key, 0x9B, 8); // "UP"
+  addKey("MUTE", Mute_Key, 0x9C, 8);
+  addKey("Power", Power_Key, 0x9D, 8);
+
+  addKey("Phono-stop", Unmapped_Key, 0xC0, 8);
+  addKey("PMODE_CD", Unmapped_Key, 0xC4, 8); // "Auto/Mono"
+  addKey("GE-m-call", Unmapped_Key, 0xC5, 8);
+  addKey("REAR_LEVEL-", RearVolumeDown_Key, 0xC6, 8); // "SURROUND_DOWN"
+  addKey("REAR_LEVEL+", RearVolumeUp_Key, 0xC7, 8); // "SURROUND_UP"
+  addKey("CHECK", Unmapped_Key, 0xC8, 8);
+  addKey("STOP_CD", Stop_Key, 0xC9, 8);
+  addKey("CLEAR", Clear_Key, 0xCA, 8);
+  addKey("PLAY/PAUSE_CD", Play_Key, 0xCB, 8);
+  addKey("PLAY/PAUSE_CD", Pause_Key, 0xCB, 8);
+  addKey("repeat", Repeat_Key, 0xCC, 8);
+  addKey("EDIT", Unmapped_Key, 0xCD, 8);
+  addKey("SKIP_REV", Previous_Key, 0xCE, 8);
+  addKey("SKIP_FWD", Next_Key, 0xCF, 8);
+
+  addKey("Tape-A-play-left", Unmapped_Key, 0xD0, 8);
+  addKey("Tape-A-play-right", Unmapped_Key, 0xD1, 8);
+  addKey("Tape-A-rew", Unmapped_Key, 0xD2, 8);
+  addKey("Tape-A-ffwd", Unmapped_Key, 0xD3, 8);
+  addKey("Tape-A-stop", Unmapped_Key, 0xD5, 8);
+  addKey("GE-off", Unmapped_Key, 0xD7, 8); // "STEREO"
+  addKey("PLAY_REV", Unmapped_Key, 0xD8, 8); // tape b
+  addKey("PLAY_FWD", Unmapped_Key, 0xD9, 8); // tape b
+  addKey("Tape-B-rew", Unmapped_Key, 0xDA, 8);
+  addKey("Tape-B-ffwd", Unmapped_Key, 0xDB, 8);
+  addKey("Tape-B-pause", Unmapped_Key, 0xDC, 8);
+  addKey("STOP", Unmapped_Key, 0xDD, 8);
+  addKey("Tape-B-record", Unmapped_Key, 0xDE, 8);
+  addKey("Presence", Unmapped_Key, 0xDF, 8); // "LISTEN_MODE"
+}
+
+
+KenwoodComponent2::KenwoodComponent2(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Component Keyset 2",
+      Kenwood_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x01B8, 16);
+
+  addKey("DOLBY_SURROUND", Surround_Key, 0x00, 8);
+  addKey("PCALL_DOWN", ChannelDown_Key, 0x06, 8); // tuner
+  addKey("PCALL_UP", ChannelUp_Key, 0x07, 8); // tuner
+  addKey("DOLBY_3_STEREO", Unmapped_Key, 0x0E, 8);
+
+  addKey("HITMASTER", Unmapped_Key, 0x1B, 8);
+
+  addKey("N.B.", NoiseReduction_Key, 0x4B, 8); // "noise_blanking"
+  addKey("SPACE", Unmapped_Key, 0x4F, 8);
+
+  addKey("Down", Down_Key, 0x54, 8);
+  addKey("Up", Up_Key, 0x55, 8);
+  addKey("sound_cont", Unmapped_Key, 0x57, 8);
+  addKey("enter", Enter_Key, 0x5A, 8); // "MEMO"
+
+  addKey("p.call_I<<", ChannelDown_Key, 0x91, 8); // "LEFT"
+  addKey("p.call_I<<", Left_Key, 0x91, 8); // "LEFT"
+  addKey("p.call_I>>", ChannelUp_Key, 0x92, 8); // "RIGHT"
+  addKey("p.call_I>>", Right_Key, 0x92, 8); // "RIGHT"
+  addKey("disc1", Unmapped_Key, 0x93, 8);
+  addKey("disc2", Unmapped_Key, 0x94, 8);
+  addKey("disc3", Unmapped_Key, 0x95, 8);
+  addKey("LINE", Unmapped_Key, 0x9B, 8);
+  addKey("PTY", Unmapped_Key, 0x9C, 8);
+
+  addKey("INPUT", Input_Key, 0xCC, 8);
+  addKey("dual_sound", Unmapped_Key, 0xCE, 8);
+
+  addKey("MD/DAT", Unmapped_Key, 0xD2, 8); // MDInput_Key?
+  addKey("random", Random_Key, 0xD4, 8);
+  addKey("FWD_MD", Unmapped_Key, 0xD8, 8); // play?
+  addKey("STOP_MD", Stop_Key, 0xD9, 8);
+  addKey("REW_MD", Rewind_Key, 0xDC, 8);
+  addKey("FWD_MD", Unmapped_Key, 0xDD, 8); // fast forward?
+}
+
+
+KenwoodComponent3::KenwoodComponent3(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Component Keyset 3",
+      Kenwood_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x02B8, 16);
+
+  addKey("SKIP_REV", Previous_Key, 0x00, 8); // "PREV", "Left"
+  addKey("SKIP_FWD", Next_Key, 0x01, 8); // "NEXT", "Right"
+  addKey("tuning<<", ChannelDown_Key, 0x02, 8); // "SEARCH_REV"
+  addKey("tuning<<", Rewind_Key, 0x02, 8); // "SEARCH_REV"
+  addKey("tuning>>", ChannelUp_Key, 0x03, 8); // "SEARCH_FWD"
+  addKey("tuning>>", FastForward_Key, 0x03, 8); // "SEARCH_FWD"
+  addKey("stop", Stop_Key, 0x04, 8);
+  addKey("</>", TapeInput_Key, 0x05, 8); // "TAPE"
+  addKey("tuner/band", TunerBand_Key, 0x06, 8); // "TUNER"
+  addKey("cd_play_pause", Play_Key, 0x07, 8); // "CD"
+  addKey("cd_play_pause", Pause_Key, 0x07, 8);
+  addKey("A/B", RepeatAB_Key, 0x08, 8); // "A_B"
+  addKey("CD/TUNER/TAPE", Input_Key, 0x09, 8);
+
+  addKey("low_stop", Unmapped_Key, 0x18, 8);
+  addKey("low_play", Unmapped_Key, 0x19, 8);
+  addKey("low_prev", Unmapped_Key, 0x1A, 8);
+  addKey("low_next", Unmapped_Key, 0x1B, 8);
+  addKey("long_play", Unmapped_Key, 0x1C, 8);
+  addKey("Dimmer", Unmapped_Key, 0x1D, 8);
+  addKey("llc", Unmapped_Key, 0x1F, 8);
+
+  addKey("+100", PlusOneHundred_Key, 0x4F, 8);
+
+  addKey("SRS_3D", Surround_Key, 0x55, 8);
+  addKey("ex.bass", EnhancedBass_Key, 0x57, 8);
+
+  addKey("TA_NEWS_INFO", Unmapped_Key, 0xC0, 8);
+
+  addKey("rev.mode", Unmapped_Key, 0xD0, 8);
+  addKey("tape_eq", Unmapped_Key, 0xD1, 8);
+}
+
+/*
+"rds_display/text_display", 0x1DC012ED
+"setup", 0x1DC09867
+"PLAY_PAUSE", 0x1DC0609F
+"PLAY_BACK", 0x1DC0906F // "Flip"
+"dvd6ch", 0x1DC001FE
+"InputSel", 0x1DC06A95
+"menu", 0x1D20B946
+"select", 0x1D2039C6
+"back", 0x1D20FB04
+*/
+
+/*
+KenwoodAudio5::KenwoodAudio5(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "Audio Keyset 5",
+      Kenwood_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x49B4, 16);
+
+  addKey("VOLUME_DOWN_SW", VolumeDown_Key, 0x12, 8);
+  addKey("VOLUME_UP_SW", VolumeUp_Key, 0x13, 8);
+  addKey("POWER_SW", Power_Key, 0x18, 8);
+}
+*/
+
+
+KenwoodCD1::KenwoodCD1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "CD Keyset 1",
+      Kenwood_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, false, true);
+
+  setPreData(0xB6, 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);
+  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("+10", DoubleDigit_Key, 0x0A, 8);
+
+  addKey("OPEN_CLOSE", Eject_Key, 0x10, 8);
+  addKey("stop", Stop_Key, 0x11, 8);
+  addKey("play", Play_Key, 0x13, 8); // "PAUSE"
+  addKey("play", Pause_Key, 0x13, 8); // "PAUSE"
+  addKey("back", Rewind_Key, 0x14, 8); // "REWIND"
+  addKey("forward", FastForward_Key, 0x15, 8);
+  addKey("last", Previous_Key, 0x16, 8);
+  addKey("next", Next_Key, 0x17, 8);
+  addKey("TIME_DISPLAY", Unmapped_Key, 0x18, 8);
+  addKey("REPEAT", Repeat_Key, 0x19, 8);
+  addKey("clear", Clear_Key, 0x1A, 8);
+  addKey("check", Unmapped_Key, 0x1B, 8);
+  addKey("INDEX_BACK", Unmapped_Key, 0x1C, 8);
+  addKey("INDEX_FWD", Unmapped_Key, 0x1D, 8);
+  addKey("EDIT_2", Unmapped_Key, 0x1E, 8);
+  addKey("p.mode", Unmapped_Key, 0x1F, 8);
+
+  addKey("bboost", EnhancedBass_Key, 0xC1, 8);
+
+  addKey("space", Unmapped_Key, 0x42, 8);
+  addKey("REPEAT_A-B", RepeatAB_Key, 0x43, 8);
+  addKey("TRACK", Unmapped_Key, 0x44, 8);
+  addKey("PGM", Program_Key, 0x45, 8);
+  addKey("TIME", Unmapped_Key, 0x46, 8);
+  addKey("down", Down_Key, 0x48, 8); // "VOL_DOWN"
+  addKey("down", VolumeDown_Key, 0x48, 8); // "VOL_DOWN"
+  addKey("up", Up_Key, 0x49, 8); // "VOL_UP"
+  addKey("up", VolumeUp_Key, 0x49, 8); // "VOL_UP"
+  addKey("edit", Unmapped_Key, 0x4A, 8);
+  addKey("DISPLAY_MODE", Info_Key, 0x4C, 8);
+  addKey("DISC_SKIP", NextDisc_Key, 0x4D, 8);
+  addKey("random", Random_Key, 0x4F, 8);
+
+  addKey("P", Unmapped_Key, 0x50, 8);
+  addKey("DISC_1", Unmapped_Key, 0x51, 8);
+  addKey("DISC_2", Unmapped_Key, 0x52, 8);
+  addKey("DISC_3", Unmapped_Key, 0x53, 8);
+  addKey("DISC_4", Unmapped_Key, 0x54, 8);
+  addKey("DISC_5", Unmapped_Key, 0x55, 8);
+  addKey("DISC_6", Unmapped_Key, 0x56, 8);
+
+  addKey("10", Unmapped_Key, 0x80, 8);
+  addKey("11", Unmapped_Key, 0x81, 8);
+  addKey("12", Unmapped_Key, 0x82, 8);
+  addKey("13", Unmapped_Key, 0x83, 8);
+  addKey("14", Unmapped_Key, 0x84, 8);
+  addKey("15", Unmapped_Key, 0x85, 8);
+  addKey("16", Unmapped_Key, 0x86, 8);
+  addKey("17", Unmapped_Key, 0x87, 8);
+  addKey("18", Unmapped_Key, 0x88, 8);
+  addKey("19", Unmapped_Key, 0x89, 8);
+  addKey("20/0", Unmapped_Key, 0x8A, 8);
+  addKey("peak_search", Unmapped_Key, 0x8D, 8);
+  addKey("DISC_FILE", Unmapped_Key, 0x8F, 8);
+  addKey("ERASE", Unmapped_Key, 0x90, 8);
+  addKey("power", Power_Key, 0x91, 8);
+}
+
+
+KenwoodDVD1::KenwoodDVD1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "DVD Keyset 1",
+      Kenwood_Make,
+      index)
+{
+  addControlledDevice(Kenwood_Make, "DVF-9010", Audio_Device);
+
+  threadableProtocol = new NECProtocol(guiObject, index, true, true);
+
+  setPreData(0x0CB6, 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("PLUS_TEN", DoubleDigit_Key, 0x0A, 8);
+
+  addKey("(0)OpenClose", Eject_Key, 0x10, 8);
+  addKey("Stop", Stop_Key, 0x11, 8);
+  addKey("PAUSE", Pause_Key, 0x12, 8);
+  addKey("Play", Play_Key, 0x13, 8);
+  addKey("REVERSE", Rewind_Key, 0x14, 8);
+  addKey("FORWARD", FastForward_Key, 0x15, 8);
+  addKey("SkipDown", Previous_Key, 0x16, 8);
+  addKey("SkipUp", Next_Key, 0x17, 8); // ?
+
+  addKey("Repeat", Repeat_Key, 0x19, 8);
+  addKey("C", Unmapped_Key, 0x1A, 8);
+  addKey("P.Mode", PictureMode_Key, 0x1F, 8);
+
+  addKey("ABRepeat", RepeatAB_Key, 0x43, 8);
+  addKey("(1)Memory", Memory_Key, 0x4B, 8);
+
+  addKey("OnScreen", Unmapped_Key, 0x5F, 8);
+
+  addKey("Display", Info_Key, 0x8C, 8);
+  addKey("DVD_POWER", Power_Key, 0x91, 8);
+  addKey("(7)TextDisp", Unmapped_Key, 0x96, 8);
+  addKey("(8)AllInfo", Unmapped_Key, 0x97, 8);
+  addKey("(9)TitleSearch", Unmapped_Key, 0x98, 8);
+
+  addKey("Setup", Menu_Key, 0xC0, 8);
+  addKey("(3)Title", DiscTitle_Key, 0xC1, 8);
+  addKey("Menu", DiscMenu_Key, 0xC2, 8);
+  addKey("(4)Angle", Angle_Key, 0xC3, 8);
+  addKey("Return", Exit_Key, 0xC4, 8);
+  addKey("(6)Subtitle", Captions_Key, 0xC5, 8);
+  addKey("(5)Audio", Audio_Key, 0xC9, 8);
+
+  addKey("Enter", Select_Key, 0xD3, 8);
+  addKey("Up", Up_Key, 0xD6, 8);
+  addKey("Down", Down_Key, 0xD7, 8);
+  addKey("Left", Left_Key, 0xD8, 8);
+  addKey("Right", Right_Key, 0xD9, 8);
+  addKey("(2)VirtualSurr", Surround_Key, 0xDF, 8);
+}
+
+
+KenwoodTV1::KenwoodTV1(
+  QObject *guiObject,
+  unsigned int index)
+  : PIRKeysetMetaData(
+      "TV Keyset 1",
+      Kenwood_Make,
+      index)
+{
+  threadableProtocol = new NECProtocol(guiObject, index, false, true);
+
+  setPreData(0x04, 8);
+
+  addKey("TV-CH_UP", ChannelUp_Key, 0x00, 8);
+  addKey("TV-CH_DOWN", ChannelDown_Key, 0x01, 8);
+  addKey("TV-VOL_UP", VolumeUp_Key, 0x02, 8);
+  addKey("TV-VOL_DOWN", VolumeDown_Key, 0x03, 8);
+
+  addKey("Power_TV", Power_Key, 0x08, 8);
+  addKey("TV/VIDEO", Input_Key, 0x09, 8);
+  addKey("ANT/AUX", AntennaInput_Key, 0x0B, 8);
+
+  addKey("0", Zero_Key, 0x10, 8);
+  addKey("1", One_Key, 0x11, 8);
+  addKey("2", Two_Key, 0x12, 8);
+  addKey("3", Three_Key, 0x13, 8);
+  addKey("4", Four_Key, 0x14, 8);
+  addKey("5", Five_Key, 0x15, 8);
+  addKey("6", Six_Key, 0x16, 8);
+  addKey("7", Seven_Key, 0x17, 8);
+  addKey("8", Eight_Key, 0x18, 8);
+  addKey("9", Nine_Key, 0x19, 8);
+
+  addKey("TIMER", Sleep_Key, 0x1A, 8);
+  addKey("RECALL", PrevChannel_Key, 0x1B, 8);
+}
diff --git a/keysets/kenwood.h b/keysets/kenwood.h
new file mode 100644 (file)
index 0000000..32a5907
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef KENWOOD_H
+#define KENWOOD_H
+
+#include "pirkeysetmetadata.h"
+
+class QObject;
+
+class KenwoodAudio1: public PIRKeysetMetaData
+{
+public:
+  KenwoodAudio1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class KenwoodComponent1: public PIRKeysetMetaData
+{
+public:
+  KenwoodComponent1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class KenwoodComponent2: public PIRKeysetMetaData
+{
+public:
+  KenwoodComponent2(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class KenwoodComponent3: public PIRKeysetMetaData
+{
+public:
+  KenwoodComponent3(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class KenwoodCD1: public PIRKeysetMetaData
+{
+public:
+  KenwoodCD1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class KenwoodDVD1: public PIRKeysetMetaData
+{
+public:
+  KenwoodDVD1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+class KenwoodTV1: public PIRKeysetMetaData
+{
+public:
+  KenwoodTV1(
+    QObject *guiObject,
+    unsigned int index);
+};
+
+#endif // KENWOOD_H
index f1ac9b1..1618777 100644 (file)
@@ -234,6 +234,7 @@ PanasonicTV1b::PanasonicTV1b(
   addControlledDevice(Panasonic_Make, "Viera TX-32LZD80", TV_Device);
   addControlledDevice(Panasonic_Make, "Viera 42PZ700U", TV_Device);
   addControlledDevice(Panasonic_Make, "Viera 42PZ8ES", TV_Device);
+  addControlledDevice(Panasonic_Make, "Quintrix TX-25MK1C", TV_Device);
 
   addKaseikyoKey("Info", Info_Key, 0x008, 0x39); // "OSD"
   addKaseikyoKey("OK", Select_Key, 0x008, 0x49);
index 7363954..7fb3f78 100644 (file)
@@ -121,6 +121,8 @@ SamsungTV1b::SamsungTV1b(
 {
   setKeysetName("TV Keyset 1b");
 
+  addControlledDevice(Samsung_Make, "LE46M51B (R)", TV_Device); // ?
+
   addKey("Red", Red_Key, 0x21, 8);
   addKey("Exit", Exit_Key, 0x2C, 8);
 }
index 3427b1b..e6071bf 100644 (file)
@@ -109,7 +109,11 @@ SOURCES += main.cpp mainwindow.cpp \
     keysets/dish.cpp \
     keysets/fortec.cpp \
     keysets/homecast.cpp \
-    protocols/dishprotocol.cpp
+    protocols/dishprotocol.cpp \
+    keysets/beko.cpp \
+    keysets/cambridge.cpp \
+    keysets/haier.cpp \
+    keysets/kenwood.cpp
 HEADERS += mainwindow.h \
     pirkeynames.h \
     pirmakenames.h \
@@ -193,7 +197,11 @@ HEADERS += mainwindow.h \
     keysets/dish.h \
     keysets/fortec.h \
     keysets/homecast.h \
-    protocols/dishprotocol.h
+    protocols/dishprotocol.h \
+    keysets/beko.h \
+    keysets/cambridge.h \
+    keysets/haier.h \
+    keysets/kenwood.h
 FORMS += mainwindow.ui \
     pirdocumentationform.ui \
     piraboutform.ui \
index 122bb3a..47e6bc6 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by Qt Creator 2.4.1, 2012-02-14T21:44:04. -->
+<!-- Written by Qt Creator 2.4.1, 2012-02-15T22:46:30. -->
 <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">true</value>
-      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">/Users/john/Develop/n900/pierogi-0.6.4</value>
+      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">/Users/john/Develop/n900/pierogi-0.6.5</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_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_5_3_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_3_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_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_1_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_7_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">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>
       </valuelist>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MaemoRunConfiguration.LastDeployedTimes">
        <value type="QDateTime">2012-01-19T22:18:07</value>
        <value type="QDateTime">2012-02-12T23:10:44</value>
        <value type="QDateTime">2012-02-09T18:12:21</value>
        <value type="QDateTime">2012-02-14T21:02:03</value>
+       <value type="QDateTime">2012-02-15T22:43:32</value>
        <value type="QDateTime">2012-01-17T00:15:23</value>
        <value type="QDateTime">2012-01-30T20:23:06</value>
        <value type="QDateTime">2012-01-17T13:21:05</value>
index 8307ae3..2a4c2ce 100644 (file)
@@ -8,7 +8,9 @@
 #include "keysets/admiral.h"
 #include "keysets/aiwa.h"
 #include "keysets/apple.h"
+#include "keysets/beko.h"
 #include "keysets/bose.h"
+#include "keysets/cambridge.h"
 #include "keysets/daewoo.h"
 #include "keysets/denon.h"
 #include "keysets/digitalstream.h"
 #include "keysets/fortec.h"
 #include "keysets/goldstar.h"
 #include "keysets/grundig.h"
+#include "keysets/haier.h"
 #include "keysets/hauppauge.h"
 #include "keysets/hitachi.h"
 #include "keysets/homecast.h"
 #include "keysets/jvc.h"
+#include "keysets/kenwood.h"
 #include "keysets/lg.h"
 #include "keysets/logitech.h"
 #include "keysets/magnavox.h"
@@ -97,10 +101,18 @@ PIRKeysetManager::PIRKeysetManager(
 
   populateKeyset(new AppleWhiteRemote(guiObject, counter++));
 
+  populateKeyset(new BekoTV1(guiObject, counter++));
+
   populateKeyset(new BoseRadio1(guiObject, counter++));
   populateKeyset(new BoseRadio2(guiObject, counter++));
   populateKeyset(new BoseRadio3(guiObject, counter++));
 
+  populateKeyset(new CambridgeCD1(guiObject, counter++));
+  populateKeyset(new CambridgeAudio1(guiObject, counter++));
+  populateKeyset(new CambridgeAudio2(guiObject, counter++));
+  populateKeyset(new CambridgeAudio3(guiObject, counter++));
+  populateKeyset(new CambridgeDVD1(guiObject, counter++));
+
   populateKeyset(new DaewooTV1(guiObject, counter++));
   populateKeyset(new DaewooTV2(guiObject, counter++));
   populateKeyset(new DaewooTV3(guiObject, counter++));
@@ -180,6 +192,8 @@ PIRKeysetManager::PIRKeysetManager(
   populateKeyset(new GrundigTV3(guiObject, counter++));
   populateKeyset(new GrundigDVD1(guiObject, counter++));
 
+  populateKeyset(new HaierTV1(guiObject, counter++));
+
   populateKeyset(new HauppaugePCTV1(guiObject, counter++));
   populateKeyset(new HauppaugePCTV1a(guiObject, counter++));
   populateKeyset(new HauppaugePCTV1b(guiObject, counter++));
@@ -219,6 +233,14 @@ PIRKeysetManager::PIRKeysetManager(
   populateKeyset(new JVCAudio2(guiObject, counter++));
   populateKeyset(new JVCDVD1(guiObject, counter++));
 
+  populateKeyset(new KenwoodAudio1(guiObject, counter++));
+  populateKeyset(new KenwoodComponent1(guiObject, counter++));
+  populateKeyset(new KenwoodComponent2(guiObject, counter++));
+  populateKeyset(new KenwoodComponent3(guiObject, counter++));
+  populateKeyset(new KenwoodCD1(guiObject, counter++));
+  populateKeyset(new KenwoodDVD1(guiObject, counter++));
+  populateKeyset(new KenwoodTV1(guiObject, counter++));
+
   populateKeyset(new LGTV1(guiObject, counter++));
   populateKeyset(new LGTV1a(guiObject, counter++));
   populateKeyset(new LGTV1b(guiObject, counter++));
index d72f88d..46d097b 100644 (file)
@@ -9,7 +9,9 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Admiral_Make] = "Admiral";
   makes[Aiwa_Make] = "Aiwa";
   makes[Apple_Make] = "Apple";
+  makes[Beko_Make] = "Beko";
   makes[Bose_Make] = "Bose";
+  makes[Cambridge_Make] = "Cambridge Audio";
   makes[Daewoo_Make] = "Daewoo";
   makes[Denon_Make] = "Denon";
   makes[DigitalStream_Make] = "Digital Stream";
@@ -20,10 +22,12 @@ PIRMakeMgr::PIRMakeMgr()
   makes[Fortec_Make] = "Fortec Star";
   makes[GoldStar_Make] = "GoldStar";
   makes[Grundig_Make] = "Grundig";
+  makes[Haier_Make] = "Haier";
   makes[Hauppauge_Make] = "Hauppauge";
   makes[Hitachi_Make] = "Hitachi";
   makes[Homecast_Make] = "Homecast";
   makes[JVC_Make] = "JVC";
+  makes[Kenwood_Make] = "Kenwood";
   makes[LG_Make] = "LG";
   makes[Logitech_Make] = "Logitech";
   makes[Magnavox_Make] = "Magnavox";
index e425bd4..084be3c 100644 (file)
@@ -10,7 +10,9 @@ enum PIRMakeName{
   Admiral_Make,
   Aiwa_Make,
   Apple_Make,
+  Beko_Make,
   Bose_Make,
+  Cambridge_Make,
   Daewoo_Make,
   Denon_Make,
   DigitalStream_Make,
@@ -21,10 +23,12 @@ enum PIRMakeName{
   Fortec_Make,
   GoldStar_Make,
   Grundig_Make,
+  Haier_Make,
   Hauppauge_Make,
   Hitachi_Make,
   Homecast_Make,
   JVC_Make,
+  Kenwood_Make,
   LG_Make,
   Logitech_Make,
   Magnavox_Make,
index 9bb4e11..bf94261 100644 (file)
@@ -1,3 +1,8 @@
+pierogi (0.6.5) unstable; urgency=low
+  * A few more keyset added: Beko, Cambridge, Haier, and Kenwood.
+
+ -- John Pietrzak <jpietrzak8@gmail.com>  Wed, 15 Feb 2012 22:36:56 -0500
+
 pierogi (0.6.4) unstable; urgency=low
   * Added a Hildon Banner to report what the keyset has changed to when you use the volume rocker
   * Fixed several GUI button bugs -- thanks to sixwheeledbeast for finding them
index 2de1e33..13ddf9c 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: Better volume rocker UI, bugfixes, keysets
- Pierogi now uses the Hildon Banner mechanism to inform you about the changes made when you use the volume rocker switch.  Also, several bugfixes in the GUI (thanks to sixwheeledbeast for spotting them), and first pass at keysets for Dish, Fortec Star, and Homecast.
+XB-Maemo-Upgrade-Description: More Keysets
+ Keysets have been added for Beko, Cambridge, Haier, and Kenwood.
 XSBC-Bugtracker: https://garage.maemo.org/tracker/?func=add&group_id=2286&atid=7641
 XB-Maemo-Display-Name: Pierogi
 XB-Maemo-Icon-26: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAEChJREFUaIHtmFmsXudVhp/1TXv/+x/OOZ4TO66dZmBo0jZJoxBQW8ookAq0mIhJQhUXcAGIAhICRClDb4q4YBRDGSoBFS2ikQoUSkpNIEkbnJQ0cVL7xLUd2/GZfKZ/2MP3fYuLE6LUDQEFQi/oe7e/X7/2++71an1rvfAlfAn/vyH/2Q+Hbzp89M47rvm1aw/0XvPs5ea+M5/b+OiJB5/88FX/1Vee4kvjagEC6Dt/+ns++Ya7Xn2ndWX2zkvKLV070Xp72Vy6PG4vLa0/8pcffuytlxcvr3wxSL8Q7qpnBXjzW+64M/QC1hiTUq0xWbHWihjf3TBvwqtene46e377/Z9swztWz59/9ovA+3nYqw9uv/uWH/y27/iat3rv1AcnkARjCSHgQ2FdqNT5Hgf27bpxfsF+/yTms2vPXjkJGL4Ilvo8AXfcfes9P/kTx96/sHtEKKwYURCHMULWjsnmhMlkXSbbG5J1m317Rr073nDknutvPPy2wZ6FA9syOzFbm7X/lwI+z0Jf+dob7jlw3UGsA8ioJlJWZpMpXUzEVGPFUpYW6xSqgeQ80bu/5tpbX/u6L7/1mvvnv+nPPvu3dwFw++2eEye6V1rA8xU4esvRr7/nnm9+z959C7hgVEQEMWxvbtE0nYoYYhxL7DJZjRZlya691zCc2y0qqPcq1+6vDp1f3r7UhbnF2RNPzF5p8rDTdQTQX3rvj11609fedo31EEqPNZa6bnjm7Clyakk5UlW7mN+9gKYZw+EuCBUiUA1203Yt0+01zjz1VJptPWtX1mZ84v6zf/nYE59779LppU++UgLcfwi44caD1zinIKJGDKpIU8/omimYoM4NWdg1J8ElEuhg6MkCvhiSESRNsXkmB665zmyWXncfcLJnz/Dtd9127dtOP33hn/75gUvfe+H0hYuvhIB86NChXbv3zZFF1bsgoLRtw3h7HaMd1hZiTY33Geug7BUSvEUNYKCdXcGZlqpX4Qplbu6oNG3UohDZtXu/XH/TdW8ajj7z4MO7ez/36YdOv/9/WwA33Hr4R3zwrQveOwf1dJvJZJvpeBvjoOh59u4/SGlm9IfzlFUBBkQcMW1Sb62QUkI1I5pw0lF1M7FuSt4TNO/bLUeOvOXab/9O/nh5efNP/uLP/+ETT55a/4Wzj589/j8VYHffvHv41Xfd9jOve/31ryoLb0R2rLO5tUE9ndDrlQyGQ8oS5kYjXGERieQYqSeb1OMVJqufQ0wPX1b0ewOMQSwR5y2+LPHOibGlQVqqasjBa689evjQwg+Ywvhzi5c//hyXl3WPuD3Vnptvvvnwm6wT1dRKypGuS7TNlJynDIZHCMHiQ0CskrqWGDtCWWIlo9aRZhsYU2KrEqO1kCdIEXBZwBbSpRbvS6xLErNRDh9kMBqxf9/gZ1dXZ/c/8fBn/w7IL6cC7pZbD//UzTcfwAqSsgCe6eQyuatxRglFxdxcn6IUvDOogoSC6dYq9fYa0/E5+nuvpywDqut4rVBbEqcrpDglY7DVQeqtc7hynrIsxZrIcDhiNP8V+q6f3//Rum44e/4yT51aO3VlffyRSxfXPnFhaXr8yuLi+Cph9rkqPX/mBtXwDS4MELGoJkUzQkJzLdZYykLRXKtmjzWVqCqqSSfrl6g3zyGFR5p1Uu6Is7GYakERI9urK9pfGGFMQCRjjZHcTDWpx2AwJspoWMnmaq29ysuNN15H09qbjhw58M47bnv1Oy+cX35o5XX7F1evbN136dzGw89IscjiYvMFFej1+vPWW1QziGINYq3HSMA6C0SscWIl03Y1sa2xoS9KDd4SwgDHDIlQhHlyO8UP9mFtKSJCzlHjeF1sb4E4HZPjtthehbM9jIVerxREQLJed2iPrCxfYTxpec1rjtw1HL7+rq7b/r7HP/PYhe3NrSc3Xvfap598fO23zjx14fHnBRR9c8aJ3u6LAksGyVr1K2ZTLzk2zLYv4WW3FsVeNGdJsWO6cVrjbBOLx6Qav+dGMAO0m4iJS2SF/p79KuKxdORmXZmMpTCBLlsVrXCi0uUJvTIznWyrNZ69+4Ys7JojpqBnz5xm45mTjEa7uPPuNx/U3B0M3n+DSP1DbTtjPN7kt379Y+9wVTBzYgPOCkYsYpyEUGCNo4s1WQ1qgqAdmhWNDcaI5BQRalKbIRnEeYwvUR3iwhwxduJDD2OtUlUy21iDXGMkSyg8mUTG4L1Q9voym05w3gAWY5CFXbvwwaDJELspwQecB6FSjJc5W3LnVx/6Tbc9bpK3ZqeHu4A1QgiOohzQNTO6aMg5YyTRzTaxCElB2zXoprTJMSufxQ4ivWqOToV28zLEGSxchw/zpA4wDqHEWQdGMOLxxiBEiuBJeYgSERXEGIrSk2KflHbe712BCw6DINmharTfGxb26Jcd3n/LrUff2BsM1BrBGCPWC84HVDOby4tYEjk1BN9nvD1mtr6E1JcxKM6MKEd7MdqQuzHd+kWsNOKDIbYJX1ZkrOh0E3JL2aski0NzRlONrw6h4lGN5JQQa4mxw7o+IhawDIYVvVGF9yVYxVqDYHnwoSd/zSw9szpeX10mx05SPZXY7gyRRa+iGgwRZ6lnV2imNVkV6wqKahcqGWwPHLRtS1fPaLeexYdK0myb6doSqKXeWpVc17hqH+Vor0g5h+QMucMYg3OKDxbnS5SEdeBDADLCToWc9zjrcSFgTRBjnYjJbF0ZXzQbk+ljy0uXaJuGLjbadTW5m2KkozcYUJRzNLOOWT1jur1CTmNcYUhqURmABHKMWGswRmgmK9pNO7pasdZDzJq7Bgl9CLsVP8C5HmJLxBeIEYwkrAEQBIuIJWsGFJFE2SvxwWMthBDUWof3ha6sbF+wo33zG6Ohe8sNNxzYb51I1oQzJUY6sTbjXA/nCt3aXAXjRHNCxehg/ghuVOGKCqsN4jLV/F4xtsD6nlQLB1SowXvUF0iuxViDQVA8zjmRmOjqTdpp0q5rmEzHIhLI2et00hHbGYNRn/n5CucDxlkRUUmJTtW6D/zBR99hTp04tbqxvvUvKXU55w5rrCRtJKZE1oQNJdXcHlnYf0S2t1apmylt24rxXpwfSujNSWxbMVpKbBNhMMJXFUUlEga7xNgSLyKiCdGEihWxVrouEdOOx1VqMdZI10FKiawiOUUJwchofig2BDFGRXJGsyrglpeXWFpamjiAja3miqasMbY4Z4BAzmCzEEIgGejRZ8v3mc4mqPSYjDep+gPEBEyoEOMwrkDjBGOVLGBcH0ODsSWaZiAexJC6KV09QaQgiSfHCbNZjTEOTYY21kDHaH6eajDCmA5RSAa0U0SsLJ4+dx6eG6efODv+vdiN3103lRpj6BU7cVHKineBqtqNVgv43hz1tGZ74zJrm+tMJhP6VWS0+xCikdw1JALGeUQ8YbAfm1tSOyYTyDgMlqyO7Cu6qKytTalniRgFpGI8UzS3XH/jTRRlj5RaMI7YKQZD1pn8y/0nxn/4Ox/5OkDMsWPH7LmHT14eb20S21piF1EiaIvmDiWDZqwUWO8pqxH90QEwPeoOZo0Qm4aMBRuwxYCMIQM5NeTYktqWFBvUWHJWkvSIuU8bC6azSN3srKxtkxCNjOb7FL0SY/PO3vFcCBhTy3Ra88D9j3545cLKIqDugx/8oAJsbW3n/lxhcnSqWBFRjOyM6G23iTGWspgnm4QyYDqep5nALAqz8QahN8SYRCjm0ay0TaLIkRQzSoGthnSdElOk7oTtrRkx1nT1NooiMkAl0R9WVP0SJJLZWZLAkbWj66KefOK0njx16V1Xj6c0KRy65SsGt2O9FMEgOKwxqEQ0TcmpRUXxrqIq57GhJFQLpAybWy1tSrTdFEMQTA9CxXTa0OVO6mbMxvqEre2JbG6OWb54kenkCk3dIa6PcwN6VZ9Xf9nNzC/spax6iAiaFEGp21ZzhKZN8vM/+9v7lxYvPr9bP58LXbw0/eVTp8ffdfsde+ZSFzE0RHEY/HMBaiZ1E1ocKomi1wOjIHuZTVaZ1pHgStQ0alsnLhhy1yHWqGJlY2OJrD2NMYkaCwTEBHqDOfqDAXPzB9C8BdYi6kj1FFUlK2jOiHj5t0c/Pb46j30+F1p5dmXTD/dW17+qelNVBZw1iChIQnAY4zFkcmbngnEZZwXnHAqkriFGS91MpGkauuiom8ysjlI3ibqJxJgl54wNA4regN6wz559BxmO9hBCSco1AKqZHBNZMzGhbYecO/MM7/+je3/48jNrj75QwBfE62/42q9646/88luOi7ZalIWU5Yi2XcMYSygGGGOxxu+0RmcRIzvku5a6qZluTTV2WWI3I2eLYlXEivUB55xa72Q4t4BxnuD6WNfDWEtOLTEZUqxJqaOLSVOGpo78ye/+6cp9Hz/5dUtnlh6/mu/V6bQ8/I8P/tPSs7dx4MC8NI3T3qCUwC5SnGKtJSdDlojkFkkeVHbGAG8JxuPcPKnrSHlI17VoBmMNRTHHTthn8KFCjMX5gpRaYlRyiojvAx6hIMZNFCObVzb52PFT37jyIuQ/z0IvRBiMbr7+6O5bjAv0ilKM8ZolY10pzlkQ0a6dkVJLzh2KoAJijRzd/000aUVUohahRyhLvA8UvaEYK1ix+GIBsVaMFKgAGFUgJZWui+SkTKednD97lg/9+b1//8jxJ3/1xXi+qIVeiB/9ybf+1du/++5vF2vUGS9F6WlmY3LeIW/FIs6BxOes4Ekpqg9DAYMxjqRGxThxboQxPU2pEWsCObfkHBECTbNFTBlNfZ1NNmVrY5Vffe/v/83qOb57cXFx66U4mhc7PHbsmAX49f7r335leRmiSJdcrusxWROqDqQk5kzXNmisyTGSYmKyMaFtZ2CElDKIRwRy7ohxihWDUCL06bpE09SIVMSIrq+dlaef+hQf+fC9PHTf4rc+R/4lP/KLWujkyZMKCMePa39+7vpd8/611XAksR3Tda0iRkI5T8odOWeUnU6lCr7ogRghJ3LOkBXNUbrYkNsZsaulaxti2zKrt5hOxsxmtXaR/MB9f20+fvzEB//tVPODVy6uXngp4v+Bl1T3Qrz1HW9747FvOXB8194FjHOIZHWuJ854yGMwCRSyqFrnRcQgGBQ0pyhJDTkmUofO2khKEclRzp+7yGceu3DmqafH73vgbz/9nhfw+m+ldC9agRfDZx998hyjw2UzWbvJS+yX/VE0OYiqilgla0ZzVlDJKZNzIkUFFbG2z2R7haaZaoxTbWczGY+35MK5JT5072d/+OwzxY+d+PinPvbf5fKyBAA89ciT9w1vuPPe9eXla/b0u1uKXk8wZa7KAeLnadqZpNhqzkLbNYCVtmu0LPYy3lpCsTKrG3n0xBn+9ZGVj33ykbVffOijj7xv+fz5+uWQhy+8B/5L3HHgVU+/+91/fOx9wI+/5103tPncmwfpqd9YWKjKqizVhVIwGXJmOmlZWd5kbePBlaXN8Idd4/56S8OZBz7w95dgp1k8xKdeLvcv4Uv438C/A7Q6fneUaSRcAAAAAElFTkSuQmCC

Terms of Use    Privacy Policy    Contribution Guidelines    Feedback

Powered By GForge Collaborative Development Environment