diff options
Diffstat (limited to 'fb2png/ascreenshooter.py')
-rw-r--r-- | fb2png/ascreenshooter.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/fb2png/ascreenshooter.py b/fb2png/ascreenshooter.py new file mode 100644 index 000000000..1e994840e --- /dev/null +++ b/fb2png/ascreenshooter.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import socket +import sys +import struct +import time + +# debug +VERBOSE = True + +def D(msg): + if VERBOSE: print(msg) + +# "struct fbinfo" is defined in $T/system/core/adb/framebuffer_service.c +def fbinfo_unpack(data): + keys = ("version", + "bpp", + "size", + "width", + "height", + "red_offset", + "red_length", + "blue_offset", + "blue_length", + "green_offset", + "green_length", + "alpha_offset", + "alpha_length" + ) + # the data is little-endian + values = struct.unpack("<IIIIIIIIIIIII",data) + + D("dump struct fbinfo") + i = 0 + for key in keys: + D("%14s: %-12d" % (key, values[i])) + i = i + 1 + + + +def save(): + f = open('dump', 'w') + while True: + data = s.recv(4096 * 16) + if data == "": + break + f.write(data) + f.close() + + +def communicate(cmd=None): + if cmd != None: + buf = "%04x%s" % (len(cmd), cmd) + D("<< " + buf) + s.send(buf) + data = s.recv(4096) + + D(">> [%s]" % len(data)) + D(data) + + if data[0:4] == 'FAIL': + return False + else: + return True + + +target = '' +# use getopt module in future +for arg in sys.argv: + if arg == '-q': + VERBOSE = False + if target != 'any': + # compatiable with "adb -d", redirect commands to usb + if arg == '-d': + target = 'usb' + # compatiable with "adb -e", redirect commands to emulator + elif arg == '-e': + target = 'local' + +if target == '': target ='any' + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +D("connecting") +try: + s.connect(("localhost", 5037)) +except socket.error: + print 'Cannot connect to localhost:5037' + print socket.error + sys.exit(0) + +D("connected") + +if not communicate("host:transport-%s" % target): + sys.exit(1) +#communicate("host:transport-usb:shell:ls /data") +communicate("framebuffer:") + +data = s.recv(52) +fbinfo_unpack(data) + +t0 = float(time.time()) +save() +t1 = float(time.time()) +print t1 - t0 + |