[c++] libusb를 활용한 데이터 송수신
libusb는 USB 장치를 다루기 위한 C 언어 라이브러리로, USB 드라이버를 직접 다룰 수 있게 해줍니다. 이 라이브러리를 사용하여 USB 장치와 데이터를 송수신하는 방법을 알아보겠습니다.
libusb 설치
libusb를 사용하기 위해서는 먼저 해당 라이브러리를 시스템에 설치해야 합니다. 보통의 경우, libusb
패키지를 시스템 패키지 관리자를 통해 설치할 수 있습니다.
libusb로 USB 장치 찾기
USB 장치를 다루기 위해서는 먼저 해당 장치를 찾아야 합니다. libusb를 사용하여 USB 장치를 찾는 방법은 다음과 같습니다.
#include <libusb-1.0/libusb.h>
int main() {
libusb_device **devs;
libusb_context *ctx = NULL;
ssize_t cnt;
// libusb 초기화
int r = libusb_init(&ctx);
if(r < 0) {
return r;
}
// 장치 리스트 가져오기
cnt = libusb_get_device_list(ctx, &devs);
if(cnt < 0) {
return (int) cnt;
}
//...
// libusb 정리
libusb_free_device_list(devs, 1);
libusb_exit(ctx);
return 0;
}
위 코드는 libusb를 사용하여 USB 장치를 찾는 간단한 예제입니다.
데이터 송수신
USB 장치를 찾았다면, 이제 해당 장치로부터 데이터를 읽거나 데이터를 보낼 수 있습니다. libusb를 사용하여 데이터를 송수신하는 방법은 다음과 같습니다.
int main() {
//...
// USB 통신 설정
libusb_device_handle *dev_handle;
dev_handle = libusb_open_device_with_vid_pid(ctx, VENDOR_ID, PRODUCT_ID);
if(dev_handle == NULL) {
return -1;
}
// 데이터 전송
unsigned char data[64];
int transferred;
int r = libusb_bulk_transfer(dev_handle, ENDPOINT_OUT, data, sizeof(data), &transferred, TIMEOUT);
if(r == 0 && transferred == sizeof(data)) {
// 전송 성공
} else {
// 전송 실패
}
// 데이터 수신
r = libusb_bulk_transfer(dev_handle, ENDPOINT_IN, data, sizeof(data), &transferred, TIMEOUT);
if(r == 0) {
// 수신 성공
} else {
// 수신 실패
}
libusb_close(dev_handle);
//...
return 0;
}
위 코드는 libusb를 사용하여 USB 장치로부터 데이터를 송수신하는 간단한 예제입니다.
libusb를 사용하면 USB 장치와 데이터를 손쉽게 다룰 수 있으며, 커널 드라이버의 수정 없이도 USB 통신을 수행할 수 있습니다.
자세한 내용은 libusb 공식 사이트에서 확인할 수 있습니다.