@yume-chan/scrcpy 0.0.17 → 0.0.19
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 +39 -3
- package/CHANGELOG.md +22 -4
- package/LICENSE +1 -1
- package/README.md +149 -82
- package/bin/scrcpy-server +0 -0
- package/bin/version.d.ts +1 -1
- package/bin/version.js +1 -1
- package/esm/adb/client.d.ts +40 -39
- package/esm/adb/client.d.ts.map +1 -1
- package/esm/adb/client.js +223 -217
- package/esm/adb/client.js.map +1 -1
- package/esm/adb/connection.d.ts +48 -37
- package/esm/adb/connection.d.ts.map +1 -1
- package/esm/adb/connection.js +121 -101
- package/esm/adb/connection.js.map +1 -1
- package/esm/adb/index.d.ts +3 -3
- package/esm/adb/index.js +3 -3
- package/esm/adb/options/1_16.d.ts +7 -7
- package/esm/adb/options/1_16.d.ts.map +1 -1
- package/esm/adb/options/1_16.js +19 -19
- package/esm/adb/options/1_16.js.map +1 -1
- package/esm/adb/options/1_22.d.ts +7 -7
- package/esm/adb/options/1_22.d.ts.map +1 -1
- package/esm/adb/options/1_22.js +16 -16
- package/esm/adb/options/1_22.js.map +1 -1
- package/esm/adb/options/1_26.d.ts +9 -0
- package/esm/adb/options/1_26.d.ts.map +1 -0
- package/esm/adb/options/1_26.js +11 -0
- package/esm/adb/options/1_26.js.map +1 -0
- package/esm/adb/options/2_0.d.ts +8 -0
- package/esm/adb/options/2_0.d.ts.map +1 -0
- package/esm/adb/options/2_0.js +13 -0
- package/esm/adb/options/2_0.js.map +1 -0
- package/esm/adb/options/index.d.ts +3 -3
- package/esm/adb/options/index.js +3 -3
- package/esm/adb/options/types.d.ts +23 -22
- package/esm/adb/options/types.d.ts.map +1 -1
- package/esm/adb/options/types.js +36 -29
- package/esm/adb/options/types.js.map +1 -1
- package/esm/codec/av1.d.ts +33 -0
- package/esm/codec/av1.d.ts.map +1 -0
- package/esm/codec/av1.js +35 -0
- package/esm/codec/av1.js.map +1 -0
- package/esm/codec/h264.d.ts +98 -0
- package/esm/codec/h264.d.ts.map +1 -0
- package/esm/codec/h264.js +477 -0
- package/esm/codec/h264.js.map +1 -0
- package/esm/codec/h265.d.ts +36 -0
- package/esm/codec/h265.d.ts.map +1 -0
- package/esm/codec/h265.js +38 -0
- package/esm/codec/h265.js.map +1 -0
- package/esm/codec/index.d.ts +4 -0
- package/esm/codec/index.d.ts.map +1 -0
- package/esm/codec/index.js +4 -0
- package/esm/codec/index.js.map +1 -0
- package/esm/codec.d.ts +33 -33
- package/esm/codec.js +36 -36
- package/esm/control/back-or-screen-on.d.ts +3 -0
- package/esm/control/back-or-screen-on.d.ts.map +1 -0
- package/esm/control/back-or-screen-on.js +2 -0
- package/esm/control/back-or-screen-on.js.map +1 -0
- package/esm/control/basic.d.ts +5 -0
- package/esm/control/basic.d.ts.map +1 -0
- package/esm/control/basic.js +3 -0
- package/esm/control/basic.js.map +1 -0
- package/esm/control/hover-helper.d.ts +18 -0
- package/esm/control/hover-helper.d.ts.map +1 -0
- package/esm/control/hover-helper.js +44 -0
- package/esm/control/hover-helper.js.map +1 -0
- package/esm/control/index.d.ts +11 -7
- package/esm/control/index.d.ts.map +1 -1
- package/esm/control/index.js +11 -7
- package/esm/control/index.js.map +1 -1
- package/esm/control/inject-keycode.d.ts +194 -52
- package/esm/control/inject-keycode.d.ts.map +1 -1
- package/esm/control/inject-keycode.js +199 -53
- package/esm/control/inject-keycode.js.map +1 -1
- package/esm/control/inject-scroll.d.ts +3 -0
- package/esm/control/inject-scroll.d.ts.map +1 -0
- package/esm/control/inject-scroll.js +2 -0
- package/esm/control/inject-scroll.js.map +1 -0
- package/esm/control/inject-text.d.ts +8 -8
- package/esm/control/inject-text.d.ts.map +1 -1
- package/esm/control/inject-text.js +6 -6
- package/esm/control/inject-text.js.map +1 -1
- package/esm/control/inject-touch.d.ts +37 -29
- package/esm/control/inject-touch.d.ts.map +1 -1
- package/esm/control/inject-touch.js +62 -29
- package/esm/control/inject-touch.js.map +1 -1
- package/esm/control/rotate-device.d.ts +6 -6
- package/esm/control/rotate-device.d.ts.map +1 -1
- package/esm/control/rotate-device.js +3 -4
- package/esm/control/rotate-device.js.map +1 -1
- package/esm/control/serializer.d.ts +35 -22
- package/esm/control/serializer.d.ts.map +1 -1
- package/esm/control/serializer.js +82 -72
- package/esm/control/serializer.js.map +1 -1
- package/esm/control/set-clipboard.d.ts +3 -0
- package/esm/control/set-clipboard.d.ts.map +1 -0
- package/esm/control/set-clipboard.js +2 -0
- package/esm/control/set-clipboard.js.map +1 -0
- package/esm/control/set-screen-power-mode.d.ts +11 -11
- package/esm/control/set-screen-power-mode.d.ts.map +1 -1
- package/esm/control/set-screen-power-mode.js +11 -11
- package/esm/control/set-screen-power-mode.js.map +1 -1
- package/esm/control/simple.d.ts +5 -0
- package/esm/control/simple.d.ts.map +1 -0
- package/esm/control/simple.js +3 -0
- package/esm/control/simple.js.map +1 -0
- package/esm/control/type.d.ts +14 -14
- package/esm/control/type.js +18 -18
- package/esm/decoder.d.ts +2 -0
- package/esm/decoder.d.ts.map +1 -0
- package/esm/decoder.js +2 -0
- package/esm/decoder.js.map +1 -0
- package/esm/device-message/ack-clipboard.d.ts +9 -0
- package/esm/device-message/ack-clipboard.d.ts.map +1 -0
- package/esm/device-message/ack-clipboard.js +6 -0
- package/esm/device-message/ack-clipboard.js.map +1 -0
- package/esm/device-message/clipboard.d.ts +9 -9
- package/esm/device-message/clipboard.d.ts.map +1 -1
- package/esm/device-message/clipboard.js +6 -6
- package/esm/device-message/clipboard.js.map +1 -1
- package/esm/device-message/index.d.ts +4 -3
- package/esm/device-message/index.d.ts.map +1 -1
- package/esm/device-message/index.js +4 -3
- package/esm/device-message/index.js.map +1 -1
- package/esm/device-message/stream.d.ts +7 -6
- package/esm/device-message/stream.d.ts.map +1 -1
- package/esm/device-message/stream.js +19 -15
- package/esm/device-message/stream.js.map +1 -1
- package/esm/device-message/type.d.ts +4 -4
- package/esm/device-message/type.js +6 -6
- package/esm/index.d.ts +5 -5
- package/esm/index.js +5 -5
- package/esm/options/1.17.d.ts +3 -0
- package/esm/options/1.17.d.ts.map +1 -0
- package/esm/options/1.17.js +2 -0
- package/esm/options/1.17.js.map +1 -0
- package/esm/options/1_16/codec-options.d.ts +20 -18
- package/esm/options/1_16/codec-options.d.ts.map +1 -1
- package/esm/options/1_16/codec-options.js +25 -26
- package/esm/options/1_16/codec-options.js.map +1 -1
- package/esm/options/1_16/float-to-uint16.d.ts +5 -0
- package/esm/options/1_16/float-to-uint16.d.ts.map +1 -0
- package/esm/options/1_16/float-to-uint16.js +27 -0
- package/esm/options/1_16/float-to-uint16.js.map +1 -0
- package/esm/options/1_16/h264-configuration.d.ts +49 -0
- package/esm/options/1_16/h264-configuration.d.ts.map +1 -0
- package/esm/options/1_16/h264-configuration.js +414 -0
- package/esm/options/1_16/h264-configuration.js.map +1 -0
- package/esm/options/1_16/index.d.ts +4 -3
- package/esm/options/1_16/index.d.ts.map +1 -1
- package/esm/options/1_16/index.js +4 -3
- package/esm/options/1_16/index.js.map +1 -1
- package/esm/options/1_16/init.d.ts +66 -0
- package/esm/options/1_16/init.d.ts.map +1 -0
- package/esm/options/1_16/init.js +16 -0
- package/esm/options/1_16/init.js.map +1 -0
- package/esm/options/1_16/message.d.ts +32 -0
- package/esm/options/1_16/message.d.ts.map +1 -0
- package/esm/options/1_16/message.js +37 -0
- package/esm/options/1_16/message.js.map +1 -0
- package/esm/options/1_16/options.d.ts +102 -96
- package/esm/options/1_16/options.d.ts.map +1 -1
- package/esm/options/1_16/options.js +189 -187
- package/esm/options/1_16/options.js.map +1 -1
- package/esm/options/1_16/scroll.d.ts +28 -0
- package/esm/options/1_16/scroll.d.ts.map +1 -0
- package/esm/options/1_16/scroll.js +56 -0
- package/esm/options/1_16/scroll.js.map +1 -0
- package/esm/options/1_16/sps.d.ts +1 -1
- package/esm/options/1_16/sps.d.ts.map +1 -1
- package/esm/options/1_16/sps.js +25 -17
- package/esm/options/1_16/sps.js.map +1 -1
- package/esm/options/1_17.d.ts +32 -0
- package/esm/options/1_17.d.ts.map +1 -0
- package/esm/options/1_17.js +36 -0
- package/esm/options/1_17.js.map +1 -0
- package/esm/options/1_18.d.ts +21 -19
- package/esm/options/1_18.d.ts.map +1 -1
- package/esm/options/1_18.js +45 -45
- package/esm/options/1_18.js.map +1 -1
- package/esm/options/1_21.d.ts +22 -9
- package/esm/options/1_21.d.ts.map +1 -1
- package/esm/options/1_21.js +36 -25
- package/esm/options/1_21.js.map +1 -1
- package/esm/options/1_22/index.d.ts +3 -0
- package/esm/options/1_22/index.d.ts.map +1 -0
- package/esm/options/1_22/index.js +3 -0
- package/esm/options/1_22/index.js.map +1 -0
- package/esm/options/1_22/init.d.ts +17 -0
- package/esm/options/1_22/init.d.ts.map +1 -0
- package/esm/options/1_22/init.js +2 -0
- package/esm/options/1_22/init.js.map +1 -0
- package/esm/options/{1_22.d.ts → 1_22/options.d.ts} +30 -40
- package/esm/options/1_22/options.d.ts.map +1 -0
- package/esm/options/{1_22.js → 1_22/options.js} +26 -30
- package/esm/options/1_22/options.js.map +1 -0
- package/esm/options/1_22/scroll.d.ts +17 -0
- package/esm/options/1_22/scroll.d.ts.map +1 -0
- package/esm/options/1_22/scroll.js +15 -0
- package/esm/options/1_22/scroll.js.map +1 -0
- package/esm/options/1_23.d.ts +12 -11
- package/esm/options/1_23.d.ts.map +1 -1
- package/esm/options/1_23.js +34 -33
- package/esm/options/1_23.js.map +1 -1
- package/esm/options/1_24.d.ts +9 -8
- package/esm/options/1_24.d.ts.map +1 -1
- package/esm/options/1_24.js +12 -12
- package/esm/options/1_24.js.map +1 -1
- package/esm/options/1_25/index.d.ts +3 -0
- package/esm/options/1_25/index.d.ts.map +1 -0
- package/esm/options/1_25/index.js +3 -0
- package/esm/options/1_25/index.js.map +1 -0
- package/esm/options/1_25/options.d.ts +7 -0
- package/esm/options/1_25/options.d.ts.map +1 -0
- package/esm/options/1_25/options.js +8 -0
- package/esm/options/1_25/options.js.map +1 -0
- package/esm/options/1_25/scroll.d.ts +20 -0
- package/esm/options/1_25/scroll.d.ts.map +1 -0
- package/esm/options/1_25/scroll.js +33 -0
- package/esm/options/1_25/scroll.js.map +1 -0
- package/esm/options/1_26.d.ts +57 -0
- package/esm/options/1_26.d.ts.map +1 -0
- package/esm/options/1_26.js +67 -0
- package/esm/options/1_26.js.map +1 -0
- package/esm/options/2.d.ts +57 -0
- package/esm/options/2.d.ts.map +1 -0
- package/esm/options/2.js +67 -0
- package/esm/options/2.js.map +1 -0
- package/esm/options/2_0.d.ts +87 -0
- package/esm/options/2_0.d.ts.map +1 -0
- package/esm/options/2_0.js +175 -0
- package/esm/options/2_0.js.map +1 -0
- package/esm/options/codec.d.ts +52 -0
- package/esm/options/codec.d.ts.map +1 -0
- package/esm/options/codec.js +26 -0
- package/esm/options/codec.js.map +1 -0
- package/esm/options/index.d.ts +8 -7
- package/esm/options/index.d.ts.map +1 -1
- package/esm/options/index.js +8 -7
- package/esm/options/index.js.map +1 -1
- package/esm/options/latest.d.ts +12 -0
- package/esm/options/latest.d.ts.map +1 -0
- package/esm/options/latest.js +8 -0
- package/esm/options/latest.js.map +1 -0
- package/esm/options/types.d.ts +46 -44
- package/esm/options/types.d.ts.map +1 -1
- package/esm/options/types.js +17 -15
- package/esm/options/types.js.map +1 -1
- package/package.json +20 -12
- package/scripts/fetch-server.cjs +19 -9
- package/src/adb/client.ts +184 -147
- package/src/adb/connection.ts +95 -31
- package/src/adb/index.ts +3 -3
- package/src/adb/options/1_16.ts +15 -6
- package/src/adb/options/1_22.ts +12 -6
- package/src/adb/options/index.ts +3 -3
- package/src/adb/options/types.ts +34 -14
- package/src/control/back-or-screen-on.ts +4 -0
- package/src/control/hover-helper.ts +54 -0
- package/src/control/index.ts +11 -7
- package/src/control/inject-keycode.ts +203 -45
- package/src/control/inject-scroll.ts +4 -0
- package/src/control/inject-text.ts +7 -8
- package/src/control/inject-touch.ts +58 -14
- package/src/control/rotate-device.ts +7 -6
- package/src/control/serializer.ts +111 -43
- package/src/control/set-clipboard.ts +4 -0
- package/src/control/set-screen-power-mode.ts +7 -8
- package/src/device-message/ack-clipboard.ts +10 -0
- package/src/device-message/clipboard.ts +8 -8
- package/src/device-message/index.ts +4 -3
- package/src/device-message/stream.ts +17 -7
- package/src/index.ts +5 -5
- package/src/options/1_16/codec-options.ts +16 -11
- package/src/options/1_16/h264-configuration.ts +485 -0
- package/src/options/1_16/index.ts +4 -3
- package/src/options/1_16/options.ts +180 -130
- package/src/options/1_16/scroll.ts +74 -0
- package/src/options/1_18.ts +22 -12
- package/src/options/1_21.ts +30 -13
- package/src/options/1_22/index.ts +2 -0
- package/src/options/{1_22.ts → 1_22/options.ts} +9 -17
- package/src/options/1_22/scroll.ts +26 -0
- package/src/options/1_23.ts +30 -20
- package/src/options/1_24.ts +5 -3
- package/src/options/1_25/index.ts +2 -0
- package/src/options/1_25/options.ts +13 -0
- package/src/options/1_25/scroll.ts +49 -0
- package/src/options/index.ts +8 -7
- package/src/options/types.ts +36 -19
- package/tsconfig.build.json +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/decoder/index.d.ts +0 -28
- package/esm/decoder/index.d.ts.map +0 -1
- package/esm/decoder/index.js +0 -2
- package/esm/decoder/index.js.map +0 -1
- package/esm/decoder/tinyh264/index.d.ts +0 -20
- package/esm/decoder/tinyh264/index.d.ts.map +0 -1
- package/esm/decoder/tinyh264/index.js +0 -86
- package/esm/decoder/tinyh264/index.js.map +0 -1
- package/esm/decoder/tinyh264/worker.d.ts +0 -2
- package/esm/decoder/tinyh264/worker.d.ts.map +0 -1
- package/esm/decoder/tinyh264/worker.js +0 -3
- package/esm/decoder/tinyh264/worker.js.map +0 -1
- package/esm/decoder/tinyh264/wrapper.d.ts +0 -21
- package/esm/decoder/tinyh264/wrapper.d.ts.map +0 -1
- package/esm/decoder/tinyh264/wrapper.js +0 -74
- package/esm/decoder/tinyh264/wrapper.js.map +0 -1
- package/esm/decoder/types.d.ts +0 -2
- package/esm/decoder/types.d.ts.map +0 -1
- package/esm/decoder/types.js +0 -2
- package/esm/decoder/types.js.map +0 -1
- package/esm/decoder/web-codecs/index.d.ts +0 -22
- package/esm/decoder/web-codecs/index.d.ts.map +0 -1
- package/esm/decoder/web-codecs/index.js +0 -81
- package/esm/decoder/web-codecs/index.js.map +0 -1
- package/esm/options/1_22.d.ts.map +0 -1
- package/esm/options/1_22.js.map +0 -1
- package/src/options/1_16/sps.ts +0 -300
- package/tsconfig.test.tsbuildinfo +0 -1
|
@@ -1,86 +1,154 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
Consumable,
|
|
3
|
+
WritableStream,
|
|
4
|
+
WritableStreamDefaultWriter,
|
|
5
|
+
} from "@yume-chan/stream-extra";
|
|
6
|
+
import { ConsumableWritableStream } from "@yume-chan/stream-extra";
|
|
2
7
|
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import {
|
|
8
|
+
import type {
|
|
9
|
+
ScrcpyOptions,
|
|
10
|
+
ScrcpyOptionsInit1_16,
|
|
11
|
+
ScrcpyScrollController,
|
|
12
|
+
} from "../options/index.js";
|
|
13
|
+
|
|
14
|
+
import type { AndroidKeyEventAction } from "./inject-keycode.js";
|
|
15
|
+
import { ScrcpyInjectKeyCodeControlMessage } from "./inject-keycode.js";
|
|
16
|
+
import type { ScrcpyInjectScrollControlMessage } from "./inject-scroll.js";
|
|
17
|
+
import { ScrcpyInjectTextControlMessage } from "./inject-text.js";
|
|
18
|
+
import { ScrcpyInjectTouchControlMessage } from "./inject-touch.js";
|
|
19
|
+
import { ScrcpyRotateDeviceControlMessage } from "./rotate-device.js";
|
|
20
|
+
import type { AndroidScreenPowerMode } from "./set-screen-power-mode.js";
|
|
21
|
+
import { ScrcpySetScreenPowerModeControlMessage } from "./set-screen-power-mode.js";
|
|
22
|
+
import { ScrcpyControlMessageType } from "./type.js";
|
|
10
23
|
|
|
11
24
|
export class ScrcpyControlMessageSerializer {
|
|
12
|
-
private options: ScrcpyOptions<
|
|
25
|
+
private options: ScrcpyOptions<ScrcpyOptionsInit1_16>;
|
|
13
26
|
/** Control message type values for current version of server */
|
|
14
27
|
private types: ScrcpyControlMessageType[];
|
|
15
|
-
private writer: WritableStreamDefaultWriter<Uint8Array
|
|
28
|
+
private writer: WritableStreamDefaultWriter<Consumable<Uint8Array>>;
|
|
29
|
+
private scrollController: ScrcpyScrollController;
|
|
30
|
+
|
|
31
|
+
public constructor(
|
|
32
|
+
stream: WritableStream<Consumable<Uint8Array>>,
|
|
33
|
+
options: ScrcpyOptions<ScrcpyOptionsInit1_16>
|
|
34
|
+
) {
|
|
35
|
+
this.writer = stream.getWriter();
|
|
16
36
|
|
|
17
|
-
public constructor(stream: WritableStream<Uint8Array>, options: ScrcpyOptions<any>) {
|
|
18
37
|
this.options = options;
|
|
19
38
|
this.types = options.getControlMessageTypes();
|
|
20
|
-
this.
|
|
39
|
+
this.scrollController = options.getScrollController();
|
|
21
40
|
}
|
|
22
41
|
|
|
23
|
-
public
|
|
42
|
+
public getActualMessageType(type: ScrcpyControlMessageType): number {
|
|
24
43
|
const value = this.types.indexOf(type);
|
|
25
44
|
if (value === -1) {
|
|
26
|
-
throw new Error(
|
|
45
|
+
throw new Error("Not supported");
|
|
27
46
|
}
|
|
28
47
|
return value;
|
|
29
48
|
}
|
|
30
49
|
|
|
31
|
-
public
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
50
|
+
public addMessageType<T extends { type: ScrcpyControlMessageType }>(
|
|
51
|
+
message: Omit<T, "type">,
|
|
52
|
+
type: T["type"]
|
|
53
|
+
): T {
|
|
54
|
+
(message as T).type = this.getActualMessageType(type);
|
|
55
|
+
return message as T;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private async write(data: Uint8Array) {
|
|
59
|
+
await ConsumableWritableStream.write(this.writer, data);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public injectKeyCode(
|
|
63
|
+
message: Omit<ScrcpyInjectKeyCodeControlMessage, "type">
|
|
64
|
+
) {
|
|
65
|
+
return this.write(
|
|
66
|
+
ScrcpyInjectKeyCodeControlMessage.serialize(
|
|
67
|
+
this.addMessageType(
|
|
68
|
+
message,
|
|
69
|
+
ScrcpyControlMessageType.InjectKeyCode
|
|
70
|
+
)
|
|
71
|
+
)
|
|
72
|
+
);
|
|
36
73
|
}
|
|
37
74
|
|
|
38
75
|
public injectText(text: string) {
|
|
39
|
-
return this.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
76
|
+
return this.write(
|
|
77
|
+
ScrcpyInjectTextControlMessage.serialize({
|
|
78
|
+
text,
|
|
79
|
+
type: this.getActualMessageType(
|
|
80
|
+
ScrcpyControlMessageType.InjectText
|
|
81
|
+
),
|
|
82
|
+
})
|
|
83
|
+
);
|
|
43
84
|
}
|
|
44
85
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
86
|
+
/**
|
|
87
|
+
* `pressure` is a float value between 0 and 1.
|
|
88
|
+
*/
|
|
89
|
+
public injectTouch(message: Omit<ScrcpyInjectTouchControlMessage, "type">) {
|
|
90
|
+
return this.write(
|
|
91
|
+
ScrcpyInjectTouchControlMessage.serialize(
|
|
92
|
+
this.addMessageType(
|
|
93
|
+
message,
|
|
94
|
+
ScrcpyControlMessageType.InjectTouch
|
|
95
|
+
)
|
|
96
|
+
)
|
|
97
|
+
);
|
|
50
98
|
}
|
|
51
99
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
100
|
+
/**
|
|
101
|
+
* `scrollX` and `scrollY` are float values between 0 and 1.
|
|
102
|
+
*/
|
|
103
|
+
public injectScroll(
|
|
104
|
+
message: Omit<ScrcpyInjectScrollControlMessage, "type">
|
|
105
|
+
) {
|
|
106
|
+
const data = this.scrollController.serializeScrollMessage(
|
|
107
|
+
this.addMessageType(message, ScrcpyControlMessageType.InjectScroll)
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
if (!data) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return this.write(data);
|
|
57
115
|
}
|
|
58
116
|
|
|
59
117
|
public async backOrScreenOn(action: AndroidKeyEventAction) {
|
|
60
118
|
const buffer = this.options.serializeBackOrScreenOnControlMessage({
|
|
61
119
|
action,
|
|
62
|
-
type: this.
|
|
120
|
+
type: this.getActualMessageType(
|
|
121
|
+
ScrcpyControlMessageType.BackOrScreenOn
|
|
122
|
+
),
|
|
63
123
|
});
|
|
64
124
|
|
|
65
125
|
if (buffer) {
|
|
66
|
-
return await this.
|
|
126
|
+
return await this.write(buffer);
|
|
67
127
|
}
|
|
68
128
|
}
|
|
69
129
|
|
|
70
130
|
public setScreenPowerMode(mode: AndroidScreenPowerMode) {
|
|
71
|
-
return this.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
131
|
+
return this.write(
|
|
132
|
+
ScrcpySetScreenPowerModeControlMessage.serialize({
|
|
133
|
+
mode,
|
|
134
|
+
type: this.getActualMessageType(
|
|
135
|
+
ScrcpyControlMessageType.SetScreenPowerMode
|
|
136
|
+
),
|
|
137
|
+
})
|
|
138
|
+
);
|
|
75
139
|
}
|
|
76
140
|
|
|
77
141
|
public rotateDevice() {
|
|
78
|
-
return this.
|
|
79
|
-
|
|
80
|
-
|
|
142
|
+
return this.write(
|
|
143
|
+
ScrcpyRotateDeviceControlMessage.serialize({
|
|
144
|
+
type: this.getActualMessageType(
|
|
145
|
+
ScrcpyControlMessageType.RotateDevice
|
|
146
|
+
),
|
|
147
|
+
})
|
|
148
|
+
);
|
|
81
149
|
}
|
|
82
150
|
|
|
83
151
|
public close() {
|
|
84
152
|
return this.writer.close();
|
|
85
153
|
}
|
|
86
|
-
}
|
|
154
|
+
}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import Struct, { placeholder } from
|
|
1
|
+
import Struct, { placeholder } from "@yume-chan/struct";
|
|
2
2
|
|
|
3
|
-
import { ScrcpyControlMessageType } from
|
|
3
|
+
import { ScrcpyControlMessageType } from "./type.js";
|
|
4
4
|
|
|
5
5
|
// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/SurfaceControl.java;l=659;drc=20303e05bf73796124ab70a279cf849b61b97905
|
|
6
6
|
export enum AndroidScreenPowerMode {
|
|
7
7
|
Off = 0,
|
|
8
|
-
Normal = 2
|
|
8
|
+
Normal = 2,
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export const ScrcpySetScreenPowerModeControlMessage =
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
.uint8('mode', placeholder<AndroidScreenPowerMode>());
|
|
11
|
+
export const ScrcpySetScreenPowerModeControlMessage = new Struct()
|
|
12
|
+
.uint8("type", ScrcpyControlMessageType.SetScreenPowerMode as const)
|
|
13
|
+
.uint8("mode", placeholder<AndroidScreenPowerMode>());
|
|
15
14
|
|
|
16
15
|
export type ScrcpySetScreenPowerModeControlMessage =
|
|
17
|
-
typeof ScrcpySetScreenPowerModeControlMessage[
|
|
16
|
+
(typeof ScrcpySetScreenPowerModeControlMessage)["TInit"];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Struct from "@yume-chan/struct";
|
|
2
|
+
|
|
3
|
+
import { ScrcpyDeviceMessageType } from "./type.js";
|
|
4
|
+
|
|
5
|
+
export const ScrcpyAckClipboardDeviceMessage = new Struct()
|
|
6
|
+
.uint64("sequence")
|
|
7
|
+
.extra({ type: ScrcpyDeviceMessageType.AckClipboard as const });
|
|
8
|
+
|
|
9
|
+
export type ScrcpyAckClipboardDeviceMessage =
|
|
10
|
+
(typeof ScrcpyAckClipboardDeviceMessage)["TDeserializeResult"];
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import Struct from
|
|
2
|
-
import { ScrcpyDeviceMessageType } from './type.js';
|
|
1
|
+
import Struct from "@yume-chan/struct";
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import { ScrcpyDeviceMessageType } from "./type.js";
|
|
4
|
+
|
|
5
|
+
export const ScrcpyClipboardDeviceMessage = new Struct()
|
|
6
|
+
.uint32("length")
|
|
7
|
+
.string("content", { lengthField: "length" })
|
|
8
|
+
.extra({ type: ScrcpyDeviceMessageType.Clipboard as const });
|
|
9
9
|
|
|
10
10
|
export type ScrcpyClipboardDeviceMessage =
|
|
11
|
-
typeof ScrcpyClipboardDeviceMessage[
|
|
11
|
+
(typeof ScrcpyClipboardDeviceMessage)["TDeserializeResult"];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
1
|
+
export * from "./ack-clipboard.js";
|
|
2
|
+
export * from "./clipboard.js";
|
|
3
|
+
export * from "./stream.js";
|
|
4
|
+
export * from "./type.js";
|
|
@@ -1,19 +1,29 @@
|
|
|
1
|
-
import { BufferedTransformStream } from
|
|
2
|
-
|
|
1
|
+
import { BufferedTransformStream } from "@yume-chan/stream-extra";
|
|
2
|
+
|
|
3
|
+
import { ScrcpyAckClipboardDeviceMessage } from "./ack-clipboard.js";
|
|
4
|
+
import { ScrcpyClipboardDeviceMessage } from "./clipboard.js";
|
|
5
|
+
import { ScrcpyDeviceMessageType } from "./type.js";
|
|
3
6
|
|
|
4
7
|
export type ScrcpyDeviceMessage =
|
|
5
|
-
| ScrcpyClipboardDeviceMessage
|
|
8
|
+
| ScrcpyClipboardDeviceMessage
|
|
9
|
+
| ScrcpyAckClipboardDeviceMessage;
|
|
6
10
|
|
|
7
11
|
export class ScrcpyDeviceMessageDeserializeStream extends BufferedTransformStream<ScrcpyDeviceMessage> {
|
|
8
12
|
constructor() {
|
|
9
13
|
super(async (stream) => {
|
|
10
14
|
const type = await stream.read(1);
|
|
11
15
|
switch (type[0]) {
|
|
12
|
-
case
|
|
13
|
-
return await ScrcpyClipboardDeviceMessage.deserialize(
|
|
16
|
+
case ScrcpyDeviceMessageType.Clipboard:
|
|
17
|
+
return await ScrcpyClipboardDeviceMessage.deserialize(
|
|
18
|
+
stream
|
|
19
|
+
);
|
|
20
|
+
case ScrcpyDeviceMessageType.AckClipboard:
|
|
21
|
+
return await ScrcpyAckClipboardDeviceMessage.deserialize(
|
|
22
|
+
stream
|
|
23
|
+
);
|
|
14
24
|
default:
|
|
15
|
-
throw new Error(
|
|
25
|
+
throw new Error("unknown control message type");
|
|
16
26
|
}
|
|
17
|
-
})
|
|
27
|
+
});
|
|
18
28
|
}
|
|
19
29
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
1
|
+
export * from "./adb/index.js";
|
|
2
|
+
export * from "./codec.js";
|
|
3
|
+
export * from "./control/index.js";
|
|
4
|
+
export * from "./device-message/index.js";
|
|
5
|
+
export * from "./options/index.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AndroidCodecLevel, AndroidCodecProfile } from
|
|
2
|
-
import type { ScrcpyOptionValue } from
|
|
1
|
+
import type { AndroidCodecLevel, AndroidCodecProfile } from "../../codec.js";
|
|
2
|
+
import type { ScrcpyOptionValue } from "../types.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* If the option you need is not in this type,
|
|
@@ -10,29 +10,34 @@ export interface CodecOptionsInit {
|
|
|
10
10
|
level: AndroidCodecLevel;
|
|
11
11
|
|
|
12
12
|
iFrameInterval: number;
|
|
13
|
+
maxBframes: number;
|
|
13
14
|
repeatPreviousFrameAfter: number;
|
|
14
15
|
maxPtsGapToEncoder: number;
|
|
16
|
+
intraRefreshPeriod: number;
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
function toDashCase(input: string) {
|
|
18
|
-
return input.replace(/([A-Z])/g,
|
|
20
|
+
return input.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
const CODEC_OPTION_TYPES: Partial<
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
const CODEC_OPTION_TYPES: Partial<
|
|
24
|
+
Record<keyof CodecOptionsInit, "long" | "float" | "string">
|
|
25
|
+
> = {
|
|
26
|
+
repeatPreviousFrameAfter: "long",
|
|
27
|
+
maxPtsGapToEncoder: "long",
|
|
24
28
|
};
|
|
25
29
|
|
|
26
30
|
export class CodecOptions implements ScrcpyOptionValue {
|
|
27
31
|
public value: Partial<CodecOptionsInit>;
|
|
28
32
|
|
|
29
|
-
public constructor(value: Partial<CodecOptionsInit>) {
|
|
33
|
+
public constructor(value: Partial<CodecOptionsInit> = {}) {
|
|
30
34
|
this.value = value;
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
public toOptionValue(): string | undefined {
|
|
34
|
-
const entries = Object.entries(this.value)
|
|
35
|
-
|
|
38
|
+
const entries = Object.entries(this.value).filter(
|
|
39
|
+
([, value]) => value !== undefined
|
|
40
|
+
);
|
|
36
41
|
|
|
37
42
|
if (entries.length === 0) {
|
|
38
43
|
return undefined;
|
|
@@ -41,8 +46,8 @@ export class CodecOptions implements ScrcpyOptionValue {
|
|
|
41
46
|
return entries
|
|
42
47
|
.map(([key, value]) => {
|
|
43
48
|
const type = CODEC_OPTION_TYPES[key as keyof CodecOptionsInit];
|
|
44
|
-
return `${toDashCase(key)}${type ? `:${type}` :
|
|
49
|
+
return `${toDashCase(key)}${type ? `:${type}` : ""}=${value}`;
|
|
45
50
|
})
|
|
46
|
-
.join(
|
|
51
|
+
.join(",");
|
|
47
52
|
}
|
|
48
53
|
}
|