def parse_03(data): names = ('login', 'hash') login_len, data = parse_cui(data) login, data = data[:login_len], data[login_len:] hash_len, data = parse_cui(data) hash, data = data[:hash_len], data[hash_len:] unk, data = ord(data[0]), data[1:] assert not unk len_added, data = parse_cui(data) added, data = data[:len_added], data[len_added:] assert added == '\xff' * 4, utils.bin2hex(added) assert not data, utils.bin2hex(data) loc = locals() return dict((name, loc[name]) for name in names)
def _loop(self): """ Threaded loop for reading data from the device. """ if not self._connected: return False self.ser.read(100) self.ser.write('r') self.ser.write('a') self.ser.write('t') self.ser.write('\x0d') resp = self.ser.read(33)[0:-1].split('_') if resp.__len__() is not 6 or resp in self.tags: return True self.tags.append(resp) anbit_bin = utils.dec2bin(int(resp[2])) reserved_bin = '00000000000000' databit_bin = utils.dec2bin(int(resp[3])) country_bin = utils.dec2bin(int(resp[0])) while country_bin.__len__() < 10: country_bin = '0' + country_bin id_bin = utils.dec2bin(int(resp[1])) while id_bin.__len__() < 10: id_bin = '0' + id_bin tag_bin = anbit_bin + reserved_bin + databit_bin + country_bin + id_bin data = utils.bin2hex(tag_bin) self.emit("tag-read", data) self.last_tag = data # sleep(1) return True
def _loop(self): """ Threaded loop for reading data from the device. """ if not self._connected: return False self.ser.read(100) self.ser.write('r') self.ser.write('a') self.ser.write('t') self.ser.write('\x0d') resp = self.ser.read(33)[0:-1].split('_') if resp.__len__() is not 6 or resp in self.tags: return True self.tags.append(resp) anbit_bin = utils.dec2bin(int(resp[2])) reserved_bin = '00000000000000' databit_bin = utils.dec2bin(int(resp[3])) country_bin = utils.dec2bin(int(resp[0])) while country_bin.__len__() < 10: country_bin = '0' + country_bin id_bin = utils.dec2bin(int(resp[1])) while id_bin.__len__() < 10: id_bin = '0' + id_bin tag_bin = anbit_bin + reserved_bin + databit_bin + country_bin + id_bin data = utils.bin2hex(tag_bin) self.emit("tag-read", data) self.last_tag = data #sleep(1) return True
def parse_02(data): names = ('key', ) key_len, data = parse_cui(data) key, data = data[:key_len], data[key_len:] unk, data = ord(data[0]), data[1:] assert not unk assert not data, utils.bin2hex(data) loc = locals() return dict((name, loc[name]) for name in names)
def parse_01(data): names = ('key', 'version', 'auth_type', 'crc', 'msg_code') key_len, data = parse_cui(data) key, data = data[:key_len], data[key_len:] version, data = tuple(ord(i) for i in data[:4]), data[4:] auth_type, data = parse_cui(data) assert auth_type is 0, "Unsupported auth_type %s" % auth_type crc_len, data = parse_cui(data) crc, data = data[:crc_len], data[crc_len:] msg_code, data = parse_cui(data) assert not data, utils.bin2hex(data) loc = locals() return dict((name, loc[name]) for name in names)
def __str__(self): if self.name: name_str = ' [%s]' % self.name else: name_str = '' obj_val = self.get_value() if isinstance(obj_val, list): val = ', '.join(map(str, obj_val)) else: val = utils.bin2hex(obj_val) return 'option(t=%i%s, l=%i): %s' % ( self.option, name_str, self.len, val, )
def __init__(self, bin_val=None, colon_hex_str=None, pure_hex_str=None, num_val=None): ''' MACAddres constructor: accepts one of these arguments: bin_val = '\x00\x19\xe3\x02\xd9\x2b' colon_hex_str = '00:19:e3:02:d9:2b' pure_hex_str = '0019e302d92b' or '19e302d92b' num_val = 111182797099 or 0x19e302d92b ''' self.num_val = None if bin_val is not None: pure_hex_str = bin2hex(bin_val, '') if colon_hex_str is not None: pure_hex_str = ''.join([ch for ch in colon_hex_str if ch.isalnum()]) if pure_hex_str is not None: self.num_val = int(pure_hex_str, 16) if num_val is not None: self.num_val = num_val if self.num_val is None: raise Exception('Missing arguments')