Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Wrapper around the ADB utility.
"use strict";
const { dumpn } = require("resource://devtools/shared/DevToolsUtils.js");
const { setTimeout } = ChromeUtils.importESModule(
"resource://gre/modules/Timer.sys.mjs"
);
const {
adbProcess,
} = require("resource://devtools/client/shared/remote-debugging/adb/adb-process.js");
const client = require("resource://devtools/client/shared/remote-debugging/adb/adb-client.js");
const OKAY = 0x59414b4f;
// Asynchronously runs an adb command.
// @param command The command as documented in
const runCommand = function (command) {
dumpn("runCommand " + command);
return new Promise((resolve, reject) => {
if (!adbProcess.ready) {
setTimeout(function () {
reject("ADB_NOT_READY");
});
return;
}
const socket = client.connect();
socket.s.onopen = function () {
dumpn("runCommand onopen");
const req = client.createRequest(command);
socket.send(req);
};
socket.s.onerror = function () {
dumpn("runCommand onerror");
reject("NETWORK_ERROR");
};
socket.s.onclose = function () {
dumpn("runCommand onclose");
};
socket.s.ondata = function (event) {
dumpn("runCommand ondata");
const data = event.data;
const packet = client.unpackPacket(data, false);
if (!client.checkResponse(data, OKAY)) {
socket.close();
dumpn("Error: " + packet.data);
reject("PROTOCOL_ERROR");
return;
}
resolve(packet.data);
};
});
};
exports.runCommand = runCommand;