Merge pull request #770 from houqp/new_ui_houqp

add ev_log replay script & bug fix in gesturedetector
pull/2/merge
Huang Xin 11 years ago
commit 12d6ec1740

@ -0,0 +1,47 @@
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pprint
import struct
import argparse
EV_LOG = "ev_double.log"
EV_PIPE = "emu_event"
def gen_ev_from_log_entry(line):
values = line.split("|")
return {
"time": {
"sec": int(values[3]),
"usec": int(values[4]),
},
"type": int(values[0]),
"code": int(values[1]),
"value": int(values[2]),
}
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("ev_log", type=str,
help="event log file to replay")
args = parser.parse_args()
# parse ev log into dictionaries
evs = [gen_ev_from_log_entry(line.strip())
for line in open(args.ev_log)]
#pprint.pprint(evs)
# replay evs
ev_pipe = open(EV_PIPE, "w")
for ev in evs:
#@TODO also simulate timing here 25.02 2013 (houqp)
ev_pipe.write(
struct.pack("llHHi",
ev["time"]["sec"], ev["time"]["usec"],
ev["type"],
ev["code"],
ev["value"])
)

@ -74,10 +74,11 @@ GestureDetector = {
}
function GestureDetector:feedEvent(tev)
re = self.state(self, tev)
if tev.id ~= -1 then
self.last_tev = tev
end
return self.state(self, tev)
return re
end
function GestureDetector:deepCopyEv(tev)
@ -190,8 +191,8 @@ function GestureDetector:tapState(tev)
}
-- cur_tap is used for double tap detection
local cur_tap = {
x = self.last_tev.x,
y = self.last_tev.y,
x = tev.x,
y = tev.y,
timev = tev.timev,
}
@ -201,6 +202,7 @@ function GestureDetector:tapState(tev)
self:clearState()
ges_ev.ges = "double_tap"
self.last_tap = nil
DEBUG("double tap detected")
return ges_ev
end
@ -218,6 +220,7 @@ function GestureDetector:tapState(tev)
if self.last_tap ~= nil then
self.last_tap = nil
-- we are using closure here
DEBUG("single tap detected")
return ges_ev
end
end, deadline)
@ -229,12 +232,13 @@ function GestureDetector:tapState(tev)
-- we return nil in this case
self.state = self.tapState
DEBUG("set up hold timer")
local deadline = self.last_tev.timev + TimeVal:new{
local deadline = tev.timev + TimeVal:new{
sec = 0, usec = self.HOLD_INTERVAL
}
Input:setTimeout(function()
if self.state == self.tapState then
-- timer set in tapState, so we switch to hold
DEBUG("hold gesture detected")
return self:switchState("holdState")
end
end, deadline)
@ -292,7 +296,6 @@ function GestureDetector:panState(tev)
y = self.last_tev.y,
w = 0, h = 0,
}
self.last_tev = tev
return pan_ev
end
end

@ -215,7 +215,7 @@ function UIManager:run()
-- delegate input_event to handler
if input_event then
DEBUG("in ui.lua:", input_event)
--DEBUG("in ui.lua:", input_event)
if input_event == "IntoSS" then
Device:intoScreenSaver()
elseif input_event == "OutOfSS" then

Loading…
Cancel
Save