This repository has been archived on 2025-06-22. You can view files and clone it, but cannot push or open issues or pull requests.
libusbModule/main.c
kylin_bg 4bba36cdb9 1. main函数测试libusb传输功能;
2. liusbmod目前可以打印抓取到传输的数据是什么;打印只能打印16个字节
2025-06-02 23:00:30 +08:00

62 lines
1.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include <libusb-1.0/libusb.h>
#define VENDOR_ID 0x1a86 // 替换为你的设备 VID
#define PRODUCT_ID 0x55de // 替换为你的设备 PID
#define BULK_EP_OUT 0x06 // OUT端点地址低位为0表示OUT
#define INTERFACE_NUMBER 4 // USB接口编号
int main(void) {
libusb_device_handle *handle = NULL;
int r;
int transferred;
unsigned char send_data[] = {0x01, 0x02, 0x03, 0x04, 0x05}; // 要发送的数据
// 初始化libusb
r = libusb_init(NULL);
if (r < 0) {
fprintf(stderr, "Failed to init libusb: %s\n", libusb_error_name(r));
return EXIT_FAILURE;
}
// 打开设备
handle = libusb_open_device_with_vid_pid(NULL, VENDOR_ID, PRODUCT_ID);
if (!handle) {
fprintf(stderr, "Failed to open device\n");
libusb_exit(NULL);
return EXIT_FAILURE;
}
// 获取接口权限可选部分系统如Linux必须
if (libusb_kernel_driver_active(handle, INTERFACE_NUMBER)) {
libusb_detach_kernel_driver(handle, INTERFACE_NUMBER);
}
r = libusb_claim_interface(handle, INTERFACE_NUMBER);
if (r < 0) {
fprintf(stderr, "Failed to claim interface: %s\n", libusb_error_name(r));
libusb_close(handle);
libusb_exit(NULL);
return EXIT_FAILURE;
}
// 发送数据Bulk OUT
r = libusb_bulk_transfer(handle, BULK_EP_OUT, send_data, sizeof(send_data), &transferred, 1000);
if (r == 0) {
printf("Sent %d\n", transferred);
if (transferred != sizeof(send_data)) {
fprintf(stderr, "Warning: Only %d of %zu bytes sent\n", transferred, sizeof(send_data));
}
} else {
fprintf(stderr, "Failed to send data: %s\n", libusb_error_name(r));
}
// 释放接口 & 关闭
libusb_release_interface(handle, INTERFACE_NUMBER);
libusb_close(handle);
libusb_exit(NULL);
return EXIT_SUCCESS;
}