20
JAVA 에에 HID Reader 에에 2014.09 에에 slideshare 에에에 에에 ppt 에 에에에에 에에 . 10 에 에에에에에 에에에 에에에 에에 에에 에에에

HID 리더기를 JAVA로 읽기

  • Upload
    -

  • View
    764

  • Download
    3

Embed Size (px)

Citation preview

Page 1: HID 리더기를 JAVA로 읽기

JAVA 에서 HID Reader 처리

2014.09

담엔 slideshare 용으로 따로 ppt 를 만들어야 겠다 . 10 분 세미나용을 그대로 올리니 여엉 보기 안좋네

Page 2: HID 리더기를 JAVA로 읽기

목 차설치환경

Windows 상의 데이터 Read

Linux 상에서의 데이터 Read

Page 3: HID 리더기를 JAVA로 읽기

설치 환경

Page 4: HID 리더기를 JAVA로 읽기

설치 환경

1. Window

2. Linux

Page 5: HID 리더기를 JAVA로 읽기

Windows 상에서의 데이터 Read

Page 6: HID 리더기를 JAVA로 읽기

HDIAPI Download

https://code.google.com/p/javahidapi/

Page 7: HID 리더기를 JAVA로 읽기

HDIAPI Download

https://code.google.com/p/javahidapi/downloads/list

Page 8: HID 리더기를 JAVA로 읽기

License

License 는 내부 소스를 직접 뜯어고치지 않는 이상 사용 가능

Page 9: HID 리더기를 JAVA로 읽기

Eclipse lib 등록

lib 에 복사하고 해당 jar 파일을 압축을 풀면내부에 각 OS 별 native 파일이 존재한다여기서 win 안의 해당 비트별 dll 파일을 복사하여 옮긴다

Page 10: HID 리더기를 JAVA로 읽기

Eclipse lib 등록

lib 에 복사하고 해당 jar 파일을 압축을 풀면내부에 각 OS 별 native 파일이 존재한다여기서 win 안의 해당 비트별 dll 파일을 복사하여 옮긴다

Page 11: HID 리더기를 JAVA로 읽기

Device Status Read

static{ System.loadLibrary("hidapi-jni-32");}/** * Hid 리스트 정보를 확인한다 * @return */private HIDDeviceInfo[] getDeviceList(){try {HIDDeviceInfo[] devs = HIDManager.getInstance().listDevices();return devs;} catch (IOException e) {e.printStackTrace();}return null; }

public void viewDemo(){HIDDeviceInfo[] list = getDeviceList();if(list != null){for (int i = 0; i < list.length; i++) {System.out.println("PATH : "+list[i].getPath());System.out.println("VENDER ID : "+list[i].getVendor_id());System.out.println("PRODUCT ID : "+list[i].getProduct_id());System.out.println("PRODUCT NAME : "+list[i].getProduct_string());System.out.println("SERIAL NUMBER : "+list[i].getSerial_number());System.out.println("RELEASE NUMBER : "+list[i].getRelease_number());System.out.println("MANUFACTURE NAME: "+list[i].getManufacturer_string());System.out.println("---------------------------------------------");}}}

Page 12: HID 리더기를 JAVA로 읽기

Device Status Read 결과

해당 정보가 인식됨을 확인 할 수 있다

Page 13: HID 리더기를 JAVA로 읽기

Device Read

private void getReadDevice(int venderId,int productId,String serialNumber,int bufSize,int timeout){HIDDevice dev = null;try {dev = HIDManager.getInstance().openById(venderId, productId,serialNumber);if(dev == null){return ;}

byte[] readKey = new byte[]{(byte)0x00, (byte)0x01}; byte[] buf = new byte[bufSize]; boolean isRun = true;while(isRun){ int result = dev.write(readKey); dev.enableBlocking();result = dev.read(buf); checkByteData(buf); try {Thread.sleep(timeout);} catch (InterruptedException e) {e.printStackTrace();} }}catch (HIDDeviceNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{ if(dev != null)try {dev.close();} catch (IOException e) {e.printStackTrace();} } try {HIDManager.getInstance().release();} catch (IOException e) {e.printStackTrace();} }

Page 14: HID 리더기를 JAVA로 읽기

Device Read

단순 READ 기기 말고 HID 의 경우 READ 명령 (ex 0x01) 을 전송하면 READ 를 1 회 반복하는 경우도 있다즉 루프를 통해 연속으로 입력을 가능하게 처리 할 수 있다상세 옵션은 리더기의 정의서 대로 처리한다

Page 15: HID 리더기를 JAVA로 읽기

Device Read 결과

카드 데이터 수신 확인

Page 16: HID 리더기를 JAVA로 읽기

Linux 상에서의 데이터 Read

Page 17: HID 리더기를 JAVA로 읽기

libusb 설치

Linux 는 약간 더 복잡하다 이는 Linux 는 ilbUSB 라는 라이브러리를 연동해야 하기 때문이다https://code.google.com/p/javahidapi/wiki/ReadMe 를 보면다음과 같은 lib 를 install 해야 한다

Page 18: HID 리더기를 JAVA로 읽기

libusb 설치

Ubuntu 의 경우 다음과 같이 설치한다sudo apt-get install libudev-devsudo apt-get install libusb-1.0.0-dev

Page 19: HID 리더기를 JAVA로 읽기

Java 파일 복사 및 실행 준비

디렉토리를 생성하고 각각 파일을 복사한다class 파일 bin/

jar 파일 jar/

so 파일 ( 리눅스 dll) lib/

Page 20: HID 리더기를 JAVA로 읽기

Java 파일 실행

HID Device 를 접근 할 수 있는 권한으로 다음과 같이 실행한다java -Djava.library.path=./lib -cp ./:./bin:./jar/* 실행 클래스

현재까지 발견한 문제는 리눅스에선 little endian 으로 나온다는것 정도다 .

이유는 찾아보지 않았다 . 귀찮거든