카테고리 보관물: Kernel (Embedded)

LIBUSB 의 오류처리 방법

일단 LIBUSB 만든분 천재 라고 찬양한번 하고 가자!

 

LIBUSB 는 정말 잘 만들어진 라이브러리임이 틀림없다.

 

또 윈도우, Mac OS, Linux, Embedded Linux 등 이식성도 좋다는 것.

 

물론 전용 USB 장치 드라이버를 사용할 때 보다는 USB의 다양한 전송모드를 사용하는데는 제약이 따르지만 Bulk 전송에는 전혀 문제가 없다. (Control, Interrupt 도 지원은 한다.)

 

필자는 LIBUSB 로 SmartCard Reader 제어 라이브러리를 개발하면서 사용자들이 만들어낼 수 있는 여러가지 액션에 대해서 생각하면서 제어 라이브러리를 만들다 보니 오류처리에 대해 대단히 궁금했다.

소프트웨어 사용 중 사용자가 USB Device 를 포트에서 강제 제거했다고 가정해보자.

LIBUSB 는 함수 호출 시 리턴 값으로 오류를 알려주게 된다.

usb_bulk_read() 함수를 호출 했을 때, 수신된 데이터 바이트 수를 0 이상의 값으로 리턴하도록 되어있다.

오류 발생시에는 0 미만의 오류코드를 리턴하게 되어있고, 이 오류코드는 errno.h 라는 헤더에 모두 정의되어있다.

물론 errno.h 헤더는 컴파일러에 기본 포함되어있는 오류코드가 Define 되어있다.

또 오류 메세지에 대한 문자열 값을 usb_strerror() 함수로 얻을 수도 있다.

errno.h 헤더에 보면 에러코드 19(ENODEV) 가 장치를 찾을 수 없다는 오류코드인데 LIBUSB 는 -19 를 리턴한다.

또 흔히 나타나는 코드로 110(ETIMEDOUT) 코드 또한 errno.h 에 있다.

 

LIBUSB 라이브러리… 정말 쓰기 쉽고, 강력하며, 플랫폼에 관계없이 이식성 좋은 라이브러리는 정말 오랜만에 만나보는 것 같다.