From 1616840818488f64e8fce476065ec61aac65aeea Mon Sep 17 00:00:00 2001 From: Simo Kinnunen Date: Thu, 30 Jan 2014 16:53:49 +0900 Subject: [PATCH] Add display information to device identity. --- lib/db/api.js | 1 + lib/roles/device.js | 27 +++++++++++++++++++++++++++ lib/util/wireutil.js | 11 +++++++++++ lib/wire/wire.proto | 13 +++++++++++++ 4 files changed, 52 insertions(+) diff --git a/lib/db/api.js b/lib/db/api.js index 9d1b190f..e9988ce9 100644 --- a/lib/db/api.js +++ b/lib/db/api.js @@ -52,5 +52,6 @@ module.exports.saveDeviceIdentity = function(serial, identity) { , version: identity.version , abi: identity.abi , sdk: identity.sdk + , display: identity.display })) } diff --git a/lib/roles/device.js b/lib/roles/device.js index c24298f5..7068c6b6 100644 --- a/lib/roles/device.js +++ b/lib/roles/device.js @@ -5,6 +5,7 @@ var Promise = require('bluebird') var zmq = require('zmq') var adbkit = require('adbkit') var monkey = require('adbkit-monkey') +var request = Promise.promisifyAll(require('request')) var logger = require('../util/logger') var wire = require('../wire') @@ -18,6 +19,7 @@ var ChannelManager = require('../wire/channelmanager') module.exports = function(options) { var log = logger.createLogger('device') var identity = Object.create(null) + var display = Object.create(null) var vendor = Object.create(null) var solo = wireutil.makePrivateChannel() var channels = new ChannelManager() @@ -151,6 +153,31 @@ module.exports = function(options) { log.info(chunk) }) }) + .then(function() { + return devutil.waitForPort(adb, options.serial, port) + }) + .then(function(conn) { + conn.end() + var ours = options.ports.pop() + return adb.forwardAsync( + options.serial + , util.format('tcp:%d', ours) + , util.format('tcp:%d', port) + ) + .then(function() { + return request.getAsync({ + url: util.format( + 'http://127.0.0.1:%d/api/v1/displays/0' + , ours + ) + , json: true + }) + }) + .then(function(args) { + assert.ok('id' in args[1], 'Invalid response from HTTP API') + identity.display = args[1] + }) + }) }) }) .then(function() { diff --git a/lib/util/wireutil.js b/lib/util/wireutil.js index f52046b1..95aa9a10 100644 --- a/lib/util/wireutil.js +++ b/lib/util/wireutil.js @@ -99,6 +99,17 @@ module.exports = function(wire) { , identity.version , identity.abi , identity.sdk + , new wire.DeviceDisplayMessage( + identity.display.id + , identity.display.width + , identity.display.height + , identity.display.orientation + , identity.display.xdpi + , identity.display.ydpi + , identity.display.fps + , identity.display.density + , identity.display.secure + ) ) return wireutil.envelope(wire.MessageType.DEVICE_IDENTITY, message) diff --git a/lib/wire/wire.proto b/lib/wire/wire.proto index fa1dc865..69136898 100644 --- a/lib/wire/wire.proto +++ b/lib/wire/wire.proto @@ -95,6 +95,18 @@ enum DeviceManufacturer { ZTE = 2900; } +message DeviceDisplayMessage { + required uint32 id = 1; + required uint32 width = 2; + required uint32 height = 3; + required uint32 orientation = 4; + required uint32 xdpi = 5; + required uint32 ydpi = 6; + required double fps = 7; + required double density = 8; + required bool secure = 9; +} + message DeviceIdentityMessage { required string serial = 1; required DevicePlatform platform = 2; @@ -103,6 +115,7 @@ message DeviceIdentityMessage { required string version = 5; required string abi = 6; required string sdk = 7; + required DeviceDisplayMessage display = 8; } message DeviceProperty {