c70b0409a4d4df23c15ef84443849ac270250658
[pierogi] / pirkeysetmetadata.h
1 #ifndef PIRKEYSETMETADATA_H
2 #define PIRKEYSETMETADATA_H
3
4 #include "pirkeynames.h"
5 #include "pirmakenames.h"
6 #include "pirdevicetypenames.h"
7
8 #include <map>
9 #include <list>
10
11 class QThread;
12 class QObject;
13
14 class PIRSelectDeviceForm;
15 class PIRProtocol;
16
17 typedef std::map<PIRKeyName, const char *> KeyCollection;
18
19 class DeviceInfo
20 {
21 public:
22   DeviceInfo(
23     PIRMakeName ma,
24     const char *mo,
25     PIRDeviceTypeName t)
26   : make(ma),
27     model(mo),
28     type(t)
29   {}
30
31   PIRMakeName make;
32   const char *model;
33   PIRDeviceTypeName type;
34 };
35
36 typedef std::list<DeviceInfo> PIRDeviceCollection;
37
38 class PIRKeysetMetaData
39 {
40 public:
41   PIRKeysetMetaData(
42     const char *keysetName,
43     PIRMakeName make,
44     unsigned int index);
45
46   bool hasKey(
47     PIRKeyName name) const;
48
49   unsigned int getID() const;
50
51   PIRMakeName getMake() const;
52
53   const char *getKeysetName() const;
54
55   virtual void populateProtocol(
56     QObject *guiObject) = 0;
57
58   void moveToThread(
59     QThread *thread);
60
61   void populateDevices(
62     unsigned int id,
63     PIRSelectDeviceForm *sdf) const;
64
65 protected:
66   void addControlledDevice(
67     PIRMakeName make,
68     const char *model,
69     PIRDeviceTypeName type);
70
71   void addDeviceType(
72     PIRDeviceTypeName n);
73
74   void addKey(
75     const char *name,
76     PIRKeyName key,
77     unsigned long data,
78     unsigned int size);
79
80   // Special helper methods for SIRC keys:
81   void addSIRC12Key(
82     const char *name,
83     PIRKeyName key,
84     unsigned int addressData,
85     unsigned int commandData);
86
87   void addSIRC15Key(
88     const char *name,
89     PIRKeyName key,
90     unsigned int addressData,
91     unsigned int commandData);
92
93   void addSIRC20Key(
94     const char *name,
95     PIRKeyName key,
96     unsigned int secondaryAddressData,
97     unsigned int primaryAddressData,
98     unsigned int commandData);
99
100   // Helper method for Sharp keys:
101   void addSharpKey(
102     const char *name,
103     PIRKeyName key,
104     unsigned int addressData,
105     unsigned int commandData);
106
107   void addNECKey(
108     const char *name,
109     PIRKeyName key,
110     unsigned int addressData,
111     unsigned int commandData);
112
113   void addPioneerKey(
114     const char *name,
115     PIRKeyName key,
116     unsigned int addressOne,
117     unsigned int commandOne,
118     unsigned int addressTwo,
119     unsigned int commandTwo);
120
121 /*
122   void addRCAKey(
123     const char *name,
124     PIRKeyName key,
125     unsigned int addressData,
126     unsigned int commandData);
127 */
128
129   void addKaseikyoKey(
130     const char *name,
131     PIRKeyName key,
132     unsigned int addressData,
133     unsigned int commandData);
134
135   void addDishKey(
136     const char *name,
137     PIRKeyName key,
138     unsigned int firstCommand,
139     unsigned int secondCommand);
140
141   void setPreData(
142     unsigned long data,
143     unsigned int bits);
144
145   void setPostData(
146     unsigned long data,
147     unsigned int bits);
148
149   void setKeysetName(
150     const char *name);
151
152   KeyCollection keys;
153
154   PIRDeviceCollection controlledDevices;
155
156   PIRProtocol *threadableProtocol;
157   unsigned int index;
158
159 private:
160   const char *keysetName;
161   PIRMakeName make;
162   PIRDeviceTypeCollection deviceTypes;
163 };
164
165
166 #endif // PIRKEYSETMETADATA_H