首页 > 解决方案 > 如何将数据从 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);
        }

考虑到我是初学者,感谢您的帮助!

标签: c#keyboardhid

解决方案


推荐阅读