@yume-chan/scrcpy 0.0.19 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +30 -0
- package/CHANGELOG.md +17 -1
- package/README.md +76 -266
- package/esm/codec/av1.js +2 -2
- package/esm/codec/av1.js.map +1 -1
- package/esm/codec/h264.d.ts +1 -21
- package/esm/codec/h264.d.ts.map +1 -1
- package/esm/codec/h264.js +15 -236
- package/esm/codec/h264.js.map +1 -1
- package/esm/codec/h265.d.ts +454 -0
- package/esm/codec/h265.d.ts.map +1 -1
- package/esm/codec/h265.js +1062 -2
- package/esm/codec/h265.js.map +1 -1
- package/esm/codec/index.d.ts +1 -0
- package/esm/codec/index.d.ts.map +1 -1
- package/esm/codec/index.js +1 -0
- package/esm/codec/index.js.map +1 -1
- package/esm/codec/nalu.d.ts +37 -0
- package/esm/codec/nalu.d.ts.map +1 -0
- package/esm/codec/nalu.js +323 -0
- package/esm/codec/nalu.js.map +1 -0
- package/esm/control/back-or-screen-on.d.ts +1 -1
- package/esm/control/back-or-screen-on.d.ts.map +1 -1
- package/esm/control/hover-helper.d.ts +1 -1
- package/esm/control/hover-helper.d.ts.map +1 -1
- package/esm/control/hover-helper.js +8 -9
- package/esm/control/hover-helper.js.map +1 -1
- package/esm/control/index.d.ts +2 -0
- package/esm/control/index.d.ts.map +1 -1
- package/esm/control/index.js +2 -0
- package/esm/control/index.js.map +1 -1
- package/esm/control/inject-keycode.d.ts +1 -2
- package/esm/control/inject-keycode.d.ts.map +1 -1
- package/esm/control/inject-keycode.js +4 -5
- package/esm/control/inject-keycode.js.map +1 -1
- package/esm/control/inject-text.d.ts +1 -2
- package/esm/control/inject-text.d.ts.map +1 -1
- package/esm/control/inject-text.js +1 -2
- package/esm/control/inject-text.js.map +1 -1
- package/esm/control/inject-touch.d.ts +15 -20
- package/esm/control/inject-touch.d.ts.map +1 -1
- package/esm/control/inject-touch.js +16 -43
- package/esm/control/inject-touch.js.map +1 -1
- package/esm/control/rotate-device.d.ts +2 -4
- package/esm/control/rotate-device.d.ts.map +1 -1
- package/esm/control/rotate-device.js +2 -3
- package/esm/control/rotate-device.js.map +1 -1
- package/esm/control/serializer.d.ts +11 -23
- package/esm/control/serializer.d.ts.map +1 -1
- package/esm/control/serializer.js +23 -52
- package/esm/control/serializer.js.map +1 -1
- package/esm/control/set-screen-power-mode.d.ts +1 -2
- package/esm/control/set-screen-power-mode.d.ts.map +1 -1
- package/esm/control/set-screen-power-mode.js +2 -3
- package/esm/control/set-screen-power-mode.js.map +1 -1
- package/esm/control/type.d.ts +14 -0
- package/esm/control/type.d.ts.map +1 -1
- package/esm/control/type.js +23 -1
- package/esm/control/type.js.map +1 -1
- package/esm/control/writer.d.ts +26 -0
- package/esm/control/writer.d.ts.map +1 -0
- package/esm/control/writer.js +53 -0
- package/esm/control/writer.js.map +1 -0
- package/esm/device-message/stream.d.ts.map +1 -1
- package/esm/device-message/stream.js +23 -8
- package/esm/device-message/stream.js.map +1 -1
- package/esm/device-message/type.js +1 -1
- package/esm/device-message/type.js.map +1 -1
- package/esm/index.d.ts +1 -2
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -2
- package/esm/index.js.map +1 -1
- package/esm/options/1_16/codec-options.d.ts +2 -3
- package/esm/options/1_16/codec-options.d.ts.map +1 -1
- package/esm/options/1_16/codec-options.js.map +1 -1
- package/esm/options/1_16/index.d.ts +3 -1
- package/esm/options/1_16/index.d.ts.map +1 -1
- package/esm/options/1_16/index.js +3 -1
- package/esm/options/1_16/index.js.map +1 -1
- package/esm/options/1_16/init.js +2 -2
- package/esm/options/1_16/init.js.map +1 -1
- package/esm/options/1_16/options.d.ts +42 -96
- package/esm/options/1_16/options.d.ts.map +1 -1
- package/esm/options/1_16/options.js +104 -142
- package/esm/options/1_16/options.js.map +1 -1
- package/esm/options/1_16/scroll.d.ts +2 -4
- package/esm/options/1_16/scroll.d.ts.map +1 -1
- package/esm/options/1_16/scroll.js +13 -14
- package/esm/options/1_16/scroll.js.map +1 -1
- package/esm/options/1_17.d.ts +1 -0
- package/esm/options/1_17.d.ts.map +1 -1
- package/esm/options/1_17.js +8 -3
- package/esm/options/1_17.js.map +1 -1
- package/esm/options/1_18.d.ts +49 -11
- package/esm/options/1_18.d.ts.map +1 -1
- package/esm/options/1_18.js +64 -32
- package/esm/options/1_18.js.map +1 -1
- package/esm/options/1_21.d.ts +26 -7
- package/esm/options/1_21.d.ts.map +1 -1
- package/esm/options/1_21.js +34 -20
- package/esm/options/1_21.js.map +1 -1
- package/esm/options/1_22/index.d.ts +1 -0
- package/esm/options/1_22/index.d.ts.map +1 -1
- package/esm/options/1_22/index.js +1 -0
- package/esm/options/1_22/index.js.map +1 -1
- package/esm/options/1_22/options.d.ts +32 -26
- package/esm/options/1_22/options.d.ts.map +1 -1
- package/esm/options/1_22/options.js +26 -16
- package/esm/options/1_22/options.js.map +1 -1
- package/esm/options/1_22/scroll.d.ts +1 -1
- package/esm/options/1_22/scroll.d.ts.map +1 -1
- package/esm/options/1_22/scroll.js +1 -1
- package/esm/options/1_22/scroll.js.map +1 -1
- package/esm/options/1_23.d.ts +32 -8
- package/esm/options/1_23.d.ts.map +1 -1
- package/esm/options/1_23.js +23 -14
- package/esm/options/1_23.js.map +1 -1
- package/esm/options/1_24.d.ts +29 -4
- package/esm/options/1_24.d.ts.map +1 -1
- package/esm/options/1_24.js +16 -7
- package/esm/options/1_24.js.map +1 -1
- package/esm/options/1_25/options.d.ts +6 -2
- package/esm/options/1_25/options.d.ts.map +1 -1
- package/esm/options/1_25/options.js +16 -2
- package/esm/options/1_25/options.js.map +1 -1
- package/esm/options/1_25/scroll.d.ts.map +1 -1
- package/esm/options/1_25/scroll.js +2 -1
- package/esm/options/1_25/scroll.js.map +1 -1
- package/esm/options/2_0.d.ts +12 -8
- package/esm/options/2_0.d.ts.map +1 -1
- package/esm/options/2_0.js +82 -15
- package/esm/options/2_0.js.map +1 -1
- package/esm/options/2_1.d.ts +48 -0
- package/esm/options/2_1.d.ts.map +1 -0
- package/esm/options/2_1.js +23 -0
- package/esm/options/2_1.js.map +1 -0
- package/esm/options/codec.d.ts +4 -4
- package/esm/options/codec.d.ts.map +1 -1
- package/esm/options/codec.js +5 -6
- package/esm/options/codec.js.map +1 -1
- package/esm/options/index.d.ts +5 -0
- package/esm/options/index.d.ts.map +1 -1
- package/esm/options/index.js +5 -0
- package/esm/options/index.js.map +1 -1
- package/esm/options/latest.d.ts +4 -5
- package/esm/options/latest.d.ts.map +1 -1
- package/esm/options/latest.js +2 -3
- package/esm/options/latest.js.map +1 -1
- package/esm/options/types.d.ts +74 -33
- package/esm/options/types.d.ts.map +1 -1
- package/esm/options/types.js +62 -0
- package/esm/options/types.js.map +1 -1
- package/package.json +9 -19
- package/src/codec/av1.ts +33 -0
- package/src/codec/h264.ts +317 -0
- package/src/codec/h265.ts +1375 -0
- package/src/codec/index.ts +4 -0
- package/src/codec/nalu.ts +391 -0
- package/src/control/back-or-screen-on.ts +1 -1
- package/{esm/control/simple.js → src/control/basic.ts} +3 -3
- package/src/control/hover-helper.ts +10 -11
- package/src/control/index.ts +2 -0
- package/src/control/inject-keycode.ts +1 -3
- package/src/control/inject-text.ts +1 -3
- package/src/control/inject-touch.ts +16 -55
- package/src/control/rotate-device.ts +2 -7
- package/src/control/serializer.ts +50 -113
- package/src/control/set-screen-power-mode.ts +1 -3
- package/src/control/type.ts +32 -0
- package/src/control/writer.ts +85 -0
- package/src/device-message/stream.ts +32 -12
- package/src/index.ts +1 -2
- package/src/options/1_16/codec-options.ts +6 -7
- package/src/options/1_16/float-to-uint16.ts +33 -0
- package/src/options/1_16/index.ts +3 -1
- package/src/options/1_16/init.ts +80 -0
- package/src/options/1_16/message.ts +55 -0
- package/src/options/1_16/options.ts +147 -260
- package/src/options/1_16/scroll.ts +17 -18
- package/src/options/1_17.ts +66 -0
- package/src/options/1_18.ts +103 -39
- package/src/options/1_21.ts +49 -27
- package/src/options/1_22/index.ts +1 -0
- package/src/options/1_22/init.ts +19 -0
- package/src/options/1_22/options.ts +38 -45
- package/src/options/1_22/scroll.ts +3 -3
- package/src/options/1_23.ts +34 -22
- package/src/options/1_24.ts +23 -11
- package/src/options/1_25/options.ts +22 -4
- package/src/options/1_25/scroll.ts +4 -3
- package/src/options/2_0.ts +342 -0
- package/src/options/2_1.ts +35 -0
- package/src/options/codec.ts +98 -0
- package/src/options/index.ts +5 -0
- package/src/options/latest.ts +12 -0
- package/src/options/types.ts +164 -43
- package/tsconfig.build.json +9 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/bin/scrcpy-server +0 -0
- package/bin/version.d.ts +0 -1
- package/bin/version.js +0 -1
- package/esm/adb/client.d.ts +0 -41
- package/esm/adb/client.d.ts.map +0 -1
- package/esm/adb/client.js +0 -224
- package/esm/adb/client.js.map +0 -1
- package/esm/adb/connection.d.ts +0 -49
- package/esm/adb/connection.d.ts.map +0 -1
- package/esm/adb/connection.js +0 -122
- package/esm/adb/connection.js.map +0 -1
- package/esm/adb/index.d.ts +0 -4
- package/esm/adb/index.d.ts.map +0 -1
- package/esm/adb/index.js +0 -4
- package/esm/adb/index.js.map +0 -1
- package/esm/adb/options/1_16.d.ts +0 -8
- package/esm/adb/options/1_16.d.ts.map +0 -1
- package/esm/adb/options/1_16.js +0 -20
- package/esm/adb/options/1_16.js.map +0 -1
- package/esm/adb/options/1_22.d.ts +0 -8
- package/esm/adb/options/1_22.d.ts.map +0 -1
- package/esm/adb/options/1_22.js +0 -17
- package/esm/adb/options/1_22.js.map +0 -1
- package/esm/adb/options/1_26.d.ts +0 -9
- package/esm/adb/options/1_26.d.ts.map +0 -1
- package/esm/adb/options/1_26.js +0 -11
- package/esm/adb/options/1_26.js.map +0 -1
- package/esm/adb/options/2_0.d.ts +0 -8
- package/esm/adb/options/2_0.d.ts.map +0 -1
- package/esm/adb/options/2_0.js +0 -13
- package/esm/adb/options/2_0.js.map +0 -1
- package/esm/adb/options/index.d.ts +0 -4
- package/esm/adb/options/index.d.ts.map +0 -1
- package/esm/adb/options/index.js +0 -4
- package/esm/adb/options/index.js.map +0 -1
- package/esm/adb/options/types.d.ts +0 -24
- package/esm/adb/options/types.d.ts.map +0 -1
- package/esm/adb/options/types.js +0 -37
- package/esm/adb/options/types.js.map +0 -1
- package/esm/codec.d.ts +0 -34
- package/esm/codec.d.ts.map +0 -1
- package/esm/codec.js +0 -37
- package/esm/codec.js.map +0 -1
- package/esm/control/simple.d.ts +0 -5
- package/esm/control/simple.d.ts.map +0 -1
- package/esm/control/simple.js.map +0 -1
- package/esm/decoder.d.ts +0 -2
- package/esm/decoder.d.ts.map +0 -1
- package/esm/decoder.js +0 -2
- package/esm/decoder.js.map +0 -1
- package/esm/options/1.17.d.ts +0 -3
- package/esm/options/1.17.d.ts.map +0 -1
- package/esm/options/1.17.js +0 -2
- package/esm/options/1.17.js.map +0 -1
- package/esm/options/1_16/h264-configuration.d.ts +0 -49
- package/esm/options/1_16/h264-configuration.d.ts.map +0 -1
- package/esm/options/1_16/h264-configuration.js +0 -414
- package/esm/options/1_16/h264-configuration.js.map +0 -1
- package/esm/options/1_16/sps.d.ts +0 -22
- package/esm/options/1_16/sps.d.ts.map +0 -1
- package/esm/options/1_16/sps.js +0 -263
- package/esm/options/1_16/sps.js.map +0 -1
- package/esm/options/1_26.d.ts +0 -57
- package/esm/options/1_26.d.ts.map +0 -1
- package/esm/options/1_26.js +0 -67
- package/esm/options/1_26.js.map +0 -1
- package/esm/options/2.d.ts +0 -57
- package/esm/options/2.d.ts.map +0 -1
- package/esm/options/2.js +0 -67
- package/esm/options/2.js.map +0 -1
- package/scripts/fetch-server.cjs +0 -38
- package/src/adb/client.ts +0 -329
- package/src/adb/connection.ts +0 -209
- package/src/adb/index.ts +0 -3
- package/src/adb/options/1_16.ts +0 -32
- package/src/adb/options/1_22.ts +0 -26
- package/src/adb/options/index.ts +0 -3
- package/src/adb/options/types.ts +0 -75
- package/src/codec.ts +0 -35
- package/src/options/1_16/h264-configuration.ts +0 -485
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import Struct, { placeholder } from "@yume-chan/struct";
|
|
2
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
3
2
|
export var AndroidKeyEventAction;
|
|
4
3
|
(function (AndroidKeyEventAction) {
|
|
5
4
|
AndroidKeyEventAction[AndroidKeyEventAction["Down"] = 0] = "Down";
|
|
6
5
|
AndroidKeyEventAction[AndroidKeyEventAction["Up"] = 1] = "Up";
|
|
7
|
-
})(AndroidKeyEventAction
|
|
6
|
+
})(AndroidKeyEventAction || (AndroidKeyEventAction = {}));
|
|
8
7
|
// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/KeyEvent.java;l=993;drc=95c1165bb895dd844e1793460710f7163dd330a3
|
|
9
8
|
export var AndroidKeyEventMeta;
|
|
10
9
|
(function (AndroidKeyEventMeta) {
|
|
@@ -23,7 +22,7 @@ export var AndroidKeyEventMeta;
|
|
|
23
22
|
AndroidKeyEventMeta[AndroidKeyEventMeta["CapsLockOn"] = 1048576] = "CapsLockOn";
|
|
24
23
|
AndroidKeyEventMeta[AndroidKeyEventMeta["NumLockOn"] = 2097152] = "NumLockOn";
|
|
25
24
|
AndroidKeyEventMeta[AndroidKeyEventMeta["ScrollLockOn"] = 4194304] = "ScrollLockOn";
|
|
26
|
-
})(AndroidKeyEventMeta
|
|
25
|
+
})(AndroidKeyEventMeta || (AndroidKeyEventMeta = {}));
|
|
27
26
|
// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/KeyEvent.java;l=97;drc=95c1165bb895dd844e1793460710f7163dd330a3
|
|
28
27
|
// Most names follow Web API `KeyboardEvent.code`,
|
|
29
28
|
// Android-only (not exist in HID keyboard standard) keys are prefixed by `Android`.
|
|
@@ -190,9 +189,9 @@ export var AndroidKeyCode;
|
|
|
190
189
|
AndroidKeyCode[AndroidKeyCode["AndroidCut"] = 277] = "AndroidCut";
|
|
191
190
|
AndroidKeyCode[AndroidKeyCode["AndroidCopy"] = 278] = "AndroidCopy";
|
|
192
191
|
AndroidKeyCode[AndroidKeyCode["AndroidPaste"] = 279] = "AndroidPaste";
|
|
193
|
-
})(AndroidKeyCode
|
|
192
|
+
})(AndroidKeyCode || (AndroidKeyCode = {}));
|
|
194
193
|
export const ScrcpyInjectKeyCodeControlMessage = new Struct()
|
|
195
|
-
.uint8("type"
|
|
194
|
+
.uint8("type")
|
|
196
195
|
.uint8("action", placeholder())
|
|
197
196
|
.uint32("keyCode")
|
|
198
197
|
.uint32("repeat")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-keycode.js","sourceRoot":"","sources":["../../src/control/inject-keycode.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExD,
|
|
1
|
+
{"version":3,"file":"inject-keycode.js","sourceRoot":"","sources":["../../src/control/inject-keycode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import Struct from "@yume-chan/struct";
|
|
2
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
3
2
|
export declare const ScrcpyInjectTextControlMessage: Struct<{
|
|
4
|
-
type:
|
|
3
|
+
type: number;
|
|
5
4
|
length: number;
|
|
6
5
|
text: string;
|
|
7
6
|
}, "length", Record<never, never>, undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-text.d.ts","sourceRoot":"","sources":["../../src/control/inject-text.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,
|
|
1
|
+
{"version":3,"file":"inject-text.d.ts","sourceRoot":"","sources":["../../src/control/inject-text.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,eAAO,MAAM,8BAA8B;;;;6CAGG,CAAC;AAE/C,MAAM,MAAM,8BAA8B,GACtC,CAAC,OAAO,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import Struct from "@yume-chan/struct";
|
|
2
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
3
2
|
export const ScrcpyInjectTextControlMessage = new Struct()
|
|
4
|
-
.uint8("type"
|
|
3
|
+
.uint8("type")
|
|
5
4
|
.uint32("length")
|
|
6
5
|
.string("text", { lengthField: "length" });
|
|
7
6
|
//# sourceMappingURL=inject-text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-text.js","sourceRoot":"","sources":["../../src/control/inject-text.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,
|
|
1
|
+
{"version":3,"file":"inject-text.js","sourceRoot":"","sources":["../../src/control/inject-text.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,MAAM,EAAE;KACrD,KAAK,CAAC,MAAM,CAAC;KACb,MAAM,CAAC,QAAQ,CAAC;KAChB,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
1
|
+
import type { ScrcpyInjectTouchControlMessage2_0 } from "../options/index.js";
|
|
3
2
|
export declare enum AndroidMotionEventAction {
|
|
4
3
|
Down = 0,
|
|
5
4
|
Up = 1,
|
|
@@ -15,24 +14,20 @@ export declare enum AndroidMotionEventAction {
|
|
|
15
14
|
ButtonPress = 11,
|
|
16
15
|
ButtonRelease = 12
|
|
17
16
|
}
|
|
17
|
+
export declare enum AndroidMotionEventButton {
|
|
18
|
+
Primary = 1,
|
|
19
|
+
Secondary = 2,
|
|
20
|
+
Tertiary = 4,
|
|
21
|
+
Back = 8,
|
|
22
|
+
Forward = 16,
|
|
23
|
+
StylusPrimary = 32,
|
|
24
|
+
StylusSecondary = 64
|
|
25
|
+
}
|
|
18
26
|
export declare namespace ScrcpyPointerId {
|
|
19
|
-
const Mouse
|
|
20
|
-
const Finger
|
|
21
|
-
const VirtualMouse
|
|
22
|
-
const VirtualFinger
|
|
27
|
+
const Mouse = -1n;
|
|
28
|
+
const Finger = -2n;
|
|
29
|
+
const VirtualMouse = -3n;
|
|
30
|
+
const VirtualFinger = -4n;
|
|
23
31
|
}
|
|
24
|
-
export
|
|
25
|
-
export declare const ScrcpyFloatToUint16NumberType: NumberFieldType;
|
|
26
|
-
export declare const ScrcpyInjectTouchControlMessage: Struct<{
|
|
27
|
-
type: ScrcpyControlMessageType.InjectTouch;
|
|
28
|
-
action: AndroidMotionEventAction;
|
|
29
|
-
pointerId: bigint;
|
|
30
|
-
pointerX: number;
|
|
31
|
-
pointerY: number;
|
|
32
|
-
screenWidth: number;
|
|
33
|
-
screenHeight: number;
|
|
34
|
-
pressure: number;
|
|
35
|
-
buttons: number;
|
|
36
|
-
}, never, Record<never, never>, undefined>;
|
|
37
|
-
export type ScrcpyInjectTouchControlMessage = (typeof ScrcpyInjectTouchControlMessage)["TInit"];
|
|
32
|
+
export type ScrcpyInjectTouchControlMessage = ScrcpyInjectTouchControlMessage2_0;
|
|
38
33
|
//# sourceMappingURL=inject-touch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-touch.d.ts","sourceRoot":"","sources":["../../src/control/inject-touch.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"inject-touch.d.ts","sourceRoot":"","sources":["../../src/control/inject-touch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,qBAAqB,CAAC;AAG9E,oBAAY,wBAAwB;IAChC,IAAI,IAAA;IACJ,EAAE,IAAA;IACF,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,SAAS,IAAA;IACT,MAAM,IAAA;IACN,UAAU,IAAA;IACV,SAAS,KAAA;IACT,WAAW,KAAA;IACX,aAAa,KAAA;CAChB;AAED,oBAAY,wBAAwB;IAChC,OAAO,IAAO;IACd,SAAS,IAAO;IAChB,QAAQ,IAAO;IACf,IAAI,IAAO;IACX,OAAO,KAAO;IACd,aAAa,KAAO;IACpB,eAAe,KAAO;CACzB;AAGD,yBAAiB,eAAe,CAAC;IACtB,MAAM,KAAK,MAAM,CAAC;IAClB,MAAM,MAAM,MAAM,CAAC;IACnB,MAAM,YAAY,MAAM,CAAC;IACzB,MAAM,aAAa,MAAM,CAAC;CACpC;AAED,MAAM,MAAM,+BAA+B,GACvC,kCAAkC,CAAC"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import Struct, { NumberFieldDefinition, NumberFieldType, placeholder, } from "@yume-chan/struct";
|
|
2
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
3
1
|
// https://developer.android.com/reference/android/view/MotionEvent#constants_1
|
|
4
2
|
export var AndroidMotionEventAction;
|
|
5
3
|
(function (AndroidMotionEventAction) {
|
|
@@ -16,48 +14,23 @@ export var AndroidMotionEventAction;
|
|
|
16
14
|
AndroidMotionEventAction[AndroidMotionEventAction["HoverExit"] = 10] = "HoverExit";
|
|
17
15
|
AndroidMotionEventAction[AndroidMotionEventAction["ButtonPress"] = 11] = "ButtonPress";
|
|
18
16
|
AndroidMotionEventAction[AndroidMotionEventAction["ButtonRelease"] = 12] = "ButtonRelease";
|
|
19
|
-
})(AndroidMotionEventAction
|
|
17
|
+
})(AndroidMotionEventAction || (AndroidMotionEventAction = {}));
|
|
18
|
+
export var AndroidMotionEventButton;
|
|
19
|
+
(function (AndroidMotionEventButton) {
|
|
20
|
+
AndroidMotionEventButton[AndroidMotionEventButton["Primary"] = 1] = "Primary";
|
|
21
|
+
AndroidMotionEventButton[AndroidMotionEventButton["Secondary"] = 2] = "Secondary";
|
|
22
|
+
AndroidMotionEventButton[AndroidMotionEventButton["Tertiary"] = 4] = "Tertiary";
|
|
23
|
+
AndroidMotionEventButton[AndroidMotionEventButton["Back"] = 8] = "Back";
|
|
24
|
+
AndroidMotionEventButton[AndroidMotionEventButton["Forward"] = 16] = "Forward";
|
|
25
|
+
AndroidMotionEventButton[AndroidMotionEventButton["StylusPrimary"] = 32] = "StylusPrimary";
|
|
26
|
+
AndroidMotionEventButton[AndroidMotionEventButton["StylusSecondary"] = 64] = "StylusSecondary";
|
|
27
|
+
})(AndroidMotionEventButton || (AndroidMotionEventButton = {}));
|
|
20
28
|
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
21
29
|
export var ScrcpyPointerId;
|
|
22
30
|
(function (ScrcpyPointerId) {
|
|
23
|
-
ScrcpyPointerId.Mouse =
|
|
24
|
-
ScrcpyPointerId.Finger =
|
|
25
|
-
ScrcpyPointerId.VirtualMouse =
|
|
26
|
-
ScrcpyPointerId.VirtualFinger =
|
|
27
|
-
})(ScrcpyPointerId
|
|
28
|
-
export function clamp(value, min, max) {
|
|
29
|
-
if (value < min) {
|
|
30
|
-
return min;
|
|
31
|
-
}
|
|
32
|
-
if (value > max) {
|
|
33
|
-
return max;
|
|
34
|
-
}
|
|
35
|
-
return value;
|
|
36
|
-
}
|
|
37
|
-
export const ScrcpyFloatToUint16NumberType = {
|
|
38
|
-
size: 2,
|
|
39
|
-
signed: false,
|
|
40
|
-
deserialize(array, littleEndian) {
|
|
41
|
-
const value = NumberFieldType.Uint16.deserialize(array, littleEndian);
|
|
42
|
-
// https://github.com/Genymobile/scrcpy/blob/1f138aef41de651668043b32c4effc2d4adbfc44/server/src/main/java/com/genymobile/scrcpy/Binary.java#L22
|
|
43
|
-
return value === 0xffff ? 1 : value / 0x10000;
|
|
44
|
-
},
|
|
45
|
-
serialize(dataView, offset, value, littleEndian) {
|
|
46
|
-
// https://github.com/Genymobile/scrcpy/blob/1f138aef41de651668043b32c4effc2d4adbfc44/app/src/util/binary.h#L51
|
|
47
|
-
value = clamp(value, -1, 1);
|
|
48
|
-
value = value === 1 ? 0xffff : value * 0x10000;
|
|
49
|
-
NumberFieldType.Uint16.serialize(dataView, offset, value, littleEndian);
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
const ScrcpyFloatToUint16FieldDefinition = new NumberFieldDefinition(ScrcpyFloatToUint16NumberType);
|
|
53
|
-
export const ScrcpyInjectTouchControlMessage = new Struct()
|
|
54
|
-
.uint8("type", ScrcpyControlMessageType.InjectTouch)
|
|
55
|
-
.uint8("action", placeholder())
|
|
56
|
-
.uint64("pointerId")
|
|
57
|
-
.uint32("pointerX")
|
|
58
|
-
.uint32("pointerY")
|
|
59
|
-
.uint16("screenWidth")
|
|
60
|
-
.uint16("screenHeight")
|
|
61
|
-
.field("pressure", ScrcpyFloatToUint16FieldDefinition)
|
|
62
|
-
.uint32("buttons");
|
|
31
|
+
ScrcpyPointerId.Mouse = -1n;
|
|
32
|
+
ScrcpyPointerId.Finger = -2n;
|
|
33
|
+
ScrcpyPointerId.VirtualMouse = -3n;
|
|
34
|
+
ScrcpyPointerId.VirtualFinger = -4n;
|
|
35
|
+
})(ScrcpyPointerId || (ScrcpyPointerId = {}));
|
|
63
36
|
//# sourceMappingURL=inject-touch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-touch.js","sourceRoot":"","sources":["../../src/control/inject-touch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inject-touch.js","sourceRoot":"","sources":["../../src/control/inject-touch.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,CAAN,IAAY,wBAcX;AAdD,WAAY,wBAAwB;IAChC,uEAAI,CAAA;IACJ,mEAAE,CAAA;IACF,uEAAI,CAAA;IACJ,2EAAM,CAAA;IACN,6EAAO,CAAA;IACP,qFAAW,CAAA;IACX,iFAAS,CAAA;IACT,iFAAS,CAAA;IACT,2EAAM,CAAA;IACN,mFAAU,CAAA;IACV,kFAAS,CAAA;IACT,sFAAW,CAAA;IACX,0FAAa,CAAA;AACjB,CAAC,EAdW,wBAAwB,KAAxB,wBAAwB,QAcnC;AAED,MAAM,CAAN,IAAY,wBAQX;AARD,WAAY,wBAAwB;IAChC,6EAAc,CAAA;IACd,iFAAgB,CAAA;IAChB,+EAAe,CAAA;IACf,uEAAW,CAAA;IACX,8EAAc,CAAA;IACd,0FAAoB,CAAA;IACpB,8FAAsB,CAAA;AAC1B,CAAC,EARW,wBAAwB,KAAxB,wBAAwB,QAQnC;AAED,2DAA2D;AAC3D,MAAM,KAAW,eAAe,CAK/B;AALD,WAAiB,eAAe;IACf,qBAAK,GAAG,CAAC,EAAE,CAAC;IACZ,sBAAM,GAAG,CAAC,EAAE,CAAC;IACb,4BAAY,GAAG,CAAC,EAAE,CAAC;IACnB,6BAAa,GAAG,CAAC,EAAE,CAAC;AACrC,CAAC,EALgB,eAAe,KAAf,eAAe,QAK/B"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare const ScrcpyRotateDeviceControlMessage: Struct<{
|
|
4
|
-
type: ScrcpyControlMessageType.RotateDevice;
|
|
1
|
+
export declare const ScrcpyRotateDeviceControlMessage: import("@yume-chan/struct").default<{
|
|
2
|
+
type: number;
|
|
5
3
|
}, never, Record<never, never>, undefined>;
|
|
6
4
|
export type ScrcpyRotateDeviceControlMessage = (typeof ScrcpyRotateDeviceControlMessage)["TInit"];
|
|
7
5
|
//# sourceMappingURL=rotate-device.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotate-device.d.ts","sourceRoot":"","sources":["../../src/control/rotate-device.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rotate-device.d.ts","sourceRoot":"","sources":["../../src/control/rotate-device.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gCAAgC;;0CAAsB,CAAC;AAEpE,MAAM,MAAM,gCAAgC,GACxC,CAAC,OAAO,gCAAgC,CAAC,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export const ScrcpyRotateDeviceControlMessage = new Struct().uint8("type", ScrcpyControlMessageType.RotateDevice);
|
|
1
|
+
import { BasicControlMessage } from "./basic.js";
|
|
2
|
+
export const ScrcpyRotateDeviceControlMessage = BasicControlMessage;
|
|
4
3
|
//# sourceMappingURL=rotate-device.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotate-device.js","sourceRoot":"","sources":["../../src/control/rotate-device.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"rotate-device.js","sourceRoot":"","sources":["../../src/control/rotate-device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,CAAC,MAAM,gCAAgC,GAAG,mBAAmB,CAAC"}
|
|
@@ -1,36 +1,24 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { ScrcpyOptions, ScrcpyOptionsInit1_16 } from "../options/index.js";
|
|
1
|
+
import type { ScrcpyOptions } from "../options/index.js";
|
|
3
2
|
import type { AndroidKeyEventAction } from "./inject-keycode.js";
|
|
4
3
|
import { ScrcpyInjectKeyCodeControlMessage } from "./inject-keycode.js";
|
|
5
4
|
import type { ScrcpyInjectScrollControlMessage } from "./inject-scroll.js";
|
|
6
|
-
import { ScrcpyInjectTouchControlMessage } from "./inject-touch.js";
|
|
5
|
+
import type { ScrcpyInjectTouchControlMessage } from "./inject-touch.js";
|
|
7
6
|
import type { AndroidScreenPowerMode } from "./set-screen-power-mode.js";
|
|
8
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
9
7
|
export declare class ScrcpyControlMessageSerializer {
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
private scrollController;
|
|
15
|
-
constructor(stream: WritableStream<Consumable<Uint8Array>>, options: ScrcpyOptions<ScrcpyOptionsInit1_16>);
|
|
16
|
-
getActualMessageType(type: ScrcpyControlMessageType): number;
|
|
17
|
-
addMessageType<T extends {
|
|
18
|
-
type: ScrcpyControlMessageType;
|
|
19
|
-
}>(message: Omit<T, "type">, type: T["type"]): T;
|
|
20
|
-
private write;
|
|
21
|
-
injectKeyCode(message: Omit<ScrcpyInjectKeyCodeControlMessage, "type">): Promise<void>;
|
|
22
|
-
injectText(text: string): Promise<void>;
|
|
8
|
+
#private;
|
|
9
|
+
constructor(options: ScrcpyOptions<object>);
|
|
10
|
+
injectKeyCode(message: Omit<ScrcpyInjectKeyCodeControlMessage, "type">): Uint8Array;
|
|
11
|
+
injectText(text: string): Uint8Array;
|
|
23
12
|
/**
|
|
24
13
|
* `pressure` is a float value between 0 and 1.
|
|
25
14
|
*/
|
|
26
|
-
injectTouch(message: Omit<ScrcpyInjectTouchControlMessage, "type">):
|
|
15
|
+
injectTouch(message: Omit<ScrcpyInjectTouchControlMessage, "type">): Uint8Array;
|
|
27
16
|
/**
|
|
28
17
|
* `scrollX` and `scrollY` are float values between 0 and 1.
|
|
29
18
|
*/
|
|
30
|
-
injectScroll(message: Omit<ScrcpyInjectScrollControlMessage, "type">):
|
|
31
|
-
backOrScreenOn(action: AndroidKeyEventAction):
|
|
32
|
-
setScreenPowerMode(mode: AndroidScreenPowerMode):
|
|
33
|
-
rotateDevice():
|
|
34
|
-
close(): Promise<void>;
|
|
19
|
+
injectScroll(message: Omit<ScrcpyInjectScrollControlMessage, "type">): Uint8Array | undefined;
|
|
20
|
+
backOrScreenOn(action: AndroidKeyEventAction): Uint8Array | undefined;
|
|
21
|
+
setScreenPowerMode(mode: AndroidScreenPowerMode): Uint8Array;
|
|
22
|
+
rotateDevice(): Uint8Array;
|
|
35
23
|
}
|
|
36
24
|
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/control/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/control/serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,aAAa,EAEhB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAOzE,qBAAa,8BAA8B;;gBAK3B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;IAM1C,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,iCAAiC,EAAE,MAAM,CAAC;IAStE,UAAU,CAAC,IAAI,EAAE,MAAM;IAOvB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC;IASlE;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,gCAAgC,EAAE,MAAM,CAAC;IASpE,cAAc,CAAC,MAAM,EAAE,qBAAqB;IAO5C,kBAAkB,CAAC,IAAI,EAAE,sBAAsB;IAS/C,YAAY;CAKf"}
|
|
@@ -1,83 +1,54 @@
|
|
|
1
|
-
import { ConsumableWritableStream } from "@yume-chan/stream-extra";
|
|
2
1
|
import { ScrcpyInjectKeyCodeControlMessage } from "./inject-keycode.js";
|
|
3
2
|
import { ScrcpyInjectTextControlMessage } from "./inject-text.js";
|
|
4
|
-
import { ScrcpyInjectTouchControlMessage } from "./inject-touch.js";
|
|
5
3
|
import { ScrcpyRotateDeviceControlMessage } from "./rotate-device.js";
|
|
6
4
|
import { ScrcpySetScreenPowerModeControlMessage } from "./set-screen-power-mode.js";
|
|
7
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
5
|
+
import { ScrcpyControlMessageType, ScrcpyControlMessageTypeValue, } from "./type.js";
|
|
8
6
|
export class ScrcpyControlMessageSerializer {
|
|
9
|
-
options;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this
|
|
16
|
-
this.options = options;
|
|
17
|
-
this.types = options.getControlMessageTypes();
|
|
18
|
-
this.scrollController = options.getScrollController();
|
|
19
|
-
}
|
|
20
|
-
getActualMessageType(type) {
|
|
21
|
-
const value = this.types.indexOf(type);
|
|
22
|
-
if (value === -1) {
|
|
23
|
-
throw new Error("Not supported");
|
|
24
|
-
}
|
|
25
|
-
return value;
|
|
26
|
-
}
|
|
27
|
-
addMessageType(message, type) {
|
|
28
|
-
message.type = this.getActualMessageType(type);
|
|
29
|
-
return message;
|
|
30
|
-
}
|
|
31
|
-
async write(data) {
|
|
32
|
-
await ConsumableWritableStream.write(this.writer, data);
|
|
7
|
+
#options;
|
|
8
|
+
#typeValues;
|
|
9
|
+
#scrollController;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.#options = options;
|
|
12
|
+
this.#typeValues = new ScrcpyControlMessageTypeValue(options);
|
|
13
|
+
this.#scrollController = options.createScrollController();
|
|
33
14
|
}
|
|
34
15
|
injectKeyCode(message) {
|
|
35
|
-
return
|
|
16
|
+
return ScrcpyInjectKeyCodeControlMessage.serialize(this.#typeValues.fillMessageType(message, ScrcpyControlMessageType.InjectKeyCode));
|
|
36
17
|
}
|
|
37
18
|
injectText(text) {
|
|
38
|
-
return
|
|
19
|
+
return ScrcpyInjectTextControlMessage.serialize({
|
|
39
20
|
text,
|
|
40
|
-
type: this.
|
|
41
|
-
})
|
|
21
|
+
type: this.#typeValues.get(ScrcpyControlMessageType.InjectText),
|
|
22
|
+
});
|
|
42
23
|
}
|
|
43
24
|
/**
|
|
44
25
|
* `pressure` is a float value between 0 and 1.
|
|
45
26
|
*/
|
|
46
27
|
injectTouch(message) {
|
|
47
|
-
return this.
|
|
28
|
+
return this.#options.serializeInjectTouchControlMessage(this.#typeValues.fillMessageType(message, ScrcpyControlMessageType.InjectTouch));
|
|
48
29
|
}
|
|
49
30
|
/**
|
|
50
31
|
* `scrollX` and `scrollY` are float values between 0 and 1.
|
|
51
32
|
*/
|
|
52
33
|
injectScroll(message) {
|
|
53
|
-
|
|
54
|
-
if (!data) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
return this.write(data);
|
|
34
|
+
return this.#scrollController.serializeScrollMessage(this.#typeValues.fillMessageType(message, ScrcpyControlMessageType.InjectScroll));
|
|
58
35
|
}
|
|
59
|
-
|
|
60
|
-
|
|
36
|
+
backOrScreenOn(action) {
|
|
37
|
+
return this.#options.serializeBackOrScreenOnControlMessage({
|
|
61
38
|
action,
|
|
62
|
-
type: this.
|
|
39
|
+
type: this.#typeValues.get(ScrcpyControlMessageType.BackOrScreenOn),
|
|
63
40
|
});
|
|
64
|
-
if (buffer) {
|
|
65
|
-
return await this.write(buffer);
|
|
66
|
-
}
|
|
67
41
|
}
|
|
68
42
|
setScreenPowerMode(mode) {
|
|
69
|
-
return
|
|
43
|
+
return ScrcpySetScreenPowerModeControlMessage.serialize({
|
|
70
44
|
mode,
|
|
71
|
-
type: this.
|
|
72
|
-
})
|
|
45
|
+
type: this.#typeValues.get(ScrcpyControlMessageType.SetScreenPowerMode),
|
|
46
|
+
});
|
|
73
47
|
}
|
|
74
48
|
rotateDevice() {
|
|
75
|
-
return
|
|
76
|
-
type: this.
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
|
-
close() {
|
|
80
|
-
return this.writer.close();
|
|
49
|
+
return ScrcpyRotateDeviceControlMessage.serialize({
|
|
50
|
+
type: this.#typeValues.get(ScrcpyControlMessageType.RotateDevice),
|
|
51
|
+
});
|
|
81
52
|
}
|
|
82
53
|
}
|
|
83
54
|
//# sourceMappingURL=serializer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/control/serializer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/control/serializer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAE,sCAAsC,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EACH,wBAAwB,EACxB,6BAA6B,GAChC,MAAM,WAAW,CAAC;AAEnB,MAAM,OAAO,8BAA8B;IACvC,QAAQ,CAAwB;IAChC,WAAW,CAAgC;IAC3C,iBAAiB,CAAyB;IAE1C,YAAY,OAA8B;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAC9D,CAAC;IAED,aAAa,CAAC,OAAwD;QAClE,OAAO,iCAAiC,CAAC,SAAS,CAC9C,IAAI,CAAC,WAAW,CAAC,eAAe,CAC5B,OAAO,EACP,wBAAwB,CAAC,aAAa,CACzC,CACJ,CAAC;IACN,CAAC;IAED,UAAU,CAAC,IAAY;QACnB,OAAO,8BAA8B,CAAC,SAAS,CAAC;YAC5C,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,wBAAwB,CAAC,UAAU,CAAC;SAClE,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAsD;QAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CACnD,IAAI,CAAC,WAAW,CAAC,eAAe,CAC5B,OAAO,EACP,wBAAwB,CAAC,WAAW,CACvC,CACJ,CAAC;IACN,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAuD;QAChE,OAAO,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAChD,IAAI,CAAC,WAAW,CAAC,eAAe,CAC5B,OAAO,EACP,wBAAwB,CAAC,YAAY,CACxC,CACJ,CAAC;IACN,CAAC;IAED,cAAc,CAAC,MAA6B;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACvD,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,wBAAwB,CAAC,cAAc,CAAC;SACtE,CAAC,CAAC;IACP,CAAC;IAED,kBAAkB,CAAC,IAA4B;QAC3C,OAAO,sCAAsC,CAAC,SAAS,CAAC;YACpD,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CACtB,wBAAwB,CAAC,kBAAkB,CAC9C;SACJ,CAAC,CAAC;IACP,CAAC;IAED,YAAY;QACR,OAAO,gCAAgC,CAAC,SAAS,CAAC;YAC9C,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,wBAAwB,CAAC,YAAY,CAAC;SACpE,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import Struct from "@yume-chan/struct";
|
|
2
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
3
2
|
export declare enum AndroidScreenPowerMode {
|
|
4
3
|
Off = 0,
|
|
5
4
|
Normal = 2
|
|
6
5
|
}
|
|
7
6
|
export declare const ScrcpySetScreenPowerModeControlMessage: Struct<{
|
|
8
|
-
type:
|
|
7
|
+
type: number;
|
|
9
8
|
mode: AndroidScreenPowerMode;
|
|
10
9
|
}, never, Record<never, never>, undefined>;
|
|
11
10
|
export type ScrcpySetScreenPowerModeControlMessage = (typeof ScrcpySetScreenPowerModeControlMessage)["TInit"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-screen-power-mode.d.ts","sourceRoot":"","sources":["../../src/control/set-screen-power-mode.ts"],"names":[],"mappings":"AAAA,OAAO,MAAuB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"set-screen-power-mode.d.ts","sourceRoot":"","sources":["../../src/control/set-screen-power-mode.ts"],"names":[],"mappings":"AAAA,OAAO,MAAuB,MAAM,mBAAmB,CAAC;AAGxD,oBAAY,sBAAsB;IAC9B,GAAG,IAAI;IACP,MAAM,IAAI;CACb;AAED,eAAO,MAAM,sCAAsC;;;0CAEM,CAAC;AAE1D,MAAM,MAAM,sCAAsC,GAC9C,CAAC,OAAO,sCAAsC,CAAC,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import Struct, { placeholder } from "@yume-chan/struct";
|
|
2
|
-
import { ScrcpyControlMessageType } from "./type.js";
|
|
3
2
|
// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/SurfaceControl.java;l=659;drc=20303e05bf73796124ab70a279cf849b61b97905
|
|
4
3
|
export var AndroidScreenPowerMode;
|
|
5
4
|
(function (AndroidScreenPowerMode) {
|
|
6
5
|
AndroidScreenPowerMode[AndroidScreenPowerMode["Off"] = 0] = "Off";
|
|
7
6
|
AndroidScreenPowerMode[AndroidScreenPowerMode["Normal"] = 2] = "Normal";
|
|
8
|
-
})(AndroidScreenPowerMode
|
|
7
|
+
})(AndroidScreenPowerMode || (AndroidScreenPowerMode = {}));
|
|
9
8
|
export const ScrcpySetScreenPowerModeControlMessage = new Struct()
|
|
10
|
-
.uint8("type"
|
|
9
|
+
.uint8("type")
|
|
11
10
|
.uint8("mode", placeholder());
|
|
12
11
|
//# sourceMappingURL=set-screen-power-mode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-screen-power-mode.js","sourceRoot":"","sources":["../../src/control/set-screen-power-mode.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExD,
|
|
1
|
+
{"version":3,"file":"set-screen-power-mode.js","sourceRoot":"","sources":["../../src/control/set-screen-power-mode.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExD,8KAA8K;AAC9K,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAC9B,iEAAO,CAAA;IACP,uEAAU,CAAA;AACd,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAAG,IAAI,MAAM,EAAE;KAC7D,KAAK,CAAC,MAAM,CAAC;KACb,KAAK,CAAC,MAAM,EAAE,WAAW,EAA0B,CAAC,CAAC"}
|
package/esm/control/type.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ScrcpyOptions } from "../options/index.js";
|
|
1
2
|
export declare enum ScrcpyControlMessageType {
|
|
2
3
|
InjectKeyCode = 0,
|
|
3
4
|
InjectText = 1,
|
|
@@ -12,4 +13,17 @@ export declare enum ScrcpyControlMessageType {
|
|
|
12
13
|
SetScreenPowerMode = 10,
|
|
13
14
|
RotateDevice = 11
|
|
14
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Scrcpy control message types have different values between versions.
|
|
18
|
+
*
|
|
19
|
+
* This class provides a way to get the actual value for a given type.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ScrcpyControlMessageTypeValue {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(options: ScrcpyOptions<object>);
|
|
24
|
+
get(type: ScrcpyControlMessageType): number;
|
|
25
|
+
fillMessageType<T extends {
|
|
26
|
+
type: ScrcpyControlMessageType;
|
|
27
|
+
}>(message: Omit<T, "type">, type: T["type"]): T;
|
|
28
|
+
}
|
|
15
29
|
//# sourceMappingURL=type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/control/type.ts"],"names":[],"mappings":"AAGA,oBAAY,wBAAwB;IAChC,aAAa,IAAA;IACb,UAAU,IAAA;IACV,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,cAAc,IAAA;IACd,uBAAuB,IAAA;IACvB,kBAAkB,IAAA;IAClB,yBAAyB,IAAA;IACzB,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,kBAAkB,KAAA;IAClB,YAAY,KAAA;CACf"}
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/control/type.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,oBAAY,wBAAwB;IAChC,aAAa,IAAA;IACb,UAAU,IAAA;IACV,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,cAAc,IAAA;IACd,uBAAuB,IAAA;IACvB,kBAAkB,IAAA;IAClB,yBAAyB,IAAA;IACzB,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,kBAAkB,KAAA;IAClB,YAAY,KAAA;CACf;AAED;;;;GAIG;AACH,qBAAa,6BAA6B;;gBAG1B,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;IAI1C,GAAG,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM;IAQ3C,eAAe,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,wBAAwB,CAAA;KAAE,EACxD,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,EACxB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAChB,CAAC;CAIP"}
|
package/esm/control/type.js
CHANGED
|
@@ -15,5 +15,27 @@ export var ScrcpyControlMessageType;
|
|
|
15
15
|
ScrcpyControlMessageType[ScrcpyControlMessageType["SetClipboard"] = 9] = "SetClipboard";
|
|
16
16
|
ScrcpyControlMessageType[ScrcpyControlMessageType["SetScreenPowerMode"] = 10] = "SetScreenPowerMode";
|
|
17
17
|
ScrcpyControlMessageType[ScrcpyControlMessageType["RotateDevice"] = 11] = "RotateDevice";
|
|
18
|
-
})(ScrcpyControlMessageType
|
|
18
|
+
})(ScrcpyControlMessageType || (ScrcpyControlMessageType = {}));
|
|
19
|
+
/**
|
|
20
|
+
* Scrcpy control message types have different values between versions.
|
|
21
|
+
*
|
|
22
|
+
* This class provides a way to get the actual value for a given type.
|
|
23
|
+
*/
|
|
24
|
+
export class ScrcpyControlMessageTypeValue {
|
|
25
|
+
#types;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.#types = options.controlMessageTypes;
|
|
28
|
+
}
|
|
29
|
+
get(type) {
|
|
30
|
+
const value = this.#types.indexOf(type);
|
|
31
|
+
if (value === -1) {
|
|
32
|
+
throw new Error("Not supported");
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
fillMessageType(message, type) {
|
|
37
|
+
message.type = this.get(type);
|
|
38
|
+
return message;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
19
41
|
//# sourceMappingURL=type.js.map
|
package/esm/control/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/control/type.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,6IAA6I;
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/control/type.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,6IAA6I;AAI7I,sFAAsF;AACtF,MAAM,CAAN,IAAY,wBAaX;AAbD,WAAY,wBAAwB;IAChC,yFAAa,CAAA;IACb,mFAAU,CAAA;IACV,qFAAW,CAAA;IACX,uFAAY,CAAA;IACZ,2FAAc,CAAA;IACd,6GAAuB,CAAA;IACvB,mGAAkB,CAAA;IAClB,iHAAyB,CAAA;IACzB,uFAAY,CAAA;IACZ,uFAAY,CAAA;IACZ,oGAAkB,CAAA;IAClB,wFAAY,CAAA;AAChB,CAAC,EAbW,wBAAwB,KAAxB,wBAAwB,QAanC;AAED;;;;GAIG;AACH,MAAM,OAAO,6BAA6B;IACtC,MAAM,CAAsC;IAE5C,YAAY,OAA8B;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAC9C,CAAC;IAED,GAAG,CAAC,IAA8B;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;SACpC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,eAAe,CACX,OAAwB,EACxB,IAAe;QAEd,OAAa,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,OAAY,CAAC;IACxB,CAAC;CACJ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Consumable, WritableStreamDefaultWriter } from "@yume-chan/stream-extra";
|
|
2
|
+
import type { ScrcpyOptions } from "../options/index.js";
|
|
3
|
+
import type { AndroidKeyEventAction, ScrcpyInjectKeyCodeControlMessage } from "./inject-keycode.js";
|
|
4
|
+
import type { ScrcpyInjectScrollControlMessage } from "./inject-scroll.js";
|
|
5
|
+
import type { ScrcpyInjectTouchControlMessage } from "./inject-touch.js";
|
|
6
|
+
import type { AndroidScreenPowerMode } from "./set-screen-power-mode.js";
|
|
7
|
+
export declare class ScrcpyControlMessageWriter {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(writer: WritableStreamDefaultWriter<Consumable<Uint8Array>>, options: ScrcpyOptions<object>);
|
|
10
|
+
injectKeyCode(message: Omit<ScrcpyInjectKeyCodeControlMessage, "type">): Promise<void>;
|
|
11
|
+
injectText(text: string): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* `pressure` is a float value between 0 and 1.
|
|
14
|
+
*/
|
|
15
|
+
injectTouch(message: Omit<ScrcpyInjectTouchControlMessage, "type">): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* `scrollX` and `scrollY` are float values between 0 and 1.
|
|
18
|
+
*/
|
|
19
|
+
injectScroll(message: Omit<ScrcpyInjectScrollControlMessage, "type">): Promise<void>;
|
|
20
|
+
backOrScreenOn(action: AndroidKeyEventAction): Promise<void>;
|
|
21
|
+
setScreenPowerMode(mode: AndroidScreenPowerMode): Promise<void>;
|
|
22
|
+
rotateDevice(): Promise<void>;
|
|
23
|
+
releaseLock(): void;
|
|
24
|
+
close(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/control/writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,UAAU,EACV,2BAA2B,EAC9B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EACR,qBAAqB,EACrB,iCAAiC,EACpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEzE,qBAAa,0BAA0B;;gBAK/B,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAC3D,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC;IAU5B,aAAa,CACf,OAAO,EAAE,IAAI,CAAC,iCAAiC,EAAE,MAAM,CAAC;IAKtD,UAAU,CAAC,IAAI,EAAE,MAAM;IAI7B;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC;IAIxE;;OAEG;IACG,YAAY,CACd,OAAO,EAAE,IAAI,CAAC,gCAAgC,EAAE,MAAM,CAAC;IAQrD,cAAc,CAAC,MAAM,EAAE,qBAAqB;IAO5C,kBAAkB,CAAC,IAAI,EAAE,sBAAsB;IAI/C,YAAY;IAIlB,WAAW;IAIL,KAAK;CAGd"}
|