uSynergy.h
Go to the documentation of this file.
1 /*
2 uSynergy client -- Interface for the embedded Synergy client library
3  version 1.0.0, July 7th, 2012
4 
5 Copyright (C) 2012 Synergy Si Ltd.
6 Copyright (c) 2012 Alex Evans
7 
8 This software is provided 'as-is', without any express or implied
9 warranty. In no event will the authors be held liable for any damages
10 arising from the use of this software.
11 
12 Permission is granted to anyone to use this software for any purpose,
13 including commercial applications, and to alter it and redistribute it
14 freely, 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
30 extern "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 
71 typedef int uSynergyBool;
72 #define USYNERGY_FALSE 0 /* False value */
73 #define USYNERGY_TRUE 1 /* True value */
74 
75 
82 typedef struct { int ignored; } * uSynergyCookie;
83 
84 
85 
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 
150 
151 
152 
164 typedef uSynergyBool (*uSynergySendFunc)(uSynergyCookie cookie, const uint8_t *buffer, int length);
165 
166 
167 
181 typedef uSynergyBool (*uSynergyReceiveFunc)(uSynergyCookie cookie, uint8_t *buffer, int maxLength, int* outLength);
182 
183 
184 
195 typedef void (*uSynergySleepFunc)(uSynergyCookie cookie, int timeMs);
196 
197 
198 
207 typedef uint32_t (*uSynergyGetTimeFunc)();
208 
209 
210 
221 typedef void (*uSynergyTraceFunc)(uSynergyCookie cookie, const char *text);
222 
223 
224 
235 
236 
237 
254 typedef 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 
269 typedef void (*uSynergyKeyboardCallback)(uSynergyCookie cookie, uint16_t key, uint16_t modifiers, uSynergyBool down, uSynergyBool repeat);
270 
271 
272 
289 typedef 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 
305 typedef void (*uSynergyClipboardCallback)(uSynergyCookie cookie, enum uSynergyClipboardFormat format, const uint8_t *data, uint32_t size);
306 
307 
308 
309 //---------------------------------------------------------------------------------------------------------------------
310 // Context
311 //---------------------------------------------------------------------------------------------------------------------
312 
313 
314 
318 typedef 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 
377 extern void uSynergyInit(uSynergyContext *context);
378 
379 
380 
397 extern void uSynergyUpdate(uSynergyContext *context);
398 
399 
400 
414 extern void uSynergySendClipboard(uSynergyContext *context, const char *text);
415 
416 
417 
418 #ifdef __cplusplus
419 };
420 #endif
USYNERGY_REPLY_BUFFER_SIZE
#define USYNERGY_REPLY_BUFFER_SIZE
Definition: uSynergy.h:109
uSynergyConnectFunc
uSynergyBool(* uSynergyConnectFunc)(uSynergyCookie cookie)
Connect function.
Definition: uSynergy.h:149
uSynergyContext::m_clientName
const char * m_clientName
Definition: uSynergy.h:326
uSynergyContext::m_sequenceNumber
uint32_t m_sequenceNumber
Definition: uSynergy.h:344
uSynergyKeyboardCallback
void(* uSynergyKeyboardCallback)(uSynergyCookie cookie, uint16_t key, uint16_t modifiers, uSynergyBool down, uSynergyBool repeat)
Key event callback.
Definition: uSynergy.h:269
length
GLenum GLuint GLenum GLsizei length
Definition: glcorearb.h:2695
active
@ active
Definition: proxy.cpp:141
uSynergyContext
uSynergy context
Definition: uSynergy.h:318
uSynergyScreenActiveCallback
void(* uSynergyScreenActiveCallback)(uSynergyCookie cookie, uSynergyBool active)
Screen active callback.
Definition: uSynergy.h:234
uSynergyTraceFunc
void(* uSynergyTraceFunc)(uSynergyCookie cookie, const char *text)
Trace function.
Definition: uSynergy.h:221
y
GLint y
Definition: glcorearb.h:2768
USYNERGY_CLIPBOARD_FORMAT_BITMAP
@ USYNERGY_CLIPBOARD_FORMAT_BITMAP
Definition: uSynergy.h:92
x
GLint GLenum GLint x
Definition: glcorearb.h:2834
uSynergyClipboardCallback
void(* uSynergyClipboardCallback)(uSynergyCookie cookie, enum uSynergyClipboardFormat format, const uint8_t *data, uint32_t size)
Clipboard event callback.
Definition: uSynergy.h:305
uSynergyContext::m_traceFunc
uSynergyTraceFunc m_traceFunc
Definition: uSynergy.h:332
uSynergyReceiveFunc
uSynergyBool(* uSynergyReceiveFunc)(uSynergyCookie cookie, uint8_t *buffer, int maxLength, int *outLength)
Receive function.
Definition: uSynergy.h:181
uSynergyContext::m_connected
uSynergyBool m_connected
Definition: uSynergy.h:340
uSynergyContext::m_clipboardCallback
uSynergyClipboardCallback m_clipboardCallback
Definition: uSynergy.h:337
USYNERGY_CLIPBOARD_FORMAT_TEXT
@ USYNERGY_CLIPBOARD_FORMAT_TEXT
Definition: uSynergy.h:91
uSynergyContext::m_replyCur
uint8_t * m_replyCur
Definition: uSynergy.h:348
uSynergyContext::m_mouseY
uint16_t m_mouseY
Definition: uSynergy.h:350
uSynergyUpdate
void uSynergyUpdate(uSynergyContext *context)
Update uSynergy.
Definition: uSynergy.c:583
uSynergyMouseCallback
void(* uSynergyMouseCallback)(uSynergyCookie cookie, uint16_t x, uint16_t y, int16_t wheelX, int16_t wheelY, uSynergyBool buttonLeft, uSynergyBool buttonRight, uSynergyBool buttonMiddle)
Mouse callback.
Definition: uSynergy.h:254
uSynergyCookie::ignored
int ignored
Definition: uSynergy.h:82
buffer
GLuint buffer
Definition: glcorearb.h:2939
uSynergyContext::m_sendFunc
uSynergySendFunc m_sendFunc
Definition: uSynergy.h:322
uSynergyContext::m_mouseButtonMiddle
uSynergyBool m_mouseButtonMiddle
Definition: uSynergy.h:355
format
GLint GLint GLsizei GLint GLenum format
Definition: glcorearb.h:2773
uSynergyContext::m_mouseWheelX
int16_t m_mouseWheelX
Definition: uSynergy.h:351
uSynergyContext::m_mouseButtonRight
uSynergyBool m_mouseButtonRight
Definition: uSynergy.h:354
uSynergyContext::m_joystickCallback
uSynergyJoystickCallback m_joystickCallback
Definition: uSynergy.h:336
USYNERGY_NUM_JOYSTICKS
#define USYNERGY_NUM_JOYSTICKS
Constants and limits.
Definition: uSynergy.h:101
uSynergyContext::m_hasReceivedHello
uSynergyBool m_hasReceivedHello
Definition: uSynergy.h:341
uSynergyContext::m_lastMessageTime
uint32_t m_lastMessageTime
Definition: uSynergy.h:343
uSynergyJoystickCallback
void(* uSynergyJoystickCallback)(uSynergyCookie cookie, uint8_t joyNum, uint16_t buttons, int8_t leftStickX, int8_t leftStickY, int8_t rightStickX, int8_t rightStickY)
Joystick event callback.
Definition: uSynergy.h:289
uSynergyContext::m_receiveOfs
int m_receiveOfs
Definition: uSynergy.h:346
uSynergyCookie
User context type.
Definition: uSynergy.h:82
uSynergyContext::m_receiveFunc
uSynergyReceiveFunc m_receiveFunc
Definition: uSynergy.h:323
size
#define size
Definition: glcorearb.h:2944
key
const SETUP_TEARDOWN_TESTCONTEXT char * key
Definition: test_wss_transport.cpp:10
void
typedef void(APIENTRY *GLDEBUGPROCARB)(GLenum source
uSynergyContext::m_clientHeight
uint16_t m_clientHeight
Definition: uSynergy.h:328
uSynergyContext::m_cookie
uSynergyCookie m_cookie
Definition: uSynergy.h:331
uSynergySendFunc
uSynergyBool(* uSynergySendFunc)(uSynergyCookie cookie, const uint8_t *buffer, int length)
Send function.
Definition: uSynergy.h:164
uSynergyContext::m_connectFunc
uSynergyConnectFunc m_connectFunc
Definition: uSynergy.h:321
uSynergyContext::m_clientWidth
uint16_t m_clientWidth
Definition: uSynergy.h:327
uSynergyContext::m_getTimeFunc
uSynergyGetTimeFunc m_getTimeFunc
Definition: uSynergy.h:325
uSynergyContext::m_mouseCallback
uSynergyMouseCallback m_mouseCallback
Definition: uSynergy.h:334
USYNERGY_CLIPBOARD_FORMAT_HTML
@ USYNERGY_CLIPBOARD_FORMAT_HTML
Definition: uSynergy.h:93
uSynergyClipboardFormat
uSynergyClipboardFormat
Clipboard types.
Definition: uSynergy.h:89
uSynergyGetTimeFunc
uint32_t(* uSynergyGetTimeFunc)()
Get time function.
Definition: uSynergy.h:207
uSynergyContext::m_screenActiveCallback
uSynergyScreenActiveCallback m_screenActiveCallback
Definition: uSynergy.h:333
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: glcorearb.h:2879
uSynergyContext::m_isCaptured
uSynergyBool m_isCaptured
Definition: uSynergy.h:342
uSynergyContext::m_mouseButtonLeft
uSynergyBool m_mouseButtonLeft
Definition: uSynergy.h:353
uSynergyContext::m_keyboardCallback
uSynergyKeyboardCallback m_keyboardCallback
Definition: uSynergy.h:335
uSynergySleepFunc
void(* uSynergySleepFunc)(uSynergyCookie cookie, int timeMs)
Thread sleep function.
Definition: uSynergy.h:195
uSynergyContext::m_mouseWheelY
int16_t m_mouseWheelY
Definition: uSynergy.h:352
uSynergyInit
void uSynergyInit(uSynergyContext *context)
Initialize uSynergy context.
Definition: uSynergy.c:570
uSynergyContext::m_mouseX
uint16_t m_mouseX
Definition: uSynergy.h:349
uSynergyContext::m_sleepFunc
uSynergySleepFunc m_sleepFunc
Definition: uSynergy.h:324
USYNERGY_RECEIVE_BUFFER_SIZE
#define USYNERGY_RECEIVE_BUFFER_SIZE
Definition: uSynergy.h:110
uSynergySendClipboard
void uSynergySendClipboard(uSynergyContext *context, const char *text)
Send clipboard data.
Definition: uSynergy.c:603
uSynergyBool
int uSynergyBool
Boolean type.
Definition: uSynergy.h:71


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:07:01