def main(): if len(argv) != 3: print "Usage: unpack_bootimage_new.py bootimage.skprx output-dir/" return with open(argv[1], "rb") as fin: data = fin.read() data = data[data.find("SceKernelBootimage") - 4:] base_va = 0x81000000 off = u32(data, 0xCC) - base_va num = u32(data, off) for x in xrange(num): entry_off = off + 8 + 12 * x name_off = u32(data, entry_off) - base_va name = c_str(data[name_off:name_off + 0x100]) basename = name[name.rfind("/") + 1:] start = u32(data, entry_off + 4) - base_va size = u32(data, entry_off + 8) print "Writing {}...".format(name) mod = data[start:start + size] with open(os.path.join(argv[2], basename), "wb") as fout: fout.write(mod)
def slb2_extract(src, dst): with open(src, "rb") as fin: hdr = fin.read(0x200) magic, version, flags, file_count, total_blocks = struct.unpack("<IIIII", hdr[0:20]) if magic != 0x32424C53: raise RuntimeError("Invalid SLB2 file") print "SLB2 version: {}, flags: 0x{:X}, file_count: {}, total_blocks: 0x{:X}".format(version, flags, file_count, total_blocks) for x in range(file_count): entry_start = 0x20 + x * 0x30 entry = hdr[entry_start:entry_start + 0x30] filename = c_str(entry[0x10:]) block_offset, filesize = struct.unpack("<II", entry[0:8]) with open(os.path.join(dst, filename), "wb") as fout: fin.seek(block_offset * 0x200) fout.write(fin.read(filesize)) print "- {}".format(filename) print "-" * 80
def list_dir(self, path, recursive=False, dump_files=False, host_path="", prefix=""): if dump_files: os.mkdir(host_path) ret = self.fh.OpenDirectory(data_base, path, 3) if ret != 0: print "failed to open '{0}', error={1}=0x{1:x}".format(path, ret) return handle = u64(self.mem, 0) while True: self.fh.ReadDirectory(data_base, data_base + 0x200, handle, 1) ret = u64(self.mem, 0) if ret != 1: break entry = self.mem[0x200:0x200 + 0x310] is_file = u32(entry, 0x304) & 1 name = c_str(entry, 0) print "{}{}{}".format(prefix, name, "/" if not is_file else "") fullpath = "{}/{}".format(path, name) if dump_files and is_file: self.dump_file(fullpath, os.path.join(host_path, name)) if recursive and not is_file and ('emoji' not in name): self.list_dir(fullpath, recursive, dump_files, os.path.join(host_path, name), prefix + "-") self.fh.CloseDirectory(handle)
def handleDiscovery(self, dev, is_new_device, is_new_data): if dev.rssi < -128: return if not dev.connectable: return for (sdid, desc, val) in dev.getScanData(): if sdid in [8, 9]: self.index += 1 print('{index}) {val} --> [{addr}]({addr_type}) rssi: {rssi}'. format(index=self.index, val=c_str(val, 'CYAN'), addr=dev.addr, addr_type=dev.addrType, rssi=dev.rssi)) dict_dev = { 'index': self.index, 'name': val, 'addr': dev.addr, 'type_addr': dev.addrType, 'entry': dev } self.listDev.append(dict_dev) if not dev.scanData: print('\t(no data)')
def main(): global brd global stream global ff timeout_sc = 2 n_dev = -1 # Instantiate the parser parser = argparse.ArgumentParser(description='BV_Link_rbpi3 application') # Required positional argument parser.add_argument( 'output_config', type=str, help='[alsa_playback] to playback directly to the speaker.' ' [stl_capture] to create a virtual microphone') parser.add_argument( 'freq_config', type=int, help='[16000] to set 16KHz frequency.[8000] to set 8KHz frequency') args = parser.parse_args() if args.output_config != "alsa_playback" and args.output_config != "stl_capture": parser.error("output_config required, type -h to get more information") if args.freq_config != 16000 and args.freq_config != 8000: parser.error("freq_config required, type -h to get more information") # scanning phase sc = scr.ScanPrint() print(c_str("Scanning for devices...", 'RED')) try: hci0 = 0 Scanner(hci0).withDelegate(sc).scan(timeout_sc) except BTLEException as e: print("/dev/hci0 failed with {}, try /dev/hci1".format(e)) hci0 = 1 Scanner(hci0).withDelegate(sc).scan(timeout_sc) devices = sc.devices if len(devices) > 0: print("Type the index of device to connect (eg. " + str(devices[0].get('index')) + " for " + devices[0].get('name') + " device)...") else: print("no device found") exit() try: n_dev = int(input('Input:')) except ValueError: print(" Not a number") exit() if (n_dev in range(1, len(devices) + 1)) and n_dev > 0: print("Valid device") else: print(" Not valid device") exit() # connection device = devices[n_dev - 1] print('Connecting to {name}...', device.get('name')) brd = stl.Node(device.get('addr'), device.get('type_addr')) print("Connected") brd.syncAudio.enable() brd.syncAudio.enableNotification() brd.mAudio.enable() brd.mAudio.setSyncManager(brd.syncAudio) brd.mAudio.enableNotification() init_audio(args.output_config, args.freq_config) getter = Thread(target=audio_getter) getter.start() player = Thread(target=audio_player) player.start() print('double tap on SensorTile device (for BVLINK1 FW only) ') print('push SW2 button on BlueCoin device (for BVLINK1 FW only) ') print('Start_stream... ') print('Press Ctrl+C to exit') stream.start() signal.signal(signal.SIGINT, signal_handler) while True: if not do_process: break try: brd.waitForNotifications(1.0) except Exception as e: pass del brd
def __init__(self, data): self.uid = u32(data, 4) self.num_segs = u32(data, 0x4C) self.name = c_str(data, 0x24)
def __init__(self, data): self.uid = u32(data, 4) self.name = c_str(data, 8) self.stop_reason = u32(data, 0x74) self.status = u16(data, 0x30) self.pc = u32(data, 0x9C)
from Scanner import ScanPrint as ScanPrintDelegate from bluepy.btle import Scanner from util import c_str scanner = Scanner().withDelegate(ScanPrintDelegate()) devices = scanner.scan(3) for dev in devices: print(c_str('asdf', 'CYAN'), "Device %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi)) for (adtype, desc, value) in dev.getScanData(): print(" (ad: %s)%s = %s" % (adtype, desc, value))