Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions adbmirror/adbclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,55 +8,55 @@
class AdbClient(MyThread):
def __init__(self):
MyThread.__init__(self)

cmd = ["adb", "shell"]
self.app = Popen(cmd, stdin=PIPE)

self.rot_auto(False)

def cmd(self, cmd):
self.app.stdin.write(cmd + "\n")
self.app.stdin.flush()

def rot_portrait(self):
self.cmd("content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:0")

def rot_landscape(self):
self.cmd("content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:1")

def rot_auto(self, auto):
self.cmd("content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:%d" % int(bool(auto)))

def press(self, key):
self.cmd("input keyevent %s" % key);

def wait(self):
start = time.time()
while time.time() - start < KILL_TIMEOUT:
if self.app.poll() is not None:
return True
return False

def run(self):
self.running = True

self.data = ""

while self.running:
for msg in self.internal_read():
cmd = msg[0]
if cmd == "end":
self.running = False
self.rot_auto(True)
self.cmd("exit")


if cmd == "portrait":
self.rot_portrait()

if cmd == "landscape":
self.rot_landscape()

if cmd == "home":
self.press("KEYCODE_HOME")

Expand All @@ -68,13 +68,13 @@ def run(self):

if cmd == "power":
self.press("KEYCODE_POWER")

if self.app.poll() is not None:
self.internal_write(["end"])
#no need to restore rotation, device disconnected
self.running = False
#wait to complete the command

#wait to complete the command
if not self.wait():
self.app.kill()

28 changes: 14 additions & 14 deletions adbmirror/capclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,50 +17,50 @@
class CapClient(MyThread):
def __init__(self, parent):
MyThread.__init__(self)

disp_max = max(parent.size)
dev_max = max(parent.orig)
args = "-P %ux%u@%ux%u/0 -S -Q 80" % (dev_max, dev_max, disp_max, disp_max)
args = "-P %ux%u@%ux%u/0 -S -Q %u" % (dev_max, dev_max, disp_max, disp_max, parent.quality)
cmd = ["adb", "shell", "LD_LIBRARY_PATH=%s %s/minicap %s" % (parent.path, parent.path, args)]
self.server = Popen(cmd)

def cut_data(self, size):
tmp = self.data[:size]
self.data = self.data[size:]
self.data = self.data[size:]
return tmp

def run(self):
sleep(1)
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect(("localhost", 1313))
self.socket.setblocking(0)
self.socket.setblocking(0)

self.running = True
self.state = BANNER

self.data = ""

while self.running:
for msg in self.internal_read():
cmd = msg[0]
if cmd == "end":
self.running = False

try:
data = self.socket.recv(1024 * 1024)
self.data += data
except socket.error, e:
err = e.args[0]
if err == errno.EAGAIN or err == errno.EWOULDBLOCK:
pass

if self.state == BANNER and len(self.data) >= BANNER_SIZE:
banner_data = self.cut_data(BANNER_SIZE)
self.banner = struct.unpack("<BBIIIIIBB", banner_data)
self.state = HEAD
print "Banner"
print self.banner

if self.state == HEAD and len(self.data) >= HEAD_SIZE:
head_data = self.cut_data(HEAD_SIZE)
self.data_size, = struct.unpack("<I", head_data)
Expand All @@ -70,7 +70,7 @@ def run(self):
img_data = self.cut_data(self.data_size)
self.internal_write(["data", img_data])
self.state = HEAD


self.socket.close()
self.server.kill()
10 changes: 5 additions & 5 deletions adbmirror/glue.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,26 @@ def __init__(self):
threading.Thread.__init__(self)
self.q_in = Queue()
self.q_out = Queue()

def read(self):
msgs = []
try:
while True:
msgs.append(self.q_out.get(False))
finally:
finally:
return msgs

return msgs

def write(self, data):
self.q_in.put(data)

def internal_read(self):
msgs = []
try:
while True:
msgs.append(self.q_in.get(False))
finally:
finally:
return msgs

def internal_write(self, data):
Expand Down
Loading