pywinusb写入HID磁条卡编码器
pywinusb Write to HID magstripe card encoder
我的任务是创建一个(非常严格的时间限制)tkinter 应用程序,它可以为 POC 读写 ISO-7811 规格的磁卡。我使用的是符合上述标准的 MSR605x 编码器。
到目前为止,我已经能够将编码器设置为读取模式,并使用功能报告和设置所需的原始数据命令读回刷卡。
我无法通过使用功能报告发送指定的控制命令和我想要写入卡的数据块来让编码器进入写入模式。据我了解,该设备决定了它可以与之交互的报告类型。有问题的设备指定两个:输出和功能。
我尝试输出报告但没有成功。理想情况下,我更希望设备使用 COM 端口而不是 HID,但似乎没有办法解决这个问题。
有没有我可以尝试的不同的库,或者我的实现是否遗漏了什么?
这是我为设备找到的一些文档:http://carddevicestore.com/files/msr605_user_manual.pdf
我已经添加了我的刮刮代码。任何见解将不胜感激。
import pywinusb.hid as hid
import time
def sample_handler(data):
print("Raw data: {0}".format(data))
filter = hid.HidDeviceFilter(vendor_id=0x0801, product_id=0x0003)
devices = filter.get_devices()
if devices:
device = devices[0]
print "success"
device.open()
device.set_raw_data_handler(sample_handler)
out_report = device.find_feature_reports()[0]
cmd = (0x00,
0x1B,
0x61,
0x1B,
0x65,
0x1B,
0x61,
0x1B,
0x77,
0x1B,
0x73,
0x1B,
0x01,
0x41,
0x42,
0x43,
0x31,
0x32,
0x33,
0x1B,
0x02,
0x31,
0x32,
0x33,
0x34,
0x35,
0x1B,
0x03,
0x31,
0x32,
0x33,
0x34,
0x35,
0x3F,
0x1C
)
buffer = [0x00] * 65
i = 0
for x in cmd:
buffer[i] = x
i += 1
print buffer
out_report.set_raw_data(buffer)
out_report.send()
count = 0
while device.is_plugged() and count < 10:
time.sleep(0.5)
count += 1
device.close()
我想出了要发送哪些控制字符。仍然只使用功能报告。这转化为 ;3=3?在磁条的第二轨道上。
cmd = (0x00,
0x1B,
0x61,
0x1B,
0x77,
0x1B,
0x73,
0x1B,
0x02,
0x33,
0x3D,
0x33,
0x3F,
0x1C,
)
我的任务是创建一个(非常严格的时间限制)tkinter 应用程序,它可以为 POC 读写 ISO-7811 规格的磁卡。我使用的是符合上述标准的 MSR605x 编码器。
到目前为止,我已经能够将编码器设置为读取模式,并使用功能报告和设置所需的原始数据命令读回刷卡。
我无法通过使用功能报告发送指定的控制命令和我想要写入卡的数据块来让编码器进入写入模式。据我了解,该设备决定了它可以与之交互的报告类型。有问题的设备指定两个:输出和功能。
我尝试输出报告但没有成功。理想情况下,我更希望设备使用 COM 端口而不是 HID,但似乎没有办法解决这个问题。
有没有我可以尝试的不同的库,或者我的实现是否遗漏了什么?
这是我为设备找到的一些文档:http://carddevicestore.com/files/msr605_user_manual.pdf
我已经添加了我的刮刮代码。任何见解将不胜感激。
import pywinusb.hid as hid
import time
def sample_handler(data):
print("Raw data: {0}".format(data))
filter = hid.HidDeviceFilter(vendor_id=0x0801, product_id=0x0003)
devices = filter.get_devices()
if devices:
device = devices[0]
print "success"
device.open()
device.set_raw_data_handler(sample_handler)
out_report = device.find_feature_reports()[0]
cmd = (0x00,
0x1B,
0x61,
0x1B,
0x65,
0x1B,
0x61,
0x1B,
0x77,
0x1B,
0x73,
0x1B,
0x01,
0x41,
0x42,
0x43,
0x31,
0x32,
0x33,
0x1B,
0x02,
0x31,
0x32,
0x33,
0x34,
0x35,
0x1B,
0x03,
0x31,
0x32,
0x33,
0x34,
0x35,
0x3F,
0x1C
)
buffer = [0x00] * 65
i = 0
for x in cmd:
buffer[i] = x
i += 1
print buffer
out_report.set_raw_data(buffer)
out_report.send()
count = 0
while device.is_plugged() and count < 10:
time.sleep(0.5)
count += 1
device.close()
我想出了要发送哪些控制字符。仍然只使用功能报告。这转化为 ;3=3?在磁条的第二轨道上。
cmd = (0x00,
0x1B,
0x61,
0x1B,
0x77,
0x1B,
0x73,
0x1B,
0x02,
0x33,
0x3D,
0x33,
0x3F,
0x1C,
)