현재 연결된 USB들의 VID/PID 검출하기

  • 최초 작성일: 2023년 3월 15일 (수)

목차

[TOC]


내용

libusb 라이브러리를 사용하여 컴퓨터에 연결된 USB 장치의 정보를 출력하는 예제 코드이다.

  • 먼저, libusb를 초기화하기 위해 libusb_init() 함수를 호출한다. 이 함수는 libusb 컨텍스트를 초기화하고, 작업을 수행하기 위한 준비를 한다.
  • 다음으로, libusb_get_device_list() 함수를 호출하여 연결된 USB 장치의 리스트를 받아온다. 이 함수는 리스트의 개수를 반환하고, 만약 에러가 발생하면 음수 값을 반환한다.
  • for 루프를 사용하여 리스트에 있는 장치들을 하나씩 확인한다.
  • libusb_get_device_descriptor() 함수를 호출하여 해당 장치의 디스크립터 정보를 가져오며, 이 정보는 libusb_device_descriptor 구조체에 저장된다.
  • 다음으로, 가져온 디스크립터 정보를 출력하여 VID(Vender ID)와 PID(Product ID)를 확인한다.
  • 마지막으로, libusb_free_device_list() 함수를 호출하여 디바이스 리스트를 해제하고, libusb_exit() 함수를 호출하여 libusb를 종료합니다.


소스 1

#include <iostream>
#include <libusb/libusb.h>

int main() {
    libusb_context* ctx;
    libusb_device** devs;
    int r;
    ssize_t cnt;

    r = libusb_init(&ctx);
    if (r < 0) {
        std::cerr << "libusb_init error: " << libusb_error_name(r) << std::endl;
        return r;
    }

    cnt = libusb_get_device_list(ctx, &devs);
    if (cnt < 0) {
        std::cerr << "libusb_get_device_list error: " << libusb_error_name(cnt) << std::endl;
        libusb_exit(ctx);
        return static_cast<int>(cnt);
    }

    for (ssize_t i = 0; i < cnt; i++) {
        libusb_device* device = devs[i];
        libusb_device_descriptor desc;

        int result = libusb_get_device_descriptor(device, &desc);
        if (result >= 0) {
            std::cout << "VID: " << std::hex << static_cast<int>(desc.idVendor) << ", PID: " << static_cast<int>(desc.idProduct) << std::endl;
        }
    }

    libusb_free_device_list(devs, 1);
    libusb_exit(ctx);
    return 0;
}

결과

image