如何从Windows向HID键盘发送数据?

问题描述

我试图使用Windows在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,// 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,//   LOGICAL_MAXIMUM (1)
0x75,//   REPORT_SIZE (1)
0x95,0x08,//   REPORT_COUNT (8)
0x81,0x02,//   INPUT (Data,Var,Abs)
0x95,//   REPORT_COUNT (1)
0x75,//   REPORT_SIZE (8)
0x81,0x03,//   INPUT (Cnst,0x05,//   REPORT_COUNT (5)
0x75,//   REPORT_SIZE (1)
0x05,//   USAGE_PAGE (LEDs)
0x19,//   USAGE_MINIMUM (Num Lock)
0x29,//   USAGE_MAXIMUM (Kana)
0x91,//   OUTPUT (Data,//   REPORT_SIZE (3)
0x91,//   OUTPUT (Cnst,//   REPORT_COUNT (6)
0x75,//   REPORT_SIZE (8)
0x15,0x65,//   LOGICAL_MAXIMUM (101)
0x05,//   USAGE_MINIMUM (Reserved (no event indicated))
0x29,//   USAGE_MAXIMUM (Keyboard Application)
0x81,Ary,Abs)
0x06,0xff,// USAGE_PAGE (vendor Defined Page 1)
0x09,// USAGE (vendor Usage 1)
0x15,// LOGICAL_MINIMUM (0)
0x26,// LOGICAL_MAXIMUM (255)
0x75,// REPORT_SIZE (8)
0x95,0x04,// REPORT_COUNT (4)
0x91,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(弗洛里安语的库)的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);
        }

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)