@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.
Files changed (323) hide show
  1. package/CHANGELOG.json +39 -3
  2. package/CHANGELOG.md +22 -4
  3. package/LICENSE +1 -1
  4. package/README.md +149 -82
  5. package/bin/scrcpy-server +0 -0
  6. package/bin/version.d.ts +1 -1
  7. package/bin/version.js +1 -1
  8. package/esm/adb/client.d.ts +40 -39
  9. package/esm/adb/client.d.ts.map +1 -1
  10. package/esm/adb/client.js +223 -217
  11. package/esm/adb/client.js.map +1 -1
  12. package/esm/adb/connection.d.ts +48 -37
  13. package/esm/adb/connection.d.ts.map +1 -1
  14. package/esm/adb/connection.js +121 -101
  15. package/esm/adb/connection.js.map +1 -1
  16. package/esm/adb/index.d.ts +3 -3
  17. package/esm/adb/index.js +3 -3
  18. package/esm/adb/options/1_16.d.ts +7 -7
  19. package/esm/adb/options/1_16.d.ts.map +1 -1
  20. package/esm/adb/options/1_16.js +19 -19
  21. package/esm/adb/options/1_16.js.map +1 -1
  22. package/esm/adb/options/1_22.d.ts +7 -7
  23. package/esm/adb/options/1_22.d.ts.map +1 -1
  24. package/esm/adb/options/1_22.js +16 -16
  25. package/esm/adb/options/1_22.js.map +1 -1
  26. package/esm/adb/options/1_26.d.ts +9 -0
  27. package/esm/adb/options/1_26.d.ts.map +1 -0
  28. package/esm/adb/options/1_26.js +11 -0
  29. package/esm/adb/options/1_26.js.map +1 -0
  30. package/esm/adb/options/2_0.d.ts +8 -0
  31. package/esm/adb/options/2_0.d.ts.map +1 -0
  32. package/esm/adb/options/2_0.js +13 -0
  33. package/esm/adb/options/2_0.js.map +1 -0
  34. package/esm/adb/options/index.d.ts +3 -3
  35. package/esm/adb/options/index.js +3 -3
  36. package/esm/adb/options/types.d.ts +23 -22
  37. package/esm/adb/options/types.d.ts.map +1 -1
  38. package/esm/adb/options/types.js +36 -29
  39. package/esm/adb/options/types.js.map +1 -1
  40. package/esm/codec/av1.d.ts +33 -0
  41. package/esm/codec/av1.d.ts.map +1 -0
  42. package/esm/codec/av1.js +35 -0
  43. package/esm/codec/av1.js.map +1 -0
  44. package/esm/codec/h264.d.ts +98 -0
  45. package/esm/codec/h264.d.ts.map +1 -0
  46. package/esm/codec/h264.js +477 -0
  47. package/esm/codec/h264.js.map +1 -0
  48. package/esm/codec/h265.d.ts +36 -0
  49. package/esm/codec/h265.d.ts.map +1 -0
  50. package/esm/codec/h265.js +38 -0
  51. package/esm/codec/h265.js.map +1 -0
  52. package/esm/codec/index.d.ts +4 -0
  53. package/esm/codec/index.d.ts.map +1 -0
  54. package/esm/codec/index.js +4 -0
  55. package/esm/codec/index.js.map +1 -0
  56. package/esm/codec.d.ts +33 -33
  57. package/esm/codec.js +36 -36
  58. package/esm/control/back-or-screen-on.d.ts +3 -0
  59. package/esm/control/back-or-screen-on.d.ts.map +1 -0
  60. package/esm/control/back-or-screen-on.js +2 -0
  61. package/esm/control/back-or-screen-on.js.map +1 -0
  62. package/esm/control/basic.d.ts +5 -0
  63. package/esm/control/basic.d.ts.map +1 -0
  64. package/esm/control/basic.js +3 -0
  65. package/esm/control/basic.js.map +1 -0
  66. package/esm/control/hover-helper.d.ts +18 -0
  67. package/esm/control/hover-helper.d.ts.map +1 -0
  68. package/esm/control/hover-helper.js +44 -0
  69. package/esm/control/hover-helper.js.map +1 -0
  70. package/esm/control/index.d.ts +11 -7
  71. package/esm/control/index.d.ts.map +1 -1
  72. package/esm/control/index.js +11 -7
  73. package/esm/control/index.js.map +1 -1
  74. package/esm/control/inject-keycode.d.ts +194 -52
  75. package/esm/control/inject-keycode.d.ts.map +1 -1
  76. package/esm/control/inject-keycode.js +199 -53
  77. package/esm/control/inject-keycode.js.map +1 -1
  78. package/esm/control/inject-scroll.d.ts +3 -0
  79. package/esm/control/inject-scroll.d.ts.map +1 -0
  80. package/esm/control/inject-scroll.js +2 -0
  81. package/esm/control/inject-scroll.js.map +1 -0
  82. package/esm/control/inject-text.d.ts +8 -8
  83. package/esm/control/inject-text.d.ts.map +1 -1
  84. package/esm/control/inject-text.js +6 -6
  85. package/esm/control/inject-text.js.map +1 -1
  86. package/esm/control/inject-touch.d.ts +37 -29
  87. package/esm/control/inject-touch.d.ts.map +1 -1
  88. package/esm/control/inject-touch.js +62 -29
  89. package/esm/control/inject-touch.js.map +1 -1
  90. package/esm/control/rotate-device.d.ts +6 -6
  91. package/esm/control/rotate-device.d.ts.map +1 -1
  92. package/esm/control/rotate-device.js +3 -4
  93. package/esm/control/rotate-device.js.map +1 -1
  94. package/esm/control/serializer.d.ts +35 -22
  95. package/esm/control/serializer.d.ts.map +1 -1
  96. package/esm/control/serializer.js +82 -72
  97. package/esm/control/serializer.js.map +1 -1
  98. package/esm/control/set-clipboard.d.ts +3 -0
  99. package/esm/control/set-clipboard.d.ts.map +1 -0
  100. package/esm/control/set-clipboard.js +2 -0
  101. package/esm/control/set-clipboard.js.map +1 -0
  102. package/esm/control/set-screen-power-mode.d.ts +11 -11
  103. package/esm/control/set-screen-power-mode.d.ts.map +1 -1
  104. package/esm/control/set-screen-power-mode.js +11 -11
  105. package/esm/control/set-screen-power-mode.js.map +1 -1
  106. package/esm/control/simple.d.ts +5 -0
  107. package/esm/control/simple.d.ts.map +1 -0
  108. package/esm/control/simple.js +3 -0
  109. package/esm/control/simple.js.map +1 -0
  110. package/esm/control/type.d.ts +14 -14
  111. package/esm/control/type.js +18 -18
  112. package/esm/decoder.d.ts +2 -0
  113. package/esm/decoder.d.ts.map +1 -0
  114. package/esm/decoder.js +2 -0
  115. package/esm/decoder.js.map +1 -0
  116. package/esm/device-message/ack-clipboard.d.ts +9 -0
  117. package/esm/device-message/ack-clipboard.d.ts.map +1 -0
  118. package/esm/device-message/ack-clipboard.js +6 -0
  119. package/esm/device-message/ack-clipboard.js.map +1 -0
  120. package/esm/device-message/clipboard.d.ts +9 -9
  121. package/esm/device-message/clipboard.d.ts.map +1 -1
  122. package/esm/device-message/clipboard.js +6 -6
  123. package/esm/device-message/clipboard.js.map +1 -1
  124. package/esm/device-message/index.d.ts +4 -3
  125. package/esm/device-message/index.d.ts.map +1 -1
  126. package/esm/device-message/index.js +4 -3
  127. package/esm/device-message/index.js.map +1 -1
  128. package/esm/device-message/stream.d.ts +7 -6
  129. package/esm/device-message/stream.d.ts.map +1 -1
  130. package/esm/device-message/stream.js +19 -15
  131. package/esm/device-message/stream.js.map +1 -1
  132. package/esm/device-message/type.d.ts +4 -4
  133. package/esm/device-message/type.js +6 -6
  134. package/esm/index.d.ts +5 -5
  135. package/esm/index.js +5 -5
  136. package/esm/options/1.17.d.ts +3 -0
  137. package/esm/options/1.17.d.ts.map +1 -0
  138. package/esm/options/1.17.js +2 -0
  139. package/esm/options/1.17.js.map +1 -0
  140. package/esm/options/1_16/codec-options.d.ts +20 -18
  141. package/esm/options/1_16/codec-options.d.ts.map +1 -1
  142. package/esm/options/1_16/codec-options.js +25 -26
  143. package/esm/options/1_16/codec-options.js.map +1 -1
  144. package/esm/options/1_16/float-to-uint16.d.ts +5 -0
  145. package/esm/options/1_16/float-to-uint16.d.ts.map +1 -0
  146. package/esm/options/1_16/float-to-uint16.js +27 -0
  147. package/esm/options/1_16/float-to-uint16.js.map +1 -0
  148. package/esm/options/1_16/h264-configuration.d.ts +49 -0
  149. package/esm/options/1_16/h264-configuration.d.ts.map +1 -0
  150. package/esm/options/1_16/h264-configuration.js +414 -0
  151. package/esm/options/1_16/h264-configuration.js.map +1 -0
  152. package/esm/options/1_16/index.d.ts +4 -3
  153. package/esm/options/1_16/index.d.ts.map +1 -1
  154. package/esm/options/1_16/index.js +4 -3
  155. package/esm/options/1_16/index.js.map +1 -1
  156. package/esm/options/1_16/init.d.ts +66 -0
  157. package/esm/options/1_16/init.d.ts.map +1 -0
  158. package/esm/options/1_16/init.js +16 -0
  159. package/esm/options/1_16/init.js.map +1 -0
  160. package/esm/options/1_16/message.d.ts +32 -0
  161. package/esm/options/1_16/message.d.ts.map +1 -0
  162. package/esm/options/1_16/message.js +37 -0
  163. package/esm/options/1_16/message.js.map +1 -0
  164. package/esm/options/1_16/options.d.ts +102 -96
  165. package/esm/options/1_16/options.d.ts.map +1 -1
  166. package/esm/options/1_16/options.js +189 -187
  167. package/esm/options/1_16/options.js.map +1 -1
  168. package/esm/options/1_16/scroll.d.ts +28 -0
  169. package/esm/options/1_16/scroll.d.ts.map +1 -0
  170. package/esm/options/1_16/scroll.js +56 -0
  171. package/esm/options/1_16/scroll.js.map +1 -0
  172. package/esm/options/1_16/sps.d.ts +1 -1
  173. package/esm/options/1_16/sps.d.ts.map +1 -1
  174. package/esm/options/1_16/sps.js +25 -17
  175. package/esm/options/1_16/sps.js.map +1 -1
  176. package/esm/options/1_17.d.ts +32 -0
  177. package/esm/options/1_17.d.ts.map +1 -0
  178. package/esm/options/1_17.js +36 -0
  179. package/esm/options/1_17.js.map +1 -0
  180. package/esm/options/1_18.d.ts +21 -19
  181. package/esm/options/1_18.d.ts.map +1 -1
  182. package/esm/options/1_18.js +45 -45
  183. package/esm/options/1_18.js.map +1 -1
  184. package/esm/options/1_21.d.ts +22 -9
  185. package/esm/options/1_21.d.ts.map +1 -1
  186. package/esm/options/1_21.js +36 -25
  187. package/esm/options/1_21.js.map +1 -1
  188. package/esm/options/1_22/index.d.ts +3 -0
  189. package/esm/options/1_22/index.d.ts.map +1 -0
  190. package/esm/options/1_22/index.js +3 -0
  191. package/esm/options/1_22/index.js.map +1 -0
  192. package/esm/options/1_22/init.d.ts +17 -0
  193. package/esm/options/1_22/init.d.ts.map +1 -0
  194. package/esm/options/1_22/init.js +2 -0
  195. package/esm/options/1_22/init.js.map +1 -0
  196. package/esm/options/{1_22.d.ts → 1_22/options.d.ts} +30 -40
  197. package/esm/options/1_22/options.d.ts.map +1 -0
  198. package/esm/options/{1_22.js → 1_22/options.js} +26 -30
  199. package/esm/options/1_22/options.js.map +1 -0
  200. package/esm/options/1_22/scroll.d.ts +17 -0
  201. package/esm/options/1_22/scroll.d.ts.map +1 -0
  202. package/esm/options/1_22/scroll.js +15 -0
  203. package/esm/options/1_22/scroll.js.map +1 -0
  204. package/esm/options/1_23.d.ts +12 -11
  205. package/esm/options/1_23.d.ts.map +1 -1
  206. package/esm/options/1_23.js +34 -33
  207. package/esm/options/1_23.js.map +1 -1
  208. package/esm/options/1_24.d.ts +9 -8
  209. package/esm/options/1_24.d.ts.map +1 -1
  210. package/esm/options/1_24.js +12 -12
  211. package/esm/options/1_24.js.map +1 -1
  212. package/esm/options/1_25/index.d.ts +3 -0
  213. package/esm/options/1_25/index.d.ts.map +1 -0
  214. package/esm/options/1_25/index.js +3 -0
  215. package/esm/options/1_25/index.js.map +1 -0
  216. package/esm/options/1_25/options.d.ts +7 -0
  217. package/esm/options/1_25/options.d.ts.map +1 -0
  218. package/esm/options/1_25/options.js +8 -0
  219. package/esm/options/1_25/options.js.map +1 -0
  220. package/esm/options/1_25/scroll.d.ts +20 -0
  221. package/esm/options/1_25/scroll.d.ts.map +1 -0
  222. package/esm/options/1_25/scroll.js +33 -0
  223. package/esm/options/1_25/scroll.js.map +1 -0
  224. package/esm/options/1_26.d.ts +57 -0
  225. package/esm/options/1_26.d.ts.map +1 -0
  226. package/esm/options/1_26.js +67 -0
  227. package/esm/options/1_26.js.map +1 -0
  228. package/esm/options/2.d.ts +57 -0
  229. package/esm/options/2.d.ts.map +1 -0
  230. package/esm/options/2.js +67 -0
  231. package/esm/options/2.js.map +1 -0
  232. package/esm/options/2_0.d.ts +87 -0
  233. package/esm/options/2_0.d.ts.map +1 -0
  234. package/esm/options/2_0.js +175 -0
  235. package/esm/options/2_0.js.map +1 -0
  236. package/esm/options/codec.d.ts +52 -0
  237. package/esm/options/codec.d.ts.map +1 -0
  238. package/esm/options/codec.js +26 -0
  239. package/esm/options/codec.js.map +1 -0
  240. package/esm/options/index.d.ts +8 -7
  241. package/esm/options/index.d.ts.map +1 -1
  242. package/esm/options/index.js +8 -7
  243. package/esm/options/index.js.map +1 -1
  244. package/esm/options/latest.d.ts +12 -0
  245. package/esm/options/latest.d.ts.map +1 -0
  246. package/esm/options/latest.js +8 -0
  247. package/esm/options/latest.js.map +1 -0
  248. package/esm/options/types.d.ts +46 -44
  249. package/esm/options/types.d.ts.map +1 -1
  250. package/esm/options/types.js +17 -15
  251. package/esm/options/types.js.map +1 -1
  252. package/package.json +20 -12
  253. package/scripts/fetch-server.cjs +19 -9
  254. package/src/adb/client.ts +184 -147
  255. package/src/adb/connection.ts +95 -31
  256. package/src/adb/index.ts +3 -3
  257. package/src/adb/options/1_16.ts +15 -6
  258. package/src/adb/options/1_22.ts +12 -6
  259. package/src/adb/options/index.ts +3 -3
  260. package/src/adb/options/types.ts +34 -14
  261. package/src/control/back-or-screen-on.ts +4 -0
  262. package/src/control/hover-helper.ts +54 -0
  263. package/src/control/index.ts +11 -7
  264. package/src/control/inject-keycode.ts +203 -45
  265. package/src/control/inject-scroll.ts +4 -0
  266. package/src/control/inject-text.ts +7 -8
  267. package/src/control/inject-touch.ts +58 -14
  268. package/src/control/rotate-device.ts +7 -6
  269. package/src/control/serializer.ts +111 -43
  270. package/src/control/set-clipboard.ts +4 -0
  271. package/src/control/set-screen-power-mode.ts +7 -8
  272. package/src/device-message/ack-clipboard.ts +10 -0
  273. package/src/device-message/clipboard.ts +8 -8
  274. package/src/device-message/index.ts +4 -3
  275. package/src/device-message/stream.ts +17 -7
  276. package/src/index.ts +5 -5
  277. package/src/options/1_16/codec-options.ts +16 -11
  278. package/src/options/1_16/h264-configuration.ts +485 -0
  279. package/src/options/1_16/index.ts +4 -3
  280. package/src/options/1_16/options.ts +180 -130
  281. package/src/options/1_16/scroll.ts +74 -0
  282. package/src/options/1_18.ts +22 -12
  283. package/src/options/1_21.ts +30 -13
  284. package/src/options/1_22/index.ts +2 -0
  285. package/src/options/{1_22.ts → 1_22/options.ts} +9 -17
  286. package/src/options/1_22/scroll.ts +26 -0
  287. package/src/options/1_23.ts +30 -20
  288. package/src/options/1_24.ts +5 -3
  289. package/src/options/1_25/index.ts +2 -0
  290. package/src/options/1_25/options.ts +13 -0
  291. package/src/options/1_25/scroll.ts +49 -0
  292. package/src/options/index.ts +8 -7
  293. package/src/options/types.ts +36 -19
  294. package/tsconfig.build.json +1 -1
  295. package/tsconfig.build.tsbuildinfo +1 -1
  296. package/esm/decoder/index.d.ts +0 -28
  297. package/esm/decoder/index.d.ts.map +0 -1
  298. package/esm/decoder/index.js +0 -2
  299. package/esm/decoder/index.js.map +0 -1
  300. package/esm/decoder/tinyh264/index.d.ts +0 -20
  301. package/esm/decoder/tinyh264/index.d.ts.map +0 -1
  302. package/esm/decoder/tinyh264/index.js +0 -86
  303. package/esm/decoder/tinyh264/index.js.map +0 -1
  304. package/esm/decoder/tinyh264/worker.d.ts +0 -2
  305. package/esm/decoder/tinyh264/worker.d.ts.map +0 -1
  306. package/esm/decoder/tinyh264/worker.js +0 -3
  307. package/esm/decoder/tinyh264/worker.js.map +0 -1
  308. package/esm/decoder/tinyh264/wrapper.d.ts +0 -21
  309. package/esm/decoder/tinyh264/wrapper.d.ts.map +0 -1
  310. package/esm/decoder/tinyh264/wrapper.js +0 -74
  311. package/esm/decoder/tinyh264/wrapper.js.map +0 -1
  312. package/esm/decoder/types.d.ts +0 -2
  313. package/esm/decoder/types.d.ts.map +0 -1
  314. package/esm/decoder/types.js +0 -2
  315. package/esm/decoder/types.js.map +0 -1
  316. package/esm/decoder/web-codecs/index.d.ts +0 -22
  317. package/esm/decoder/web-codecs/index.d.ts.map +0 -1
  318. package/esm/decoder/web-codecs/index.js +0 -81
  319. package/esm/decoder/web-codecs/index.js.map +0 -1
  320. package/esm/options/1_22.d.ts.map +0 -1
  321. package/esm/options/1_22.js.map +0 -1
  322. package/src/options/1_16/sps.ts +0 -300
  323. package/tsconfig.test.tsbuildinfo +0 -1
