Upload
-
View
764
Download
3
Embed Size (px)
Citation preview
JAVA 에서 HID Reader 처리
2014.09
담엔 slideshare 용으로 따로 ppt 를 만들어야 겠다 . 10 분 세미나용을 그대로 올리니 여엉 보기 안좋네
목 차설치환경
Windows 상의 데이터 Read
Linux 상에서의 데이터 Read
설치 환경
설치 환경
1. Window
2. Linux
Windows 상에서의 데이터 Read
HDIAPI Download
https://code.google.com/p/javahidapi/
HDIAPI Download
https://code.google.com/p/javahidapi/downloads/list
License
License 는 내부 소스를 직접 뜯어고치지 않는 이상 사용 가능
Eclipse lib 등록
lib 에 복사하고 해당 jar 파일을 압축을 풀면내부에 각 OS 별 native 파일이 존재한다여기서 win 안의 해당 비트별 dll 파일을 복사하여 옮긴다
Eclipse lib 등록
lib 에 복사하고 해당 jar 파일을 압축을 풀면내부에 각 OS 별 native 파일이 존재한다여기서 win 안의 해당 비트별 dll 파일을 복사하여 옮긴다
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("---------------------------------------------");}}}
Device Status Read 결과
해당 정보가 인식됨을 확인 할 수 있다
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();} }
Device Read
단순 READ 기기 말고 HID 의 경우 READ 명령 (ex 0x01) 을 전송하면 READ 를 1 회 반복하는 경우도 있다즉 루프를 통해 연속으로 입력을 가능하게 처리 할 수 있다상세 옵션은 리더기의 정의서 대로 처리한다
Device Read 결과
카드 데이터 수신 확인
Linux 상에서의 데이터 Read
libusb 설치
Linux 는 약간 더 복잡하다 이는 Linux 는 ilbUSB 라는 라이브러리를 연동해야 하기 때문이다https://code.google.com/p/javahidapi/wiki/ReadMe 를 보면다음과 같은 lib 를 install 해야 한다
libusb 설치
Ubuntu 의 경우 다음과 같이 설치한다sudo apt-get install libudev-devsudo apt-get install libusb-1.0.0-dev
Java 파일 복사 및 실행 준비
디렉토리를 생성하고 각각 파일을 복사한다class 파일 bin/
jar 파일 jar/
so 파일 ( 리눅스 dll) lib/
Java 파일 실행
HID Device 를 접근 할 수 있는 권한으로 다음과 같이 실행한다java -Djava.library.path=./lib -cp ./:./bin:./jar/* 실행 클래스
현재까지 발견한 문제는 리눅스에선 little endian 으로 나온다는것 정도다 .
이유는 찾아보지 않았다 . 귀찮거든