1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-05 10:39:25 +02:00

Fix touch coordinates on Yoga Tablet 8.

This commit is contained in:
Simo Kinnunen 2014-10-29 15:13:14 +09:00
parent 758e43e2e8
commit 33d4c70820
2 changed files with 44 additions and 5 deletions

View file

@ -0,0 +1,16 @@
var syrup = require('syrup')
module.exports = syrup.serial()
.dependency(require('./data'))
.define(function(options, data) {
return {
has: function(flag) {
return data && data.flags && !!data.flags[flag]
}
, get: function(flag, defaultValue) {
return data && data.flags && data.flags[flag] !== void 0
? data.flags[flag]
: defaultValue
}
}
})

View file

@ -14,7 +14,8 @@ module.exports = syrup.serial()
.dependency(require('../support/adb')) .dependency(require('../support/adb'))
.dependency(require('../support/router')) .dependency(require('../support/router'))
.dependency(require('../resources/minitouch')) .dependency(require('../resources/minitouch'))
.define(function(options, adb, router, minitouch) { .dependency(require('./flags'))
.define(function(options, adb, router, minitouch, flags) {
var log = logger.createLogger('device:plugins:touch') var log = logger.createLogger('device:plugins:touch')
var plugin = Object.create(null) var plugin = Object.create(null)
@ -94,12 +95,34 @@ module.exports = syrup.serial()
socket.write(command) socket.write(command)
} }
var getX = function(point) {
return Math.floor(point.x * socket.maxX)
}
var getY = function(point) {
return Math.floor(point.y * socket.maxY)
}
switch (flags.get('forceTouchOrigin', 'top left')) {
case 'bottom left':
// So far the only device we've seen exhibiting this behavior
// is Yoga Tablet 8.
log.info('Touch origin is bottom left')
getX = function(point) {
return Math.floor((1 - point.y) * socket.maxX)
}
getY = function(point) {
return Math.floor(point.x * socket.maxY)
}
break
}
plugin.touchDown = function(point) { plugin.touchDown = function(point) {
send(util.format( send(util.format(
'd %s %s %s %s\n' 'd %s %s %s %s\n'
, point.contact , point.contact
, Math.floor(point.x * socket.maxX) , getX(point)
, Math.floor(point.y * socket.maxY) , getY(point)
, Math.floor((point.pressure || 0.5) * socket.maxPressure) , Math.floor((point.pressure || 0.5) * socket.maxPressure)
)) ))
} }
@ -108,8 +131,8 @@ module.exports = syrup.serial()
send(util.format( send(util.format(
'm %s %s %s %s\n' 'm %s %s %s %s\n'
, point.contact , point.contact
, Math.floor(point.x * socket.maxX) , getX(point)
, Math.floor(point.y * socket.maxY) , getY(point)
, Math.floor((point.pressure || 0.5) * socket.maxPressure) , Math.floor((point.pressure || 0.5) * socket.maxPressure)
)) ))
} }