2017-10-26 20 views
0

POC 용 ISO-7811 스펙의 마그네틱 카드를 읽고 쓸 수있는 (매우 긴밀하게 제한된) tkinter 애플리케이션을 작성해야했습니다. 언급 된 표준을 준수하는 MSR605x 인코더를 사용하고 있습니다.pywinusb HID 마그네 스트라이프 카드 엔코더에 쓰기

지금까지 인코더를 읽기 모드로 설정하고 기능 보고서를 사용하고 필요한 원시 데이터 명령을 설정하여 카드를 다시 읽을 수있었습니다.

기능 보고서를 사용하여 지정된 제어 명령과 작성한 데이터 BLOB를 보내어 쓰기 모드로 설정할 수 없습니다. 내가 이해하는 바와 같이이 장치는 인터페이스 할 수있는 보고서 유형을 결정합니다. 문제의 기기는 출력과 기능이라는 두 가지를 지정합니다.

행운을 남기지 않고 출력 보고서를 시도했습니다. 이상적으로는 장치가 HID가 아닌 COM 포트를 사용하는 것을 선호하지만 그 주위에는 방법이없는 것 같습니다.

시도해 볼 수있는 라이브러리가 있습니까? 아니면 구현시 누락 된 것이 있습니까? 내 스크래치 코드를 추가 한 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() 

답변

0

전송할 제어 문자를 알았습니다. 아직 기능 보고서 만 사용 중입니다. 이것은 3 = 3? 두 번째 매 지 스트립에.

cmd = (0x00, 
0x1B, 
0x61, 
0x1B, 
0x77, 
0x1B, 
0x73, 
0x1B, 
0x02, 
0x33, 
0x3D, 
0x33, 
0x3F, 
0x1C, 
)