Steppable 0.0.1
A CAS project written from scratch in C++
Loading...
Searching...
No Matches
uSynergy.h
1/*
2uSynergy client -- Interface for the embedded Synergy client library
3 version 1.0.0, July 7th, 2012
4
5Copyright (C) 2012 Synergy Si Ltd.
6Copyright (c) 2012 Alex Evans
7
8This software is provided 'as-is', without any express or implied
9warranty. In no event will the authors be held liable for any damages
10arising from the use of this software.
11
12Permission is granted to anyone to use this software for any purpose,
13including commercial applications, and to alter it and redistribute it
14freely, subject to the following restrictions:
15
16 1. The origin of this software must not be misrepresented; you must not
17 claim that you wrote the original software. If you use this software
18 in a product, an acknowledgment in the product documentation would be
19 appreciated but is not required.
20
21 2. Altered source versions must be plainly marked as such, and must not be
22 misrepresented as being the original software.
23
24 3. This notice may not be removed or altered from any source
25 distribution.
26*/
27#include <stdint.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33
34
35//---------------------------------------------------------------------------------------------------------------------
36// Configuration
37//---------------------------------------------------------------------------------------------------------------------
38
39
40
44#if defined(USYNERGY_LITTLE_ENDIAN) && defined(USYNERGY_BIG_ENDIAN)
45 /* Ambiguous: both endians specified */
46 #error "Can't define both USYNERGY_LITTLE_ENDIAN and USYNERGY_BIG_ENDIAN"
47#elif !defined(USYNERGY_LITTLE_ENDIAN) && !defined(USYNERGY_BIG_ENDIAN)
48 /* Attempt to auto detect */
49 #if defined(__LITTLE_ENDIAN__) || defined(LITTLE_ENDIAN) || (_BYTE_ORDER == _LITTLE_ENDIAN)
50 #define USYNERGY_LITTLE_ENDIAN
51 #elif defined(__BIG_ENDIAN__) || defined(BIG_ENDIAN) || (_BYTE_ORDER == _BIG_ENDIAN)
52 #define USYNERGY_BIG_ENDIAN
53 #else
54 #error "Can't detect endian-nes, please defined either USYNERGY_LITTLE_ENDIAN or USYNERGY_BIG_ENDIAN";
55 #endif
56#else
57 /* User-specified endian-nes, nothing to do for us */
58#endif
59
60
61
62//---------------------------------------------------------------------------------------------------------------------
63// Types and Constants
64//---------------------------------------------------------------------------------------------------------------------
65
66
67
71typedef int uSynergyBool;
72#define USYNERGY_FALSE 0 /* False value */
73#define USYNERGY_TRUE 1 /* True value */
74
75
82typedef struct { int ignored; } * uSynergyCookie;
83
84
85
89enum uSynergyClipboardFormat
90{
91 USYNERGY_CLIPBOARD_FORMAT_TEXT = 0, /* Text format, UTF-8, newline is LF */
92 USYNERGY_CLIPBOARD_FORMAT_BITMAP = 1, /* Bitmap format, BMP 24/32bpp, BI_RGB */
93 USYNERGY_CLIPBOARD_FORMAT_HTML = 2, /* HTML format, HTML fragment, UTF-8, newline is LF */
94};
95
96
97
101#define USYNERGY_NUM_JOYSTICKS 4 /* Maximum number of supported joysticks */
102
103#define USYNERGY_PROTOCOL_MAJOR 1 /* Major protocol version */
104#define USYNERGY_PROTOCOL_MINOR 4 /* Minor protocol version */
105
106#define USYNERGY_IDLE_TIMEOUT 2000 /* Timeout in milliseconds before reconnecting */
107
108#define USYNERGY_TRACE_BUFFER_SIZE 1024 /* Maximum length of traced message */
109#define USYNERGY_REPLY_BUFFER_SIZE 1024 /* Maximum size of a reply packet */
110#define USYNERGY_RECEIVE_BUFFER_SIZE 4096 /* Maximum size of an incoming packet */
111
112
113
117#define USYNERGY_MODIFIER_SHIFT 0x0001 /* Shift key modifier */
118#define USYNERGY_MODIFIER_CTRL 0x0002 /* Ctrl key modifier */
119#define USYNERGY_MODIFIER_ALT 0x0004 /* Alt key modifier */
120#define USYNERGY_MODIFIER_META 0x0008 /* Meta key modifier */
121#define USYNERGY_MODIFIER_WIN 0x0010 /* Windows key modifier */
122#define USYNERGY_MODIFIER_ALT_GR 0x0020 /* AltGr key modifier */
123#define USYNERGY_MODIFIER_LEVEL5LOCK 0x0040 /* Level5Lock key modifier */
124#define USYNERGY_MODIFIER_CAPSLOCK 0x1000 /* CapsLock key modifier */
125#define USYNERGY_MODIFIER_NUMLOCK 0x2000 /* NumLock key modifier */
126#define USYNERGY_MODIFIER_SCROLLOCK 0x4000 /* ScrollLock key modifier */
127
128
129
130
131//---------------------------------------------------------------------------------------------------------------------
132// Functions and Callbacks
133//---------------------------------------------------------------------------------------------------------------------
134
135
136
149typedef uSynergyBool (*uSynergyConnectFunc)(uSynergyCookie cookie);
150
151
152
164typedef uSynergyBool (*uSynergySendFunc)(uSynergyCookie cookie, const uint8_t *buffer, int length);
165
166
167
181typedef uSynergyBool (*uSynergyReceiveFunc)(uSynergyCookie cookie, uint8_t *buffer, int maxLength, int* outLength);
182
183
184
195typedef void (*uSynergySleepFunc)(uSynergyCookie cookie, int timeMs);
196
197
198
207typedef uint32_t (*uSynergyGetTimeFunc)();
208
209
210
221typedef void (*uSynergyTraceFunc)(uSynergyCookie cookie, const char *text);
222
223
224
234typedef void (*uSynergyScreenActiveCallback)(uSynergyCookie cookie, uSynergyBool active);
235
236
237
254typedef void (*uSynergyMouseCallback)(uSynergyCookie cookie, uint16_t x, uint16_t y, int16_t wheelX, int16_t wheelY, uSynergyBool buttonLeft, uSynergyBool buttonRight, uSynergyBool buttonMiddle);
255
256
257
269typedef void (*uSynergyKeyboardCallback)(uSynergyCookie cookie, uint16_t key, uint16_t modifiers, uSynergyBool down, uSynergyBool repeat);
270
271
272
289typedef void (*uSynergyJoystickCallback)(uSynergyCookie cookie, uint8_t joyNum, uint16_t buttons, int8_t leftStickX, int8_t leftStickY, int8_t rightStickX, int8_t rightStickY);
290
291
292
305typedef void (*uSynergyClipboardCallback)(uSynergyCookie cookie, enum uSynergyClipboardFormat format, const uint8_t *data, uint32_t size);
306
307
308
309//---------------------------------------------------------------------------------------------------------------------
310// Context
311//---------------------------------------------------------------------------------------------------------------------
312
313
314
318typedef struct
319{
320 /* Mandatory configuration data, filled in by client */
321 uSynergyConnectFunc m_connectFunc; /* Connect function */
322 uSynergySendFunc m_sendFunc; /* Send data function */
323 uSynergyReceiveFunc m_receiveFunc; /* Receive data function */
324 uSynergySleepFunc m_sleepFunc; /* Thread sleep function */
325 uSynergyGetTimeFunc m_getTimeFunc; /* Get current time function */
326 const char* m_clientName; /* Name of Synergy Screen / Client */
327 uint16_t m_clientWidth; /* Width of screen */
328 uint16_t m_clientHeight; /* Height of screen */
329
330 /* Optional configuration data, filled in by client */
331 uSynergyCookie m_cookie; /* Cookie pointer passed to callback functions (can be NULL) */
332 uSynergyTraceFunc m_traceFunc; /* Function for tracing status (can be NULL) */
333 uSynergyScreenActiveCallback m_screenActiveCallback; /* Callback for entering and leaving screen */
334 uSynergyMouseCallback m_mouseCallback; /* Callback for mouse events */
335 uSynergyKeyboardCallback m_keyboardCallback; /* Callback for keyboard events */
336 uSynergyJoystickCallback m_joystickCallback; /* Callback for joystick events */
337 uSynergyClipboardCallback m_clipboardCallback; /* Callback for clipboard events */
338
339 /* State data, used internall by client, initialized by uSynergyInit() */
340 uSynergyBool m_connected; /* Is our socket connected? */
341 uSynergyBool m_hasReceivedHello; /* Have we received a 'Hello' from the server? */
342 uSynergyBool m_isCaptured; /* Is Synergy active (i.e. this client is receiving input messages?) */
343 uint32_t m_lastMessageTime; /* Time at which last message was received */
344 uint32_t m_sequenceNumber; /* Packet sequence number */
345 uint8_t m_receiveBuffer[USYNERGY_RECEIVE_BUFFER_SIZE]; /* Receive buffer */
346 int m_receiveOfs; /* Receive buffer offset */
347 uint8_t m_replyBuffer[USYNERGY_REPLY_BUFFER_SIZE]; /* Reply buffer */
348 uint8_t* m_replyCur; /* Write offset into reply buffer */
349 uint16_t m_mouseX; /* Mouse X position */
350 uint16_t m_mouseY; /* Mouse Y position */
351 int16_t m_mouseWheelX; /* Mouse wheel X position */
352 int16_t m_mouseWheelY; /* Mouse wheel Y position */
353 uSynergyBool m_mouseButtonLeft; /* Mouse left button */
354 uSynergyBool m_mouseButtonRight; /* Mouse right button */
355 uSynergyBool m_mouseButtonMiddle; /* Mouse middle button */
356 int8_t m_joystickSticks[USYNERGY_NUM_JOYSTICKS][4]; /* Joystick stick position in 2 axes for 2 sticks */
357 uint16_t m_joystickButtons[USYNERGY_NUM_JOYSTICKS]; /* Joystick button state */
359
360
361
362//---------------------------------------------------------------------------------------------------------------------
363// Interface
364//---------------------------------------------------------------------------------------------------------------------
365
366
367
377extern void uSynergyInit(uSynergyContext *context);
378
379
380
397extern void uSynergyUpdate(uSynergyContext *context);
398
399
400
414extern void uSynergySendClipboard(uSynergyContext *context, const char *text);
415
416
417
418#ifdef __cplusplus
419};
420#endif
uSynergy context
Definition uSynergy.h:319
uSynergyBool m_mouseButtonRight
Definition uSynergy.h:354
uint16_t m_clientHeight
Definition uSynergy.h:328
uint16_t m_mouseY
Definition uSynergy.h:350
uSynergyBool m_isCaptured
Definition uSynergy.h:342
uint16_t m_clientWidth
Definition uSynergy.h:327
const char * m_clientName
Definition uSynergy.h:326
uSynergySendFunc m_sendFunc
Definition uSynergy.h:322
int m_receiveOfs
Definition uSynergy.h:346
uSynergyJoystickCallback m_joystickCallback
Definition uSynergy.h:336
uSynergyMouseCallback m_mouseCallback
Definition uSynergy.h:334
uint16_t m_joystickButtons[USYNERGY_NUM_JOYSTICKS]
Definition uSynergy.h:357
uint32_t m_lastMessageTime
Definition uSynergy.h:343
uSynergyReceiveFunc m_receiveFunc
Definition uSynergy.h:323
uint16_t m_mouseX
Definition uSynergy.h:349
uSynergyConnectFunc m_connectFunc
Definition uSynergy.h:321
uSynergyScreenActiveCallback m_screenActiveCallback
Definition uSynergy.h:333
uint8_t m_receiveBuffer[USYNERGY_RECEIVE_BUFFER_SIZE]
Definition uSynergy.h:345
uSynergyBool m_mouseButtonMiddle
Definition uSynergy.h:355
uSynergyBool m_mouseButtonLeft
Definition uSynergy.h:353
uSynergySleepFunc m_sleepFunc
Definition uSynergy.h:324
uSynergyClipboardCallback m_clipboardCallback
Definition uSynergy.h:337
int16_t m_mouseWheelX
Definition uSynergy.h:351
int8_t m_joystickSticks[USYNERGY_NUM_JOYSTICKS][4]
Definition uSynergy.h:356
uSynergyGetTimeFunc m_getTimeFunc
Definition uSynergy.h:325
uSynergyBool m_hasReceivedHello
Definition uSynergy.h:341
uint8_t * m_replyCur
Definition uSynergy.h:348
int16_t m_mouseWheelY
Definition uSynergy.h:352
uSynergyTraceFunc m_traceFunc
Definition uSynergy.h:332
uSynergyBool m_connected
Definition uSynergy.h:340
uSynergyCookie m_cookie
Definition uSynergy.h:331
uint32_t m_sequenceNumber
Definition uSynergy.h:344
uSynergyKeyboardCallback m_keyboardCallback
Definition uSynergy.h:335
uint8_t m_replyBuffer[USYNERGY_REPLY_BUFFER_SIZE]
Definition uSynergy.h:347
User context type.
Definition uSynergy.h:82
int ignored
Definition uSynergy.h:82
Untitled