打印
[USB编程]

STM32做一个鼠标键盘复合设备求救

[复制链接]
5588|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuxueyou|  楼主 | 2013-10-25 14:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
单独的鼠标和键盘都正常工作,复合起来按网上的教程描述那里键盘为报告ID1 鼠标为报告ID 2,键盘用端口1
鼠标用端口2  下载程序后在任务管理器那里鼠标和键盘都有 ,可是鼠标和键盘就不是能工作,真是郁闷死了~!~
网上找的资料都是一样~!不知道有做成功的朋友指点下迷津~!谢谢还有单独做键盘或者鼠标的时候在报告描述那里只要加上报告ID(0x85,0x01)程序下载到板子后板子都正常但是键盘和鼠标就不正常工作~!是不是在的值使用一个设备(鼠标,键盘)的时候不需要加报告ID呢

相关帖子

沙发
huaziforever| | 2013-10-30 13:38 | 只看该作者
如果描述符没有问题的话,估计就是报告格式的问题;

使用特权

评论回复
板凳
lhchen922| | 2013-10-30 14:12 | 只看该作者
本人参考圈圈兄的书,复合了鼠标,键盘,和触摸屏,目前基本功能OK,,,还有点小小问题在修复。

使用特权

评论回复
地板
yuxueyou|  楼主 | 2013-10-31 12:05 | 只看该作者
lhchen922 发表于 2013-10-30 14:12
本人参考圈圈兄的书,复合了鼠标,键盘,和触摸屏,目前基本功能OK,,,还有点小小问题在修复。 ...

圈圈的书书店有卖吗 改天去买本来学学习下

使用特权

评论回复
5
yuxueyou|  楼主 | 2013-10-31 12:17 | 只看该作者
lhchen922 发表于 2013-10-30 14:12
本人参考圈圈兄的书,复合了鼠标,键盘,和触摸屏,目前基本功能OK,,,还有点小小问题在修复。 ...

***********************键盘
    0x05, 0x01, // USAGE_PAGE (Generic Desktop)
    0x09, 0x06, // USAGE (Keyboard)
    0xa1, 0x01, // COLLECTION (Application)
   0x85,0x01,
    0x05, 0x07, //     USAGE_PAGE (Keyboard/Keypad)
    0x19, 0xe0, //     USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0xe7, //     USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0x00, //     LOGICAL_MINIMUM (0)
    0x25, 0x01, //     LOGICAL_MAXIMUM (1)
    0x95, 0x08, //     REPORT_COUNT (8)
    0x75, 0x01, //     REPORT_SIZE (1)
    0x81, 0x02, //     INPUT (Data,Var,Abs)
  //-------------------------输入第一字节
    0x95, 0x01, //     REPORT_COUNT (1)
   0x75,0x08,        //REPORT_SIZE(8)
  0x81,0x03,  //INPUT(CnstVarAbs)
//----------------------------输入第二字节
        0x95,0x06,
        0x75,0x08,
        0x15,0x00,
        0x25,0xff,
        0x05,0x07,
        0x19,0x00,
        0x29,0x65,
        0x81,0x00,
//---------------------------------输入第3到第8字节
        0x95,0x05,
        0x75,0x01,
        0x05,0x08,
        0x19,0x01,
        0x29,0x05,
        0x91,0x02,//OUT PUT
        0x95,0x01,
        0x75,0x03,
        0x91,0x03,//output
        //---------------------------输出第一字节
        0xc0
/************************USB鼠标部分报告描述符**********************/
    0x05, 0x01, // USAGE_PAGE (Generic Desktop)
    0x09, 0x02, // USAGE (Mouse)
   0xa1, 0x01, // COLLECTION (Application)
    0x85, 0x02, //Report ID (2)
   0x09, 0x01, //   USAGE (Pointer)
   0xa1, 0x00, //   COLLECTION (Physical)
   0x05, 0x09, //     USAGE_PAGE (Button)
   0x19, 0x01, //     USAGE_MINIMUM (Button 1)
    0x29, 0x03, //     USAGE_MAXIMUM (Button 3)
   0x15, 0x00, //     LOGICAL_MINIMUM (0)
   0x25, 0x01, //     LOGICAL_MAXIMUM (1)
   0x95, 0x03, //     REPORT_COUNT (3)
   0x75, 0x01, //     REPORT_SIZE (1)
   0x81, 0x02, //     INPUT (Data,Var,Abs)
   0x95, 0x01, //     REPORT_COUNT (1)
   0x75, 0x05, //     REPORT_SIZE (5)
   0x81, 0x03, //     INPUT (Cnst,Var,Abs)
   0x05, 0x01, //     USAGE_PAGE (Generic Desktop)
   0x09, 0x30, //     USAGE (X)
   0x09, 0x31, //     USAGE (Y)
   0x09, 0x38, //     USAGE (Wheel)
   0x15, 0x81, //     LOGICAL_MINIMUM (-127)
   0x25, 0x7f, //     LOGICAL_MAXIMUM (127)
   0x75, 0x08, //     REPORT_SIZE (8)
   0x95, 0x03, //     REPORT_COUNT (3)
   0x81, 0x06, //     INPUT (Data,Var,Rel)
   0xc0,       //   END_COLLECTION
   0xc0        // END_COLLECTION
