MagRead/read.py

68 lines
1.7 KiB
Python
Executable File

#! /usr/bin/python
import hid
def get_readers():
return [item for item in hid.enumerate() if item["manufacturer_string"]=="Mag-Tek"]
def get_device_from_reader(reader):
return hid.Device(reader["vendor_id"], reader["product_id"])
def get_device_from_readers(readers):
if len(readers) == 0:
print("No Mag-Tek reader detected - Quiting")
return
elif len(readers) > 1:
devices = []
for i in range(len(readers)):
try:
a = readers[i]
dev = hid.Device(a["vendor_id"],a["product_id"])
devices.append(dev)
print(f"{i})\t\'{dev.manufacturer} {dev.product}\' - {'nonblocking' if dev.nonblocking else 'blocking'}")
except:
devices.append(None)
return devices[int(input( "Enter desired reader number" ))]
return get_device_from_reader(readers[0])
def read(device):
print("Waiting for swipe...")
return device.read(256)[3:]
def parse_raw_data(raw_data):
END_CHAR = ";"
START_CHAR = "%"
SPLIT_CHAR = b"?"
print(raw_data)
tracks = raw_data.split(SPLIT_CHAR)
print(tracks)
return
data = raw_data.decode()
end = end if end != -1 else len(data)
tracks = data[start:end].replace('\x00','').replace("\x10","").split(SPLIT_CHAR)
final_output = [track for track in tracks if len(track)!=0]
return final_output
def main():
readers = get_readers()
device = get_device_from_readers(readers)
if device is None:
return
while True:
raw_data = read(device)
print(parse_raw_data(raw_data))
print()
if __name__ == "__main__":
main()