@@ -1,86 +1,154 @@
1
- import type { WritableStream, WritableStreamDefaultWriter } from '@yume-chan/stream-extra';
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 { ScrcpyInjectScrollControlMessage1_22, ScrcpyOptions } from '../options/index.js';
4
- import { AndroidKeyEventAction, ScrcpyInjectKeyCodeControlMessage } from './inject-keycode.js';
5
- import { ScrcpyInjectTextControlMessage } from './inject-text.js';
6
- import { ScrcpyInjectTouchControlMessage } from './inject-touch.js';
7
- import { ScrcpyRotateDeviceControlMessage } from './rotate-device.js';
8
- import { AndroidScreenPowerMode, ScrcpySetScreenPowerModeControlMessage } from './set-screen-power-mode.js';
9
- import { ScrcpyControlMessageType } from './type.js';
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<any>;
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.writer = stream.getWriter();
39
+ this.scrollController = options.getScrollController();
21
40
  }
22
41
 
23
- public getTypeValue(type: ScrcpyControlMessageType): number {
42
+ public getActualMessageType(type: ScrcpyControlMessageType): number {
24
43
  const value = this.types.indexOf(type);
25
44
  if (value === -1) {
26
- throw new Error('Not supported');
45
+ throw new Error("Not supported");
27
46
  }
28
47
  return value;
29
48
  }
30
49
 
31
- public injectKeyCode(message: Omit<ScrcpyInjectKeyCodeControlMessage, 'type'>) {
32
- return this.writer.write(ScrcpyInjectKeyCodeControlMessage.serialize({
33
- ...message,
34
- type: this.getTypeValue(ScrcpyControlMessageType.InjectKeyCode),
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.writer.write(ScrcpyInjectTextControlMessage.serialize({
40
- text,
41
- type: this.getTypeValue(ScrcpyControlMessageType.InjectText),
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
- public injectTouch(message: Omit<ScrcpyInjectTouchControlMessage, 'type'>) {
46
- return this.writer.write(ScrcpyInjectTouchControlMessage.serialize({
47
- ...message,
48
- type: this.getTypeValue(ScrcpyControlMessageType.InjectTouch),
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
- public injectScroll(message: Omit<ScrcpyInjectScrollControlMessage1_22, 'type'>) {
53
- return this.writer.write(this.options.serializeInjectScrollControlMessage({
54
- ...message,
55
- type: this.getTypeValue(ScrcpyControlMessageType.InjectScroll),
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.getTypeValue(ScrcpyControlMessageType.BackOrScreenOn),
120
+ type: this.getActualMessageType(
121
+ ScrcpyControlMessageType.BackOrScreenOn
122
+ ),
63
123
  });
64
124
 
65
125
  if (buffer) {
66
- return await this.writer.write(buffer);
126
+ return await this.write(buffer);
67
127
  }
68
128
  }
69
129
 
70
130
  public setScreenPowerMode(mode: AndroidScreenPowerMode) {
71
- return this.writer.write(ScrcpySetScreenPowerModeControlMessage.serialize({
72
- mode,
73
- type: this.getTypeValue(ScrcpyControlMessageType.SetScreenPowerMode),
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.writer.write(ScrcpyRotateDeviceControlMessage.serialize({
79
- type: this.getTypeValue(ScrcpyControlMessageType.RotateDevice),
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
+ }
@@ -0,0 +1,4 @@
1
+ import type { ScrcpySetClipboardControlMessage1_21 } from "../options/index.js";
2
+
3
+ export type ScrcpySetClipboardControlMessage =
4
+ ScrcpySetClipboardControlMessage1_21;
@@ -1,17 +1,16 @@
1
- import Struct, { placeholder } from '@yume-chan/struct';
1
+ import Struct, { placeholder } from "@yume-chan/struct";
2
2
 
3
- import { ScrcpyControlMessageType } from './type.js';
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
- new Struct()
13
- .uint8('type', ScrcpyControlMessageType.SetScreenPowerMode as const)
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['TInit'];
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 '@yume-chan/struct';
2
- import { ScrcpyDeviceMessageType } from './type.js';
1
+ import Struct from "@yume-chan/struct";
3
2
 
4
- export const ScrcpyClipboardDeviceMessage =
5
- new Struct()
6
- .uint32('length')
7
- .string('content', { lengthField: 'length' })
8
- .extra({ type: ScrcpyDeviceMessageType.Clipboard as const });
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['TDeserializeResult'];
11
+ (typeof ScrcpyClipboardDeviceMessage)["TDeserializeResult"];
@@ -1,3 +1,4 @@
1
- export * from './clipboard.js';
2
- export * from './stream.js';
3
- export * from './type.js';
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 '@yume-chan/stream-extra';
2
- import { ScrcpyClipboardDeviceMessage } from './clipboard.js';
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 0:
13
- return await ScrcpyClipboardDeviceMessage.deserialize(stream);
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('unknown control message type');
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 './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
+ 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 '../../codec.js';
2
- import type { ScrcpyOptionValue } from '../types.js';
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, '-$1').toLowerCase();
20
+ return input.replace(/([A-Z])/g, "-$1").toLowerCase();
19
21
  }
20
22
 
21
- const CODEC_OPTION_TYPES: Partial<Record<keyof CodecOptionsInit, 'long' | 'float' | 'string'>> = {
22
- repeatPreviousFrameAfter: 'long',
23
- maxPtsGapToEncoder: 'long',
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
- .filter(([key, value]) => value !== undefined);
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}` : ''}=${value}`;
49
+ return `${toDashCase(key)}${type ? `:${type}` : ""}=${value}`;
45
50
  })
46
- .join(',');
51
+ .join(",");
47
52
  }
48
53
  }