开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7538|回复: 9
收起左侧

[技术专题] 关于USB虚拟键盘鼠标,在IOS上面遇FN键的问题实现。

[复制链接]
发表于 2022-11-18 18:38:38 | 显示全部楼层 |阅读模式   贵州省贵阳市
本帖最后由 jhtzz 于 2022-11-18 20:09 编辑

       最近接了一个任务,就是拿USB单片机做一个鼠标和键盘。合成的,其实网上包括芯片生产商都有案例,太多了,但是,都没有谁提起怎么才能支持苹果手机(15以上系统)及苹果电脑的FN键问题。因为FN呢,本身没有键码,所以你怎么去USB官网都查不到的。


USB要搞键盘,鼠标。USB官网标准的HID报表描述符是这样子的:
/*HID类报表描述符,键盘*/
UINT8C KeyRepDesc[62] =
{
    0x05,0x01,0x09,0x06,0xA1,0x01,0x05,0x07,
    0x19,0xe0,0x29,0xe7,0x15,0x00,0x25,0x01,
    0x75,0x01,0x95,0x08,0x81,0x02,0x95,0x01,
    0x75,0x08,0x81,0x01,0x95,0x03,0x75,0x01,
    0x05,0x08,0x19,0x01,0x29,0x03,0x91,0x02,
    0x95,0x05,0x75,0x01,0x91,0x01,0x95,0x06,
    0x75,0x08,0x26,0xff,0x00,0x05,0x07,0x19,
    0x00,0x29,0x91,0x81,0x00,0xC0
};
//鼠标
UINT8C MouseRepDesc[52] =   
{
    0x05,0x01,0x09,0x02,0xA1,0x01,0x09,0x01,
    0xA1,0x00,0x05,0x09,0x19,0x01,0x29,0x03,
    0x15,0x00,0x25,0x01,0x75,0x01,0x95,0x03,
    0x81,0x02,0x75,0x05,0x95,0x01,0x81,0x01,
    0x05,0x01,0x09,0x30,0x09,0x31,0x09,0x38,
    0x15,0x81,0x25,0x7f,0x75,0x08,0x95,0x03,
    0x81,0x06,0xC0,0xC0
};


这样是可以出键盘鼠标了,但是,苹果的FN呢?

      在网上转了好几了圈关于苹果FN键的问题,没有,无赖,只得找国内某芯片公司去问,如图:

                                                       1.png
总算是找到了思路,搞起苹果电脑。在苹果上抓USB包呢,不像windows用Bus Hound。根据此文章来抓包:
Mac端Wireshark抓包工具使用 - 简书 (jianshu.com)


软件就绪后,插入苹果USB键盘,好家伙,这包也太多了吧,一个一个找:
1、首先映入眼帘的是:
2.png

标准的USB协yi交互,看到我们亲爱的配置描述符了
3.png
接口描述符、端点描述符,一律搬到自己的代码里面。编译单片机代码,开始烧入。。。结果还是不行。继续抓包往下看。
看到了,HID报表描述符了:
4.png
不用说,搬。
HID报表描述符这样:
0x05,0x01,0x09,0x06,0xa1,0x01,0x85,0x01,0x05,0x07,
      0x19,0xe0,0x29,0xe7,0x15,0x00,0x25,0x01,
      0x75,0x01,0x95,0x08,0x81,0x02,0x95,0x01,
      0x75,0x08,0x81,0x01,0x95,0x05,0x75,0x01,
      0x05,0x08,0x19,0x01,0x29,0x05,0x91,0x02,
      0x95,0x01,0x75,0x03,0x91,0x01,0x95,0x06,
      0x75,0x08,0x15,0x00,0x26,0xff,0x00,0x05,
      0x07,0x19,0x00,0x29,0xff,0x81,0x00,0x05,
      0x0c,0x75,0x01,0x95,0x01,0x09,0xb8,0x15,
      0x00,0x25,0x01,0x81,0x02,0x05,0xff,0x09,
      0x03,0x75,0x07,0x95,0x01,0x81,0x02,0xc0

全搬后,windows设备管理器里面报无法识别,通过Bus Hound,看后才知,原来上面的包超127了,需要修改单片机代码:
5.png
把USB搞成全速、端点包搞成16以上,我16就够了。
这一步完成后,我们就要分析他这个HID报表描述符怎么发起键盘按下呢?通过USB标准请求及描述符在线分析工具 - USB中文网 (usbzh.com)把协yi整理了一下。
发送是这样的:
       /*键盘数据*/
     UINT8 HIDKey[10] ={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};

共10个字节,第一个是报表ID。第2到第9是键盘的,这2到9对应键盘的东西,全世界都知道了。第10个字节就是我们今天讲的重点,FN的标志了。


6.png

所以第10个字节我们传2就代表FN也按下了,上图是Fn+F1按下的时候。如果FN没有按下,第10位为0即可。
到这里,就支持FN了。大家要记住啊,是苹果的,不是普通键盘的FN哈。





发表于 2023-1-12 18:36:09 | 显示全部楼层   吉林省长春市
谢谢LZ分享,学习到新技能。
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2022-11-24 11:21:55 | 显示全部楼层   河北省秦皇岛市
谢谢LZ分享,学习到新技能。
回复 支持 反对

使用道具 举报

发表于 2022-11-22 20:56:42 | 显示全部楼层   江西省赣州市
感谢分享
回复 支持 反对

使用道具 举报

发表于 2022-11-22 19:49:07 | 显示全部楼层   美国
好帖子,顶上去。。
回复 支持 反对

使用道具 举报

发表于 2022-11-20 14:34:12 | 显示全部楼层   四川省成都市
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2022-11-19 16:05:08 | 显示全部楼层   河北省秦皇岛市
感谢lz 新技能get
回复 支持 反对

使用道具 举报

发表于 2022-11-19 12:31:30 | 显示全部楼层   贵州省贵阳市
不错不错
回复 支持 反对

使用道具 举报

签到天数: 1 天

 楼主| 发表于 2022-11-18 19:50:19 | 显示全部楼层   贵州省贵阳市
有需要技术交流的加QQ:117563781。倒台,排版乱了。
回复 支持 反对

使用道具 举报

签到天数: 1 天

 楼主| 发表于 2022-11-18 18:41:43 | 显示全部楼层   贵州省贵阳市
把USB搞成全速、端点包搞成16以上,我16就够了。
这一步完成后,我们就要分析他这个HID报表描述符怎么发起键盘按下呢?通过USB标准请求及描述符在线分析工具 - USB中文网 (usbzh.com)把协yi整理了一下。
发送是这样的:
       /*键盘数据*/
     UINT8 HIDKey[10] ={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
共10个字节,第一个是报表ID。第2到第9是键盘的,这2到9对应键盘的东西,全世界都知道了。第10个字节就是我们今天讲的重点,FN的标志了。
6.png
所以第10个字节我们传2就代表FN也按下了,上图是Fn+F1按下的时候。如果FN没有按下,第10位为0即可。
到这里,就支持FN了。大家要记住啊,是苹果的,不是普通键盘的FN哈。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表