【沁恒试用】USB HID 的实现
本帖最后由 viphotman 于 2019-7-24 13:57 编辑<p>通过触摸按键来模拟鼠标左右键;</p>
<p>文件结构:</p>
<p>主要是综合了gpio,touch ,usb几个demo的功能;</p>
<p>GPIO部分是LED控制;</p>
<p>TOUCH是用来当按键;</p>
<p>USB用HID转鼠标左右按下与释放;</p>
<p>看USB描述符;</p>
<p>下图为结构图;从USB 协议里截图而来</p>
<p>有:设置描述符,配置描述符;接口描述符,端点描述符,HID描述符,HID报告,字符串描述符;<br />
</p>
<p> 接口描述时的鼠标键盘类</p>
<p></p>
<p>下面对描述符部分注释一下;</p>
<pre>
<code class="language-cpp">/*
// USB 描述符
// 1 设备描述符(=1)
// 2 配置描述符(=2)
// 3 字符串描述符(=3)
// 4 接口描述符(4)
// 5 端点描述符(5)
//
// HID描述符(0x21)
*/
/*设备描述符*/
UINT8C DevDesc[] = {
0x12, //长度
0x01, //类型:设备描述符(=1)
0x10, 0x01, // USB 协议版本 低8位在前
0x00,//类代码
0x00,//子类代码
0x00,//设备使用的协议
THIS_ENDP0_SIZE, //端点0最大包长
0x86,0x1a,// 厂商VID
0xe1,0xe6,// 产品 PID
0x00,0x01,//设备版本号
0x01,//字符串索引 :描述厂商
0x02,//字符串索引 :描述产品
0x00,//字符串索引 :产品序列
0x01 //配置数
};
/*字符串描述符*/
UINT8CMyLangDescr[] = { 0x04, 0x03, 0x09, 0x04 }; // 语言描述符
UINT8CMyManuInfo[] = { 0x0E, 0x03, 'w', 0, 'c', 0, 'h', 0, '.', 0, 'c', 0, 'n', 0 }; // 厂家信息
UINT8CMyProdInfo[] = { 0x0C, 0x03, 'C', 0, 'H', 0, '5', 0, '4', 0, '9', 0 }; // 产品信息
/*配置描述符*/
UINT8C CfgDesc[] =
{
0x09,0x02,//此描述符长度 ,配置描述符
0x3b,0x00,//配置描述符集合总长度 0x003b
0x02,//支持接口数: 0,1
0x01,//该配置的值
0x00,//该配置的字符串索引
0xA0,//设备属性
0x32,//最大要电电流 0x32 x 2mA = 100mA
0x09,0x04,//此描述符长度 , 接口描述符,键盘
0x00,//接口编号:0
0x00,//备用编号
0x01,//此接口使用端点数
0x03,//此接口使用的类 :HID
0x01,//此接口使用的子类:
0x01,//此接口使用的协议:KEYBOARD
0x00,// 此接口字符串索引
0x09,0x21,//此描述符长度 ,HID类描述符
0x11,0x01,// USB HID version
0x00,// 国家代码 00 是没定义,33是US
0x01,//下级描述符的数量
0x22,//下级描述符的类型
sizeof(KeyRepDesc)&0xFF,sizeof(KeyRepDesc)>>8, //下级描述符的长度
0x07,0x05,//此描述符长度 ,端点描述符
0x81,//端点地址
0x03,//属性
EP1_IN_SIZE,0x00,//端点支持最大的包长度
0x0a,//端口查询时间
0x09,0x04,//此描述符长度 ,接口描述符,鼠标
0x01,//接口编号:1
0x00,//备用编号
0x01,//此接口使用端点数
0x03,//此接口使用的类 HID
0x01,//此接口使用的子类
0x02,//此接口使用的协议: MOUSE
0x00,//// 此接口字符串索引
0x09,0x21,//此描述符长度 ,HID类描述符
0x10,0x01,// USB HID version
0x00,// 国家代码
0x01,//下级描述符的数量
0x22,//下级描述符的类型
sizeof(MouseRepDesc)&0xFF,sizeof(MouseRepDesc)>>8,//下级描述符的长度
0x07,0x05,//此描述符长度 ,端点描述符
0x82,//端点地址
0x03,//属性
EP2_IN_SIZE,0x00,//端点支持最大的包长度
0x0a //端口查询时间
};</code></pre>
<p> </p>
<p>沁恒的MCU在使用上程序量没有太多;也没修改多少;</p>
<p>下面是工程文件:</p>
<p><br />
<strong><span style="color:#5e7384">此内容由EEWORLD论坛网友<span style="font-size:medium">viphotman</span>原创,如需转载或用于商业用途需征得作者同意并注明出处</span></strong></p>
<p>看起来使用非常简单啊</p>
dcexpert 发表于 2019-7-24 14:00
看起来使用非常简单啊
<p>初步用起来还不错,USB部分代码量少,比起之前看的32位单片机的代码要好理解一些;</p>
<p>一个功能调试了多个功能模块了<img height="50" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/onion/Onion--108.gif" width="50" /></p>
沁恒USB单片机 发表于 2019-7-25 09:26
一个功能调试了多个功能模块了
<p>你们这个触摸按键是否能组合成手势!</p>
viphotman 发表于 2019-7-25 11:56
你们这个触摸按键是否能组合成手势!
<p>可以做滑条,用多个触摸按键</p>
页:
[1]