2022-04-13 05:59:01 +08:00
|
|
|
#ifndef SC_CONTROLMSG_H
|
|
|
|
#define SC_CONTROLMSG_H
|
2019-05-31 20:55:11 +08:00
|
|
|
|
2021-01-09 02:24:51 +08:00
|
|
|
#include "common.h"
|
|
|
|
|
2019-05-31 20:55:11 +08:00
|
|
|
#include <stdbool.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
#include "android/input.h"
|
|
|
|
#include "android/keycodes.h"
|
2021-01-09 02:15:29 +08:00
|
|
|
#include "coords.h"
|
2019-05-31 20:55:11 +08:00
|
|
|
|
2022-01-27 04:31:30 +08:00
|
|
|
#define SC_CONTROL_MSG_MAX_SIZE (1 << 18) // 256k
|
2020-06-05 03:09:42 +08:00
|
|
|
|
2022-01-27 04:31:30 +08:00
|
|
|
#define SC_CONTROL_MSG_INJECT_TEXT_MAX_LENGTH 300
|
2021-12-04 11:11:30 +08:00
|
|
|
// type: 1 byte; sequence: 8 bytes; paste flag: 1 byte; length: 4 bytes
|
2022-01-27 04:31:30 +08:00
|
|
|
#define SC_CONTROL_MSG_CLIPBOARD_TEXT_MAX_LENGTH (SC_CONTROL_MSG_MAX_SIZE - 14)
|
2019-05-31 20:55:11 +08:00
|
|
|
|
2021-06-20 06:32:55 +08:00
|
|
|
#define POINTER_ID_MOUSE UINT64_C(-1)
|
|
|
|
#define POINTER_ID_VIRTUAL_FINGER UINT64_C(-2)
|
2019-10-04 02:14:12 +08:00
|
|
|
|
2022-01-15 05:17:30 +08:00
|
|
|
enum sc_control_msg_type {
|
2022-01-27 04:31:30 +08:00
|
|
|
SC_CONTROL_MSG_TYPE_INJECT_KEYCODE,
|
|
|
|
SC_CONTROL_MSG_TYPE_INJECT_TEXT,
|
|
|
|
SC_CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT,
|
|
|
|
SC_CONTROL_MSG_TYPE_INJECT_SCROLL_EVENT,
|
|
|
|
SC_CONTROL_MSG_TYPE_BACK_OR_SCREEN_ON,
|
|
|
|
SC_CONTROL_MSG_TYPE_EXPAND_NOTIFICATION_PANEL,
|
|
|
|
SC_CONTROL_MSG_TYPE_EXPAND_SETTINGS_PANEL,
|
|
|
|
SC_CONTROL_MSG_TYPE_COLLAPSE_PANELS,
|
|
|
|
SC_CONTROL_MSG_TYPE_GET_CLIPBOARD,
|
|
|
|
SC_CONTROL_MSG_TYPE_SET_CLIPBOARD,
|
|
|
|
SC_CONTROL_MSG_TYPE_SET_SCREEN_POWER_MODE,
|
|
|
|
SC_CONTROL_MSG_TYPE_ROTATE_DEVICE,
|
2019-03-16 03:23:30 +08:00
|
|
|
};
|
|
|
|
|
2022-01-27 04:31:30 +08:00
|
|
|
enum sc_screen_power_mode {
|
2019-03-16 03:23:30 +08:00
|
|
|
// see <https://android.googlesource.com/platform/frameworks/base.git/+/pie-release-2/core/java/android/view/SurfaceControl.java#305>
|
2022-01-27 04:31:30 +08:00
|
|
|
SC_SCREEN_POWER_MODE_OFF = 0,
|
|
|
|
SC_SCREEN_POWER_MODE_NORMAL = 2,
|
2019-05-31 20:55:11 +08:00
|
|
|
};
|
|
|
|
|
2022-01-27 04:31:30 +08:00
|
|
|
enum sc_copy_key {
|
|
|
|
SC_COPY_KEY_NONE,
|
|
|
|
SC_COPY_KEY_COPY,
|
|
|
|
SC_COPY_KEY_CUT,
|
2021-11-29 16:30:57 +08:00
|
|
|
};
|
|
|
|
|
2022-01-15 05:17:30 +08:00
|
|
|
struct sc_control_msg {
|
|
|
|
enum sc_control_msg_type type;
|
2019-05-31 20:55:11 +08:00
|
|
|
union {
|
|
|
|
struct {
|
|
|
|
enum android_keyevent_action action;
|
|
|
|
enum android_keycode keycode;
|
2020-06-11 16:40:52 +08:00
|
|
|
uint32_t repeat;
|
2019-05-31 20:55:11 +08:00
|
|
|
enum android_metastate metastate;
|
|
|
|
} inject_keycode;
|
|
|
|
struct {
|
2021-01-24 22:14:53 +08:00
|
|
|
char *text; // owned, to be freed by free()
|
2019-05-31 20:55:11 +08:00
|
|
|
} inject_text;
|
|
|
|
struct {
|
|
|
|
enum android_motionevent_action action;
|
|
|
|
enum android_motionevent_buttons buttons;
|
2019-09-15 22:16:17 +08:00
|
|
|
uint64_t pointer_id;
|
2021-10-30 21:20:39 +08:00
|
|
|
struct sc_position position;
|
2019-09-15 22:16:17 +08:00
|
|
|
float pressure;
|
|
|
|
} inject_touch_event;
|
2019-05-31 20:55:11 +08:00
|
|
|
struct {
|
2021-10-30 21:20:39 +08:00
|
|
|
struct sc_position position;
|
2022-07-03 15:02:17 +08:00
|
|
|
float hscroll;
|
|
|
|
float vscroll;
|
2021-12-31 17:38:05 +08:00
|
|
|
enum android_motionevent_buttons buttons;
|
2019-05-31 20:55:11 +08:00
|
|
|
} inject_scroll_event;
|
2021-04-17 00:37:50 +08:00
|
|
|
struct {
|
|
|
|
enum android_keyevent_action action; // action for the BACK key
|
|
|
|
// screen may only be turned on on ACTION_DOWN
|
|
|
|
} back_or_screen_on;
|
2021-11-29 16:30:57 +08:00
|
|
|
struct {
|
2022-01-27 04:31:30 +08:00
|
|
|
enum sc_copy_key copy_key;
|
2021-11-29 16:30:57 +08:00
|
|
|
} get_clipboard;
|
2019-05-31 20:55:11 +08:00
|
|
|
struct {
|
2021-11-20 18:50:33 +08:00
|
|
|
uint64_t sequence;
|
2021-01-24 22:14:53 +08:00
|
|
|
char *text; // owned, to be freed by free()
|
2020-05-26 02:58:24 +08:00
|
|
|
bool paste;
|
2019-05-31 20:55:11 +08:00
|
|
|
} set_clipboard;
|
2019-03-16 03:23:30 +08:00
|
|
|
struct {
|
2022-01-27 04:31:30 +08:00
|
|
|
enum sc_screen_power_mode mode;
|
2019-03-16 03:23:30 +08:00
|
|
|
} set_screen_power_mode;
|
2019-05-31 20:55:11 +08:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2020-06-05 03:26:38 +08:00
|
|
|
// buf size must be at least CONTROL_MSG_MAX_SIZE
|
2019-05-31 20:55:11 +08:00
|
|
|
// return the number of bytes written
|
|
|
|
size_t
|
2022-01-15 05:17:30 +08:00
|
|
|
sc_control_msg_serialize(const struct sc_control_msg *msg, unsigned char *buf);
|
2019-05-31 20:55:11 +08:00
|
|
|
|
2021-06-09 00:14:20 +08:00
|
|
|
void
|
2022-01-15 05:17:30 +08:00
|
|
|
sc_control_msg_log(const struct sc_control_msg *msg);
|
2021-06-09 00:14:20 +08:00
|
|
|
|
2019-05-31 20:55:11 +08:00
|
|
|
void
|
2022-01-15 05:17:30 +08:00
|
|
|
sc_control_msg_destroy(struct sc_control_msg *msg);
|
2019-05-31 20:55:11 +08:00
|
|
|
|
|
|
|
#endif
|