source: xplra/src/plugin/src/xplra/Protocol.h@ 81:f28f1b8f3ef7

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

Added a command to save the current situation

File size: 8.0 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: save the current situation.
105 *
106 * Followed by a string containing the path of the file to save
107 * relative to the X-System directory.
108 */
109 static const uint8_t COMMAND_SAVE_SITUATION = 0x33;
110
111 /**
112 * Command: show a message in the message window.
113 */
114 static const uint8_t COMMAND_SHOW_MESSAGE = 0x41;
115
116 /**
117 * Command: register a set of hotkeys for the client. Old hotkeys,
118 * if any, are forgotten.
119 *
120 * The command is followed by the following data:
121 * - The number of the hotkeys defined (U32).
122 * - The code of the hotkeys (U16*number of the hotkeys).
123 * The lower byte is the same as the X-Plane virtual key code
124 * (the same as the ASCII code for numbers and upper-case letters),
125 * the upper one is a logical OR of the HOTKEY_MODIFIER_XXX
126 * codes.
127 *
128 * The reply consists of a result code only. It may fail with an
129 * invalid length code if the number of hotkeys is too large.
130 */
131 static const uint8_t COMMAND_REGISTER_HOTKEYS = 0x51;
132
133 /**
134 * Command: query the hotkeys.
135 *
136 * The reply consists of a result code, followed by the following
137 * data, if the result code is RESULT_OK:
138 * - The number of hotkeys defined (U32).
139 * - An array of U8 values each being 0 or 1 depending on whether
140 * the corresponding hotkey has been pressed since the last
141 * query (or the registration, whichever is later). The value at
142 * index i corresponds to the hotkey code at index i in the
143 * array passed with COMMAND_REGISTER_HOTKEYS.
144 *
145 * If not hotkey has been registered, the number of hotkeys is
146 * returned as 0.
147 */
148 static const uint8_t COMMAND_QUERY_HOTKEYS = 0x52;
149
150 /**
151 * Command: unregister the previously registered hotkeys.
152 *
153 * The reply is a result code.
154 */
155 static const uint8_t COMMAND_UNREGISTER_HOTKEYS = 0x53;
156
157 /**
158 * Data type: int
159 */
160 static const uint8_t TYPE_INT = 0x01;
161
162 /**
163 * Data type: float
164 */
165 static const uint8_t TYPE_FLOAT = 0x02;
166
167 /**
168 * Data type: double
169 */
170 static const uint8_t TYPE_DOUBLE = 0x03;
171
172 /**
173 * Data type: float array
174 */
175 static const uint8_t TYPE_FLOAT_ARRAY = 0x11;
176
177 /**
178 * Data type: int array
179 */
180 static const uint8_t TYPE_INT_ARRAY = 0x12;
181
182 /**
183 * Data type: byte array
184 */
185 static const uint8_t TYPE_BYTE_ARRAY = 0x13;
186
187 /**
188 * Result code: no error, everything is OK.
189 */
190 static const uint8_t RESULT_OK = 0x00;
191
192 /**
193 * Result code: invalid command
194 */
195 static const uint8_t RESULT_INVALID_COMMAND = 0x01;
196
197 /**
198 * Result code: unknown dataref
199 */
200 static const uint8_t RESULT_UNKNOWN_DATAREF = 0x02;
201
202 /**
203 * Result code: invalid type
204 */
205 static const uint8_t RESULT_INVALID_TYPE = 0x03;
206
207 /**
208 * Result code: invalid length
209 */
210 static const uint8_t RESULT_INVALID_LENGTH = 0x04;
211
212 /**
213 * Result code: invalid offset
214 */
215 static const uint8_t RESULT_INVALID_OFFSET = 0x05;
216
217 /**
218 * Result code: invalid count
219 */
220 static const uint8_t RESULT_INVALID_COUNT = 0x06;
221
222 /**
223 * Result code: invalid ID
224 */
225 static const uint8_t RESULT_INVALID_ID = 0x07;
226
227 /**
228 * Result code: invalid duration
229 */
230 static const uint8_t RESULT_INVALID_DURATION = 0x08;
231
232 /**
233 * Result code: other error
234 */
235 static const uint8_t RESULT_OTHER_ERROR = 0xff;
236
237 /**
238 * Hotkey modifier: shift
239 */
240 static const uint16_t HOTKEY_MODIFIER_SHIFT = 0x0100;
241
242 /**
243 * Hotkey modifier: control
244 */
245 static const uint16_t HOTKEY_MODIFIER_CONTROL = 0x0200;
246
247 /**
248 * The maximal length we accept (in order to protect ourselves).
249 */
250 static const int MAX_LENGTH = 2048;
251
252 /**
253 * The maximal count of requests in a multiple-data query or
254 * update.
255 */
256 static const size_t MAX_MULTI_COUNT = 1024;
257
258 /**
259 * The maximal message duration
260 */
261 static const float MAX_MESSAGE_DURATION = 5*60;
262
263 /**
264 * The maximal number of hotkeys that can be registered for a
265 * client.
266 */
267 static const size_t MAX_HOTKEY_COUNT = 128;
268
269 /**
270 * The version of the plugin.
271 */
272 static const int version = 10;
273};
274
275//------------------------------------------------------------------------------
276
277} /* namespace xplra */
278
279//------------------------------------------------------------------------------
280#endif // XPLRA_PROTOCOL_H
281
282// Local Variables:
283// mode: C++
284// c-basic-offset: 4
285// indent-tabs-mode: nil
286// End:
Note: See TracBrowser for help on using the repository browser.