libusb 라이브러리를 이용하여 usb에 연결된 장치를 검사하는 방법이다.
1. libusb 소스 빌드
위사이트에서 libusb-1.0.26 소스를 내려받아 다음과 같이 빌드하고 설치한다.
chmod 777 configure
./configure
make
make install
개발하는 소스의 Make파일에 헤더와 라이브러리 경로 추가
CFLAGS, LDFLAGS에 설치한 파일 위치를 추가한다.
CFLAGS += -I./libusb-1.0/ilibusb/libusb.h
LDFLAGS += lusb-1.0
2. 검사함수 작성
#include <libusb-1.0/libusb.h>
#define BLUETOOTH_VENDOR_ID 0x0a12 // 블루투스 동글의 벤더 ID
int check_bt_donggle() {
libusb_device **devs;
libusb_context *ctx = NULL;
ssize_t count;
int i;
int bluetooth_device_found = 0;
// libusb 초기화
if (libusb_init(&ctx) < 0) {
perror("Error initializing libusb");
return -1;
}
// USB 장치 목록 가져오기
count = libusb_get_device_list(ctx, &devs);
if (count < 0) {
perror("Error getting USB device list");
libusb_exit(ctx);
return -2;
}
// USB 장치 목록 탐색
for (i = 0; i < count; i++) {
struct libusb_device_descriptor desc;
libusb_device *dev = devs[i];
// USB 장치의 디스크립터 가져오기
if (libusb_get_device_descriptor(dev, &desc) < 0) {
perror("Error getting device descriptor");
continue;
}
// 블루투스 동글인지 확인
if (desc.idVendor == BLUETOOTH_VENDOR_ID) {
printf("Bluetooth dongle found.\n");
bluetooth_device_found = 1;
break;
}
}
// 블루투스 동글이 없는 경우 메시지 출력
if (!bluetooth_device_found) {
printf("Bluetooth dongle not found.\n");
return -3;
}
// USB 장치 목록 해제 및 libusb 종료
libusb_free_device_list(devs, 1);
libusb_exit(ctx);
return 0;
}
간단한 코드지만 아주 정확히 잘 동작한다.
'IT > 리눅스' 카테고리의 다른 글
리눅스 쉘스크립트로 MAC 주소 가져오기(MAC 값으로 hostname 변경) (0) | 2023.06.13 |
---|---|
리눅스 호스트 네임 변경하기(hostname, hostnamectl) (0) | 2023.06.13 |
파일 전송 프로토콜 개념과 유용한 프로그램(filezilla, winscp, cyberduck) (0) | 2023.05.31 |
우분투 패키지 찾기, 설치없이 다운로드 하기(수동 설치, dpkg 사용법) (0) | 2023.05.24 |
DNS 서버란 무엇인가? 알려진 DNS 서버들(네임서버) (0) | 2023.05.19 |