c# - 如何将数据从 Windows 发送到 HID 键盘?
问题描述
我正在尝试使用 c# 中的 Visual Studio 将数据从 Windows 发送到我的 STM32F103C8T6 CustomHID 键盘。
我尝试了许多不起作用的库和东西。就像这个,这是最容易实现的: http: //www.florian-leitner.de/index.php/2007/08/03/hid-usb-driver-library/经过多次尝试,我发现发送数据确实不适用于具有此库的键盘设备。在这种状态下,应用程序只能检测设备是否连接,发送数据不起作用。
描述符 (79):
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x95, 0x05, // REPORT_COUNT (5)
0x75, 0x01, // REPORT_SIZE (1)
0x05, 0x08, // USAGE_PAGE (LEDs)
0x19, 0x01, // USAGE_MINIMUM (Num Lock)
0x29, 0x05, // USAGE_MAXIMUM (Kana)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x03, // REPORT_SIZE (3)
0x91, 0x03, // OUTPUT (Cnst,Var,Abs)
0x95, 0x06, // REPORT_COUNT (6)
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x65, // LOGICAL_MAXIMUM (101)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x04, // REPORT_COUNT (4)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
处理接收部分的部分代码:
static int8_t CUSTOM_HID_OutEvent_FS(uint8_t *buffer)
{
/* USER CODE BEGIN 6 */
if(buffer[1] == 0x01 || buffer[1] == 1 || buffer[1] == '1' || buffer[2] == 0x01 || buffer[2] == 1 || buffer[2] == '1')
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, 1);
}
return (USBD_OK);
/* USER CODE END 6 */
}
带有 USBHIDDRIVER.dll(Florian 的库)的 Visual Studio 部分:
USBHIDDRIVER.USBInterface usb = new USBInterface("vid_0483", "pid_5750");
public Form1()
{
InitializeComponent();
if (usb.Connect())
MessageBox.Show("Connecté!");
else
MessageBox.Show("Deconnecté");
}
private void button1_Click(object sender, EventArgs e)
{
byte[] Buffer = new byte[64];
for(int i = 0; i>=64; i++)
{
Buffer[i] = 1;
}
usb.write(Buffer);
}
考虑到我是初学者,感谢您的帮助!
解决方案
推荐阅读
- javascript - 向空对象添加新的键值对抛出 TypeError is null 错误
- c# - 当文件输入为空时如何将模型状态设置为有效
- angular - Angular7上集成的AdminLTE的routerLink问题
- php - file_get_contents 有效,但 file_put_contents 无效
- openedx - 如何在 open edX 中按部门对课程和用户进行分类
- javascript - 有没有办法在 Chromium 中流式传输 hls?
- solr - 这是非侵入性的吗?
- python - 在没有对应键时使用“getopt”获取 Python 命令行参数
- google-compute-engine - gcloud 计算 scp 本地文件到大众 /usr/bin
- linux - Docker - 如何编写自定义负载均衡器?