From ed5709aa049944b8b8c6f238d9bf989ecbb01dd6 Mon Sep 17 00:00:00 2001 From: Simo Kinnunen Date: Mon, 17 Mar 2014 19:21:34 +0900 Subject: [PATCH] Expose identify functionality. Shows a red screen with important data. --- lib/roles/app.js | 9 +++ lib/roles/device/plugins/input.js | 61 +++++++++++++------ lib/util/datautil.js | 49 +++++++-------- lib/wire/wire.proto | 4 ++ .../components/stf/control/control-service.js | 6 ++ res/app/device-control/device-control.jade | 2 +- 6 files changed, 87 insertions(+), 44 deletions(-) diff --git a/lib/roles/app.js b/lib/roles/app.js index a135adb6..8dc24053 100644 --- a/lib/roles/app.js +++ b/lib/roles/app.js @@ -313,6 +313,15 @@ module.exports = function(options) { ]) }) // Transactions + .on('device.identify', function(channel, responseChannel) { + push.send([ + channel + , wireutil.transaction( + responseChannel + , new wire.PhysicalIdentifyMessage() + ) + ]) + }) .on('group.invite', function(channel, responseChannel, data) { joinChannel(responseChannel) push.send([ diff --git a/lib/roles/device/plugins/input.js b/lib/roles/device/plugins/input.js index 0559498b..3e7db466 100644 --- a/lib/roles/device/plugins/input.js +++ b/lib/roles/device/plugins/input.js @@ -5,6 +5,7 @@ var split = require('split') var ByteBuffer = require('protobufjs/node_modules/bytebuffer') var wire = require('../../../wire') +var wireutil = require('../../../wire/util') var devutil = require('../../../util/devutil') var keyutil = require('../../../util/keyutil') var streamutil = require('../../../util/streamutil') @@ -13,9 +14,10 @@ var logger = require('../../../util/logger') module.exports = syrup() .dependency(require('../support/adb')) .dependency(require('../support/router')) + .dependency(require('../support/push')) .dependency(require('../support/quit')) .dependency(require('../resources/inputagent')) - .define(function(options, adb, router, quit, apk) { + .define(function(options, adb, router, push, quit, apk) { var log = logger.createLogger('device:plugins:input') var agent = { @@ -170,10 +172,44 @@ module.exports = syrup() ])) } + function unlock() { + service.socket.write('unlock\n') + } + + function lock() { + service.socket.write('lock\n') + } + + function acquireWakeLock() { + service.socket.write('acquire wake lock\n') + } + + function releaseWakeLock() { + service.socket.write('release wake lock\n') + } + + function identity() { + service.socket.write(util.format( + 'show identity %s\n' + , options.serial + )) + } + return openAgent() .then(openService) .then(function() { router + .on(wire.PhysicalIdentifyMessage, function(channel, message) { + identity() + push.send([ + channel + , wireutil.envelope(new wire.TransactionDoneMessage( + options.serial + , 0 + , true + )) + ]) + }) .on(wire.KeyDownMessage, function(channel, message) { sendInputEvent({ action: 0 @@ -201,24 +237,11 @@ module.exports = syrup() }) return { - unlock: function() { - service.socket.write('unlock\n') - } - , lock: function() { - service.socket.write('lock\n') - } - , acquireWakeLock: function() { - service.socket.write('acquire wake lock\n') - } - , releaseWakeLock: function() { - service.socket.write('release wake lock\n') - } - , identity: function() { - service.socket.write(util.format( - 'show identity %s\n' - , options.serial - )) - } + unlock: unlock + , lock: lock + , acquireWakeLock: acquireWakeLock + , releaseWakeLock: releaseWakeLock + , identity: identity } }) }) diff --git a/lib/util/datautil.js b/lib/util/datautil.js index 2cf5afe9..88229857 100644 --- a/lib/util/datautil.js +++ b/lib/util/datautil.js @@ -12,38 +12,39 @@ var aliases = { module.exports.applyData = function(device) { var model = device.model - var match - match = deviceData[model] - - if (!match) { - if (aliases[model]) { - match = deviceData[aliases[model]] - } - else { - if (!match) { - model = model.replace(/ /g, '_') - match = deviceData[model] + if (model) { + var match = deviceData[model] + if (!match) { + if (aliases[model]) { + match = deviceData[aliases[model]] + } + else { if (!match) { - model = model.replace(/_/g, '') + model = model.replace(/ /g, '_') match = deviceData[model] + + if (!match) { + model = model.replace(/_/g, '') + match = deviceData[model] + } } } } - } - if (match) { - device.name = match.name.id - device.releasedAt = match.date - device.image = match.image.s.replace(/^small\//, '') - } - else { - log.warn( - 'Device database does not have a match for device "%s" (model "%s")' - , device.serial - , device.model - ) + if (match) { + device.name = match.name.id + device.releasedAt = match.date + device.image = match.image.s.replace(/^small\//, '') + } + else { + log.warn( + 'Device database does not have a match for device "%s" (model "%s")' + , device.serial + , device.model + ) + } } return device diff --git a/lib/wire/wire.proto b/lib/wire/wire.proto index 8866ea77..f430ca50 100644 --- a/lib/wire/wire.proto +++ b/lib/wire/wire.proto @@ -12,6 +12,7 @@ enum MessageType { DeviceRegisteredMessage = 8; DeviceStatusMessage = 9; GroupMessage = 10; + PhysicalIdentifyMessage = 29; JoinGroupMessage = 11; KeyDownMessage = 12; KeyPressMessage = 13; @@ -185,6 +186,9 @@ message LeaveGroupMessage { // Input +message PhysicalIdentifyMessage { +} + message TouchDownMessage { required uint32 x = 1; required uint32 y = 2; diff --git a/res/app/components/stf/control/control-service.js b/res/app/components/stf/control/control-service.js index 241ddac9..e1145d2d 100644 --- a/res/app/components/stf/control/control-service.js +++ b/res/app/components/stf/control/control-service.js @@ -81,6 +81,12 @@ module.exports = function ControlServiceFactory($rootScope, socket, TransactionS }) return tx } + + this.identify = function() { + var tx = TransactionService.create(devices) + socket.emit('device.identify', channel, tx.channel) + return tx + } } controlService.forOne = function(device, channel) { diff --git a/res/app/device-control/device-control.jade b/res/app/device-control/device-control.jade index 81020aa9..271d658b 100644 --- a/res/app/device-control/device-control.jade +++ b/res/app/device-control/device-control.jade @@ -1,6 +1,7 @@ h1 {{ device.value.serial }} button(ng-click='showScreen = !showScreen') Show/Hide +button(ng-click='control.identify()') Identify div(ng-controller='DeviceScreenCtrl') device-screen(style='width: 400px; height: 600px; background: gray') @@ -8,4 +9,3 @@ div(ng-controller='DeviceScreenCtrl') button(ng-click='control.menu()') Menu button(ng-click='control.home()') Home button(ng-click='control.back()') Back -