上面是键盘和鼠标的 descriptor  下面是给电脑发送键盘的传送数据 但是这样就是不行 鼠标键盘分开就可以
void Joystick_Send(u8 Keys)//键盘发送
{
  u8 Buffer_Scan1[8] =  {0, 0, 0, 0,  0, 0, 0, 0};  
  Buffer_Scan1[3]=Keys;  
  USB_SIL_Write(EP1_IN, Buffer_Scan1, 8);
  SetEPTxValid(ENDP1);
}
/*******************************************************************************/
void Joystick_Send2(u8 buf0,u8 buf1,u8 buf2,u8 buf3) //鼠标发送
{
  u8 Mouse_Buffer[4] = {0, 0, 0, 0};

  Mouse_Buffer[0]=buf0;
  Mouse_Buffer[1]=buf1;
  Mouse_Buffer[2]=buf2;
  Mouse_Buffer[3]=buf3;
  UserToPMABufferCopy(Mouse_Buffer, GetEPTxAddr(ENDP2), 4);
  SetEPTxValid(ENDP2);
}

麻烦你帮我看下 是不是那里搞错了唉~!菜鸟一个

使用特权

评论回复
6
lhchen922| | 2013-10-31 12:48 | 只看该作者
void Joystick_Reset(void)
改没。。

使用特权

评论回复
7
lhchen922| | 2013-10-31 12:49 | 只看该作者

使用特权

评论回复
8
lhchen922| | 2013-10-31 12:56 | 只看该作者
还有这篇。在论坛搜下,很多相关提问的。
https://bbs.21ic.com/icview-180644-1-1.html

使用特权

评论回复
9
yuxueyou|  楼主 | 2013-11-15 15:12 | 只看该作者
lhchen922 发表于 2013-10-31 12:48
void Joystick_Reset(void)
改没。。

好的 谢谢提醒~

使用特权

评论回复
10
yang4469| | 2013-12-14 16:24 | 只看该作者
楼主问题解决了?怎么解决的,能分享下么

使用特权

评论回复
11
yuxueyou|  楼主 | 2014-1-9 10:16 | 只看该作者
yang4469 发表于 2013-12-14 16:24
楼主问题解决了?怎么解决的,能分享下么

没有呢 最近都没有在搞

使用特权

评论回复
12
yang4469| | 2014-1-9 17:07 | 只看该作者
yuxueyou 发表于 2014-1-9 10:16
没有呢 最近都没有在搞

哦,我问题已经解决了,我HID返回的报告描述符错了

使用特权

评论回复
13
woshansi| | 2014-1-26 22:10 | 只看该作者
求助,hid键盘的报告中的发的按键值和ascii编码的对照表可以给我一份吗,qq1357095126,我做的键盘不知道如何发我想法的编码

使用特权

评论回复
14
lh2008xp| | 2014-12-11 14:45 | 只看该作者
求教,我使用STM32也是按照圈圈的方法,只是修改了报告描述符!但是提示安装驱动失败!请问是啥问题?可以分享下你的代码吗?lh2008xp@163.com

使用特权

评论回复
15
lh2008xp| | 2015-1-9 19:46 | 只看该作者
lhchen922 发表于 2013-10-30 14:12
本人参考圈圈兄的书,复合了鼠标,键盘,和触摸屏,目前基本功能OK,,,还有点小小问题在修复。 ...

虽然很久了,请问你是如何实现的鼠标和键盘的复合,同时对触摸屏的复合也很感兴趣~
我做这个时候,枚举完成能识别是键盘和鼠标的复合程序,但是按键均无效了;单独的都可以实现;
期待回复指点!!!

使用特权

评论回复
16
lh2008xp| | 2015-1-9 19:48 | 只看该作者
lhchen922 发表于 2013-10-31 12:48
void Joystick_Reset(void)
改没。。

我的具体问题如下连接
https://bbs.21ic.com/forum.php?mod=viewthread&tid=850483&epclose=1

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

20

帖子

1

粉丝