mirror of
https://github.com/DeviceFarmer/stf.git
synced 2026-04-26 18:55:15 +02:00
New multitouch-compatible touch system.
This commit is contained in:
@@ -1,25 +1,61 @@
|
||||
function SeqQueue() {
|
||||
this.queue = []
|
||||
this.seq = 0
|
||||
function SeqQueue(size, maxWaiting) {
|
||||
this.lo = 0
|
||||
this.size = size
|
||||
this.maxWaiting = maxWaiting
|
||||
this.waiting = 0
|
||||
this.list = new Array(size)
|
||||
this.locked = true
|
||||
}
|
||||
|
||||
SeqQueue.prototype.start = function(seq) {
|
||||
this.locked = false
|
||||
this.lo = seq
|
||||
this.maybeConsume()
|
||||
}
|
||||
|
||||
SeqQueue.prototype.stop = function() {
|
||||
this.locked = true
|
||||
this.maybeConsume()
|
||||
}
|
||||
|
||||
SeqQueue.prototype.push = function(seq, handler) {
|
||||
this.queue[seq] = handler
|
||||
this.maybeDequeue()
|
||||
if (seq >= this.size) {
|
||||
return
|
||||
}
|
||||
|
||||
this.list[seq] = handler
|
||||
this.waiting += 1
|
||||
this.maybeConsume()
|
||||
}
|
||||
|
||||
SeqQueue.prototype.done = function(seq, handler) {
|
||||
this.queue[seq] = handler
|
||||
this.maybeDequeue()
|
||||
}
|
||||
SeqQueue.prototype.maybeConsume = function() {
|
||||
if (this.locked) {
|
||||
return
|
||||
}
|
||||
|
||||
SeqQueue.prototype.maybeDequeue = function() {
|
||||
var handler
|
||||
while (this.waiting) {
|
||||
// Did we reach the end of the loop? If so, start from the beginning.
|
||||
if (this.lo === this.size) {
|
||||
this.lo = 0
|
||||
}
|
||||
|
||||
while ((handler = this.queue[this.seq])) {
|
||||
this.queue[this.seq] = void 0
|
||||
handler()
|
||||
this.seq += 1
|
||||
var handler = this.list[this.lo]
|
||||
// Have we received it yet?
|
||||
if (handler) {
|
||||
this.list[this.lo] = void 0
|
||||
handler()
|
||||
this.lo += 1
|
||||
this.waiting -= 1
|
||||
}
|
||||
// Are we too much behind? If so, just move on.
|
||||
else if (this.waiting >= this.maxWaiting) {
|
||||
this.lo += 1
|
||||
this.waiting -= 1
|
||||
}
|
||||
// We don't have it yet, stop.
|
||||
else {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,10 +25,13 @@ enum MessageType {
|
||||
ProbeMessage = 17;
|
||||
ShellCommandMessage = 18;
|
||||
ShellKeepAliveMessage = 19;
|
||||
TapMessage = 20;
|
||||
TouchDownMessage = 21;
|
||||
TouchMoveMessage = 22;
|
||||
TouchUpMessage = 23;
|
||||
TouchCommitMessage = 65;
|
||||
TouchResetMessage = 66;
|
||||
GestureStartMessage = 67;
|
||||
GestureStopMessage = 68;
|
||||
TransactionDoneMessage = 24;
|
||||
TransactionProgressMessage = 25;
|
||||
TypeMessage = 26;
|
||||
@@ -249,25 +252,39 @@ message PhysicalIdentifyMessage {
|
||||
|
||||
message TouchDownMessage {
|
||||
required uint32 seq = 1;
|
||||
required float x = 2;
|
||||
required float y = 3;
|
||||
required uint32 contact = 2;
|
||||
required float x = 3;
|
||||
required float y = 4;
|
||||
optional float pressure = 5;
|
||||
}
|
||||
|
||||
message TouchMoveMessage {
|
||||
required uint32 seq = 1;
|
||||
required float x = 2;
|
||||
required float y = 3;
|
||||
required uint32 contact = 2;
|
||||
required float x = 3;
|
||||
required float y = 4;
|
||||
optional float pressure = 5;
|
||||
}
|
||||
|
||||
message TouchUpMessage {
|
||||
required uint32 seq = 1;
|
||||
required float x = 2;
|
||||
required float y = 3;
|
||||
required uint32 contact = 2;
|
||||
}
|
||||
|
||||
message TapMessage {
|
||||
required float x = 1;
|
||||
required float y = 2;
|
||||
message TouchCommitMessage {
|
||||
required uint32 seq = 1;
|
||||
}
|
||||
|
||||
message TouchResetMessage {
|
||||
required uint32 seq = 1;
|
||||
}
|
||||
|
||||
message GestureStartMessage {
|
||||
required uint32 seq = 1;
|
||||
}
|
||||
|
||||
message GestureStopMessage {
|
||||
required uint32 seq = 1;
|
||||
}
|
||||
|
||||
message TypeMessage {
|
||||
|
||||
Reference in New Issue
Block a user