Esempio n. 1
0
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)
Esempio n. 2
0
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
Esempio n. 4
0
    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
Esempio n. 5
0
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)
Esempio n. 6
0
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)
Esempio n. 7
0
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)
Esempio n. 8
0
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)
Esempio n. 9
0
 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,
     )
Esempio n. 10
0
 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')