Пример #1
0
 def _read_month(self):
     return bcd_to_int(self._read(self._REG_MONTH))
Пример #2
0
 def _read_year(self):
     return bcd_to_int(self._read(self._REG_YEAR))
Пример #3
0
 def _read_day(self):
     return bcd_to_int(self._read(self._REG_DAY))
Пример #4
0
 def _read_date(self):
     return bcd_to_int(self._read(self._REG_DATE))
Пример #5
0
 def _read_minutes(self):
     return bcd_to_int(self._read(self._REG_MINUTES))
Пример #6
0
 def _read_hours(self):
     d = self._read(self._REG_HOURS)
     if (d == 0x64):
         d = 0x40
     return bcd_to_int(d & 0x3F)
Пример #7
0
 def _read_year(self):
     return bcd_to_int(self._read(self._REG_YEAR))
Пример #8
0
 def _read_seconds(self):
     return bcd_to_int(self._read(self._REG_SECONDS))
Пример #9
0
 def _read_date(self):
     return bcd_to_int(self._read(self._REG_DATE))
Пример #10
0
 def _read_month(self):
     return bcd_to_int(self._read(self._REG_MONTH))
Пример #11
0
 def _read_day(self):
     return bcd_to_int(self._read(self._REG_DAY))
Пример #12
0
 def _read_hours(self):
     d = self._read(self._REG_HOURS)
     if (d == 0x64):
         d = 0x40
     return bcd_to_int(d & 0x3F)
Пример #13
0
 def _read_minutes(self):
     return bcd_to_int(self._read(self._REG_MINUTES))
Пример #14
0
 def _read_seconds(self):
     return bcd_to_int(self._read(self._REG_SECONDS))
Пример #15
0
def hex_to_data(hex_data, encode, decode):
    """ Converte dados codificados em hexadecimal para o formato
    original.

    Parâmetros
    ----------
    hex_data : str
        string hexadecimal, cujo conteúdo original se pretende
        recuperar
    
    encode : str
        string que especifica a codificação utilizada
    
    decode : str
        string que especifica o tipo de dados original

    Retorna
    -------
    content : str/int
        conteúdo de 'hex_data', convertido para o seu formato
        original
    
    Levanta
    -------
    Exception
        se formato de categorias está incorreto
    """

    # Codificação BCD
    if encode and encode.upper() == 'BCD':
        if decode and decode.upper() == 'INT':
            content = bcd.bcd_to_int(hex_to_bin(hex_data))
        else:
            content = str(bcd.bcd_to_int(hex_to_bin(hex_data)))

    # Sem codificação
    elif encode and encode.upper() == 'NO_ENCODE':
        if decode and decode.upper() == 'INT':
            content = int(hex_data)
        else:
            content = hex_data

    # Codificação das categorias
    elif encode and encode.upper() == 'CATEGORIES_ENCODE':
        try:
            # C1;20000315;20100314;S01;<=;38303030
            hex_fields = hex_data.split(';'.encode('latin-1').hex())
            content = bytes.fromhex(hex_fields[0]).decode('latin-1') + ';' +\
                      hex_fields[1] + ';' +\
                      hex_fields[2] + ';' +\
                      bytes.fromhex(hex_fields[3]).decode('latin-1') + ';' +\
                      bytes.fromhex(hex_fields[4]).decode('latin-1') + ';' +\
                      hex_fields[5]
        except:
            print('ERROR: Wrong categories format.')
            sys.exit(1)

    # Codificação dos data groups e respetivas tags
    elif encode and encode.upper() == 'DG_TAGS_ENCODE':
        content = {}
        try:
            hex_data = hex_data.upper()
            while hex_data:
                # Extrai data group
                dg_hex = hex_data[:2]
                dg = hex_to_int(dg_hex)
                if dg_hex in DG_TAGS:
                    hex_data = hex_data[2:]
                    # Extrai tag do data group
                    if hex_data[:2] == DG_TAGS[dg_hex]:
                        content[dg] = DG_TAGS[dg_hex]
                        hex_data = hex_data[2:]
                    else:
                        print('ERROR: Wrong tag detected.')
                        sys.exit(1)
                else:
                    print('ERROR: Wrong data group detected.')
                    sys.exit(1)
        except:
            print('ERROR: Wrong data group or tags format.')
            sys.exit(1)

    # Codificação dos data groups e respetivas tags (EF.COM)
    elif encode and encode.upper() == 'DG_TAGS_LIST_ENCODE':
        content = []
        all_tags = list(DG_TAGS.values())
        try:
            hex_data = hex_data.upper()
            i = 0
            for j in range(2, len(hex_data) + 1, 2):
                tag = hex_data[i:j]
                if not tag in all_tags:
                    print('ERROR: Wrong tag detected.')
                    sys.exit(1)
                content.append(tag)
                i = j
        except:
            print('ERROR: Wrong data group or tags format.')
            sys.exit(1)

    # Codificação dos Biometric Data Block
    elif encode and encode.upper() == 'BDB_ENCODE':
        try:
            content = bytes.fromhex(hex_data)
        except:
            print('ERROR: Wrong BDB format.')
            sys.exit(1)

    # Codificação da versão para o EF.COM
    elif encode and encode.upper() == 'VERSION_ENCODE':
        try:
            content = ''
            content += f"{hex_to_int(hex_data[:2]):02d}"
            content += f"{hex_to_int(hex_data[2:]):02d}"
        except:
            print('ERROR: Wrong version format.')
            sys.exit(1)

    # Codificação por defeito
    else:
        if decode and decode.upper() == 'INT':
            content = hex_to_int(hex_data)
        else:
            content = bytes.fromhex(hex_data).decode()

    return content