本帖最后由 viphotman 于 2019-7-24 13:57 编辑
通过触摸按键来模拟鼠标左右键;
文件结构:
主要是综合了gpio,touch ,usb几个demo的功能;
GPIO部分是LED控制;
TOUCH是用来当按键;
USB用HID转鼠标左右按下与释放;
看USB描述符;
下图为结构图;从USB 协议里截图而来
有:设置描述符,配置描述符;接口描述符,端点描述符,HID描述符,HID报告,字符串描述符;
接口描述时的鼠标键盘类
下面对描述符部分注释一下;
/*
// 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 //配置数
};
/*字符串描述符*/
UINT8C MyLangDescr[] = { 0x04, 0x03, 0x09, 0x04 }; // 语言描述符
UINT8C MyManuInfo[] = { 0x0E, 0x03, 'w', 0, 'c', 0, 'h', 0, '.', 0, 'c', 0, 'n', 0 }; // 厂家信息
UINT8C MyProdInfo[] = { 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 //端口查询时间
};
沁恒的MCU在使用上程序量没有太多;也没修改多少;
下面是工程文件:
myCH549HID.zip
(276.97 KB, 下载次数: 45)
此内容由EEWORLD论坛网友viphotman原创,如需转载或用于商业用途需征得作者同意并注明出处
|