diff --git a/VendServer/MIFAREDriver.py b/VendServer/MIFAREDriver.py index b28c5915dab9ba082e42c2f44fab2a3341ae4c02..a52a89115883b8d18f6574f805625ee3d8515995 100644 --- a/VendServer/MIFAREDriver.py +++ b/VendServer/MIFAREDriver.py @@ -101,8 +101,14 @@ class MIFAREReader: card_type = card_type_response[3:5] if card_type == '\x44\x00': # MIFARE UltraLight - raise NotImplementedError, "UltraLight card selected - no functions available" - + #raise NotImplementedError, "UltraLight card selected - no functions available" + # HACK by JAH: The response format isn't fully known yet (official driver reads 7 bytes from offset +9 in the raw response) + # - This code effectively reads all bytes after +9 (AA, BB, len, and three skilled by `send_packet`, then three skipped here) + # - Official driver has `AA` bytes followed by `00` (encoded/decoded) + command = '\x12\x02' + serial = self.send_packet(command)[3:] + capacity = 0 + return (serial, capacity) else: # Otherwise, must be a standard MIFARE card. # Anticollision @@ -112,11 +118,11 @@ class MIFAREReader: # Select the card for use try: - select_response = self.send_packet('\x03\x02' + serial) - capacity = ord(select_response[3]) + select_response = self.send_packet('\x03\x02' + serial) + capacity = ord(select_response[3]) except IndexError: - logging.warning('Tried to select card but failed: card_type %s, serial %s, select_response %s' % (card_type.__repr__(), serial.__repr__(), select_response.__repr__())) - capacity = 0 + logging.warning('Tried to select card but failed: card_type %s, serial %s, select_response %s' % (card_type.__repr__(), serial.__repr__(), select_response.__repr__())) + capacity = 0 return (serial, capacity) def sector_login(self, blockvect, key, keytype=0):