source: xplra/src/plugin/src/xplra/Protocol.h@ 45:72d5105fcb72

Last change on this file since 45:72d5105fcb72 was 45:72d5105fcb72, checked in by István Váradi <ivaradi@…>, 11 years ago

Implemented hotkey handling

File size: 7.7 KB
Line 
1// Copyright (c) 2013 by István Váradi
2
3// This file is part of XPLRA, a remote-access plugin for X-Plane
4
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are met:
7
8// 1. Redistributions of source code must retain the above copyright notice, this
9// list of conditions and the following disclaimer.
10// 2. Redistributions in binary form must reproduce the above copyright notice,
11// this list of conditions and the following disclaimer in the documentation
12// and/or other materials provided with the distribution.
13
14// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
18// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
25// The views and conclusions contained in the software and documentation are those
26// of the authors and should not be interpreted as representing official policies,
27// either expressed or implied, of the FreeBSD Project.
28
29#ifndef XPLRA_PROTOCOL_H
30#define XPLRA_PROTOCOL_H
31//------------------------------------------------------------------------------
32
33namespace xplra {
34
35//------------------------------------------------------------------------------
36
37/**
38 * Constants and helpers for the protocol.
39 */
40class Protocol
41{
42public:
43 /**
44 * Command: get the value of a single dataref.
45 */
46 static const uint8_t COMMAND_GET_SINGLE = 0x01;
47
48 /**
49 * Command: set the value of a single dataref.
50 */
51 static const uint8_t COMMAND_SET_SINGLE = 0x02;
52
53 /**
54 * Command: get the value of a multiple datarefs.
55 */
56 static const uint8_t COMMAND_GET_MULTI = 0x03;
57
58 /**
59 * Command: set the value of a multiple datarefs.
60 */
61 static const uint8_t COMMAND_SET_MULTI = 0x04;
62
63 /**
64 * Command: register a multiple-data query request
65 */
66 static const uint8_t COMMAND_REGISTER_GET_MULTI = 0x11;
67
68 /**
69 * Command: unregister a multiple-data query request
70 */
71 static const uint8_t COMMAND_UNREGISTER_GET_MULTI = 0x12;
72
73 /**
74 * Command: execute a registered multiple-data query request
75 */
76 static const uint8_t COMMAND_EXECUTE_GET_MULTI = 0x13;
77
78 /**
79 * Command: register a multiple-data update request
80 */
81 static const uint8_t COMMAND_REGISTER_SET_MULTI = 0x21;
82
83 /**
84 * Command: unregister a multiple-data update request
85 */
86 static const uint8_t COMMAND_UNREGISTER_SET_MULTI = 0x22;
87
88 /**
89 * Command: execute a registered multiple-data update request
90 */
91 static const uint8_t COMMAND_EXECUTE_SET_MULTI = 0x23;
92
93 /**
94 * Command: get the versions of the simulator
95 */
96 static const uint8_t COMMAND_GET_VERSIONS = 0x31;
97
98 /**
99 * Command: reload the plugins
100 */
101 static const uint8_t COMMAND_RELOAD_PLUGINS = 0x32;
102
103 /**
104 * Command: show a message in the message window.
105 */
106 static const uint8_t COMMAND_SHOW_MESSAGE = 0x41;
107
108 /**
109 * Command: register a set of hotkeys for the client. Old hotkeys,
110 * if any, are forgotten.
111 *
112 * The command is followed by the following data:
113 * - The number of the hotkeys defined (U32).
114 * - The code of the hotkeys (U16*number of the hotkeys).
115 * The lower byte is the same as the X-Plane virtual key code
116 * (the same as the ASCII code for numbers and upper-case letters),
117 * the upper one is a logical OR of the HOTKEY_MODIFIER_XXX
118 * codes.
119 *
120 * The reply consists of a result code only. It may fail with an
121 * invalid length code if the number of hotkeys is too large.
122 */
123 static const uint8_t COMMAND_REGISTER_HOTKEYS = 0x51;
124
125 /**
126 * Command: query the hotkeys.
127 *
128 * The reply consists of a result code, followed by the following
129 * data, if the result code is RESULT_OK:
130 * - The number of hotkeys defined (U32).
131 * - An array of U8 values each being 0 or 1 depending on whether
132 * the corresponding hotkey has been pressed since the last
133 * query (or the registration, whichever is later). The value at
134 * index i corresponds to the hotkey code at index i in the
135 * array passed with COMMAND_REGISTER_HOTKEYS.
136 *
137 * If not hotkey has been registered, the number of hotkeys is
138 * returned as 0.
139 */
140 static const uint8_t COMMAND_QUERY_HOTKEYS = 0x52;
141
142 /**
143 * Command: unregister the previously registered hotkeys.
144 *
145 * The reply is a result code.
146 */
147 static const uint8_t COMMAND_UNREGISTER_HOTKEYS = 0x53;
148
149 /**
150 * Data type: int
151 */
152 static const uint8_t TYPE_INT = 0x01;
153
154 /**
155 * Data type: float
156 */
157 static const uint8_t TYPE_FLOAT = 0x02;
158
159 /**
160 * Data type: double
161 */
162 static const uint8_t TYPE_DOUBLE = 0x03;
163
164 /**
165 * Data type: float array
166 */
167 static const uint8_t TYPE_FLOAT_ARRAY = 0x11;
168
169 /**
170 * Data type: int array
171 */
172 static const uint8_t TYPE_INT_ARRAY = 0x12;
173
174 /**
175 * Data type: byte array
176 */
177 static const uint8_t TYPE_BYTE_ARRAY = 0x13;
178
179 /**
180 * Result code: no error, everything is OK.
181 */
182 static const uint8_t RESULT_OK = 0x00;
183
184 /**
185 * Result code: invalid command
186 */
187 static const uint8_t RESULT_INVALID_COMMAND = 0x01;
188
189 /**
190 * Result code: unknown dataref
191 */
192 static const uint8_t RESULT_UNKNOWN_DATAREF = 0x02;
193
194 /**
195 * Result code: invalid type
196 */
197 static const uint8_t RESULT_INVALID_TYPE = 0x03;
198
199 /**
200 * Result code: invalid length
201 */
202 static const uint8_t RESULT_INVALID_LENGTH = 0x04;
203
204 /**
205 * Result code: invalid offset
206 */
207 static const uint8_t RESULT_INVALID_OFFSET = 0x05;
208
209 /**
210 * Result code: invalid count
211 */
212 static const uint8_t RESULT_INVALID_COUNT = 0x06;
213
214 /**
215 * Result code: invalid ID
216 */
217 static const uint8_t RESULT_INVALID_ID = 0x07;
218
219 /**
220 * Result code: invalid duration
221 */
222 static const uint8_t RESULT_INVALID_DURATION = 0x08;
223
224 /**
225 * Result code: other error
226 */
227 static const uint8_t RESULT_OTHER_ERROR = 0xff;
228
229 /**
230 * Hotkey modifier: shift
231 */
232 static const uint16_t HOTKEY_MODIFIER_SHIFT = 0x0100;
233
234 /**
235 * Hotkey modifier: control
236 */
237 static const uint16_t HOTKEY_MODIFIER_CONTROL = 0x0200;
238
239 /**
240 * The maximal length we accept (in order to protect ourselves).
241 */
242 static const int MAX_LENGTH = 2048;
243
244 /**
245 * The maximal count of requests in a multiple-data query or
246 * update.
247 */
248 static const size_t MAX_MULTI_COUNT = 1024;
249
250 /**
251 * The maximal message duration
252 */
253 static const float MAX_MESSAGE_DURATION = 5*60;
254
255 /**
256 * The maximal number of hotkeys that can be registered for a
257 * client.
258 */
259 static const size_t MAX_HOTKEY_COUNT = 128;
260
261 /**
262 * The version of the plugin.
263 */
264 static const int version = 10;
265};
266
267//------------------------------------------------------------------------------
268
269} /* namespace xplra */
270
271//------------------------------------------------------------------------------
272#endif // XPLRA_PROTOCOL_H
273
274// Local Variables:
275// mode: C++
276// c-basic-offset: 4
277// indent-tabs-mode: nil
278// End:
Note: See TracBrowser for help on using the repository browser.