找回密码
 立即注册
查看: 1209|回复: 11

将官方的USB[键盘+鼠标]的demo,修改鼠标的报告描述后无法触发挂起恢复

[复制链接]

该用户从未签到

3

主题

5

回帖

52

积分

注册会员

积分
52
发表于 2023-4-25 16:06:39 | 显示全部楼层 |阅读模式
将鼠标的报告描述符改为4字节数据包(支持鼠标滚轮)后,鼠标可以正常运行,但是休眠后无法触发恢复唤醒主机,官方可以解答一下吗,感激不尽!!!




char code DEVICEDESC[18] =
{
    0x12,                   //bLength(18);
    0x01,                   //bDescriptorType(Device);
    0x00,0x02,              //bcdUSB(2.00);
    0x00,                   //bDeviceClass(0);
    0x00,                   //bDeviceSubClass0);
    0x00,                   //bDeviceProtocol(0);
    0x40,                   //bMaxPacketSize0(64);
    0xbf,0x34,              //idVendor(34bf);
    0x0b,0xff,              //idProduct(ff0b);
    0x00,0x01,              //bcdDevice(1.00);
    0x01,                   //iManufacturer(1);
    0x02,                   //iProduct(2);
    0x00,                   //iSerialNumber(0);
    0x01,                   //bNumConfigurations(1);
};

char code CONFIGDESC[66] =
{
    0x09,                   //bLength(9);
    0x02,                   //bDescriptorType(Configuration);
    0x42,0x00,              //wTotalLength(66);
    0x02,                   //bNumInterfaces(2);
    0x01,                   //bConfigurationValue(1);
    0x00,                   //iConfiguration(0);
    0xa0,                   //bmAttributes(BUSPower);
    0x32,                   //MaxPower(100mA);

    0x09,                   //bLength(9);
    0x04,                   //bDescriptorType(Interface);
    0x00,                   //bInterfaceNumber(0);
    0x00,                   //bAlternateSetting(0);
    0x02,                   //bNumEndpoints(2);
    0x03,                   //bInterfaceClass(HID);
    0x01,                   //bInterfaceSubClass(Boot);
    0x01,                   //bInterfaceProtocol(Keyboard);
    0x00,                   //iInterface(0);

    0x09,                   //bLength(9);
    0x21,                   //bDescriptorType(HID);
    0x01,0x01,              //bcdHID(1.01);
    0x00,                   //bCountryCode(0);
    0x01,                   //bNumDescriptors(1);
    0x22,                   //bDescriptorType(HID Report);
    0x41,0x00,              //wDescriptorLength(65);

    0x07,                   //bLength(7);
    0x05,                   //bDescriptorType(Endpoint);
    0x81,                   //bEndpointAddress(EndPoint1 as IN);
    0x03,                   //bmAttributes(Interrupt);
    0x08,0x00,              //wMaxPacketSize(8);
    0x0a,                   //bInterval(10ms);

    0x07,                   //bLength(7);
    0x05,                   //bDescriptorType(Endpoint);
    0x01,                   //bEndpointAddress(EndPoint1 as OUT);
    0x03,                   //bmAttributes(Interrupt);
    0x01,0x00,              //wMaxPacketSize(1);
    0x0a,                   //bInterval(10ms);

    0x09,                   //bLength(9);
    0x04,                   //bDescriptorType(Interface);
    0x01,                   //bInterfaceNumber(1);
    0x00,                   //bAlternateSetting(0);
    0x01,                   //bNumEndpoints(1);
    0x03,                   //bInterfaceClass(HID);
    0x01,                   //bInterfaceSubClass(Boot);
    0x02,                   //bInterfaceProtocol(Mouse);
    0x00,                   //iInterface(0);

    0x09,                   //bLength(9);
    0x21,                   //bDescriptorType(HID);
    0x01,0x01,              //bcdHID(1.01);
    0x00,                   //bCountryCode(0);
    0x01,                   //bNumDescriptors(1);
    0x22,                   //bDescriptorType(HID Report);
    0x34,0x00,              //wDescriptorLength(52);

    0x07,                   //bLength(7);
    0x05,                   //bDescriptorType(Endpoint);
    0x82,                   //bEndpointAddress(EndPoint2 as IN);
    0x03,                   //bmAttributes(Interrupt);
    0x04,0x00,              //wMaxPacketSize(4);
    0x0a,                   //bInterval(10ms);
};

/*
Input Report:
0   Modifierkeys (D0:LCtrl D1:LShift D2:LAlt D3:LGui D4:RCtrl D5:RShift D6:RAlt D7:RGui)
1   Reserved
2   Keycode 1
3   Keycode 2
4   Keycode 3
5   Keycode 4
6   Keycode 5
7   Keycode 6
Output Report:
0   LEDs (D0:NumLock D1:CapLock D2:ScrollLock)
*/
char code KEYBOARDREPORTDESC[65] =
{
    0x05,0x01,              //USAGE_PAGE(Generic Desktop);
    0x09,0x06,              //USAGE(Keyboard);
    0xa1,0x01,              //COLLECTION(Application);
    0x05,0x07,              //  USAGE_PAGE(Keyboard);
    0x19,0xe0,              //  USAGE_MINIMUM(224);
    0x29,0xe7,              //  USAGE_MAXIMUM(255);
    0x15,0x00,              //  LOGICAL_MINIMUM(0);
    0x25,0x01,              //  LOGICAL_MAXIMUM(1);
    0x75,0x01,              //  REPORT_SIZE(1);
    0x95,0x08,              //  REPORT_COUNT(8);
    0x81,0x02,              //  INPUT(Data,Variable,Absolute);
    0x75,0x08,              //  REPORT_SIZE(8);
    0x95,0x01,              //  REPORT_COUNT(1);
    0x81,0x01,              //  INPUT(Constant);
    0x19,0x00,              //  USAGE_MINIMUM(0);
    0x29,0x65,              //  USAGE_MAXIMUM(101);
    0x15,0x00,              //  LOGICAL_MINIMUM(0);
    0x25,0x65,              //  LOGICAL_MAXIMUM(101);
    0x75,0x08,              //  REPORT_SIZE(8);
    0x95,0x06,              //  REPORT_COUNT(6);
    0x81,0x00,              //  INPUT(Data,Array);
    0x05,0x08,              //  USAGE_PAGE(LEDs);
    0x19,0x01,              //  USAGE_MINIMUM(1);
    0x29,0x03,              //  USAGE_MAXIMUM(3);
    0x15,0x00,              //  LOGICAL_MINIMUM(0);
    0x25,0x01,              //  LOGICAL_MAXIMUM(1);
    0x75,0x01,              //  REPORT_SIZE(1);
    0x95,0x03,              //  REPORT_COUNT(3);
    0x91,0x02,              //  OUTPUT(Data,Variable,Absolute);
    0x75,0x05,              //  REPORT_SIZE(5);
    0x95,0x01,              //  REPORT_COUNT(1);
    0x91,0x01,              //  OUTPUT(Constant);
    0xc0,                   //END_COLLECTION;
};

/*
Input Report:
0   Buttons (D0:LButton D1:RButton D2:MButton [D3:D7]:Pad)
1   X displacement (>0:right; <0:left)
2   Y displacement (>0:down; <0:up)
*/
char code MOUSEREPORTDESC[52] =
{
    0x05,0x01,              //USAGE_PAGE(Generic Desktop);
    0x09,0x02,              //USAGE(Mouse);
    0xa1,0x01,              //COLLECTION(Application);
    0x09,0x01,              //  USAGE(Pointer);
    0xa1,0x00,              //  COLLECTION(Physical);
    0x05,0x09,              //    USAGE_PAGE(Buttons);
    0x19,0x01,              //    USAGE_MINIMUM(1);
    0x29,0x03,              //    USAGE_MAXIMUM(3);
    0x15,0x00,              //    LOGICAL_MINIMUM(0);
    0x25,0x01,              //    LOGICAL_MAXIMUM(1);
    0x75,0x01,              //    REPORT_SIZE(1);
    0x95,0x03,              //    REPORT_COUNT(3);
    0x81,0x02,              //    INPUT(Data,Variable,Absolute);
    0x75,0x05,              //    REPORT_SIZE(5);
    0x95,0x01,              //    REPORT_COUNT(1);
    0x81,0x01,              //    INPUT(Constant);
    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, Variable, Relative);
    0xc0,                   //  END_COLLECTION;
    0xc0,                   //END_COLLECTION;
};


回复 送花

使用道具 举报

该用户从未签到

3

主题

5

回帖

52

积分

注册会员

积分
52
 楼主| 发表于 2023-4-25 16:08:19 | 显示全部楼层
这个是程序中触发恢复的代码


usb_write_reg(POWER,0x05);
Delay15ms();
usb_write_reg(POWER,0x01);
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

5

回帖

52

积分

注册会员

积分
52
 楼主| 发表于 2023-4-25 16:10:08 | 显示全部楼层
有时可以触发恢复唤醒主机一次,但之后就无法再触发恢复唤醒主机。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

9

主题

299

回帖

1740

积分

版主

积分
1740
QQ
发表于 2023-4-25 17:07:40 | 显示全部楼层
可以参考下面这个贴

STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用 - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区  https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1695

QQ:1463035472,微信:19952583954
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

5

回帖

52

积分

注册会员

积分
52
 楼主| 发表于 2023-4-25 17:32:22 | 显示全部楼层
32位8051-STCAI 发表于 2023-4-25 17:07
可以参考下面这个贴

STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用 - USB:USB-CDC虚拟串口/就是串 ...

谢谢
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

5

回帖

52

积分

注册会员

积分
52
 楼主| 发表于 2023-4-25 17:36:57 | 显示全部楼层
32位8051-STCAI 发表于 2023-4-25 17:07
可以参考下面这个贴

STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用 - USB:USB-CDC虚拟串口/就是串 ...

已经参考您提供的帖子修改过了。不过我将配置描述符的 bmAttributes 字段由0x80 改为0xa0后,有时就又触发不了唤醒主机,但该字段为0x80时就没问题。

点评

参考完整的修改过程,或者直接使用例程测试一下。  详情 回复 发表于 2023-4-26 11:07
回复 支持 反对 送花

使用道具 举报

该用户从未签到

9

主题

299

回帖

1740

积分

版主

积分
1740
QQ
发表于 2023-4-26 11:07:08 | 显示全部楼层
Eula 发表于 2023-4-25 17:36
已经参考您提供的帖子修改过了。不过我将配置描述符的 bmAttributes 字段由0x80 改为0xa0后,有时就又触 ...

参考完整的修改过程,或者直接使用例程测试一下。
QQ:1463035472,微信:19952583954
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

5

回帖

52

积分

注册会员

积分
52
 楼主| 发表于 2023-4-27 15:32:38 | 显示全部楼层
32位8051-STCAI 发表于 2023-4-26 11:07
参考完整的修改过程,或者直接使用例程测试一下。

你好,已经试过了,鼠标改成4字节后在部分电脑下无法唤醒
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9532

回帖

1万

积分

管理员

积分
14106
发表于 2023-4-27 20:45:14 | 显示全部楼层
内部沟通:
A, 帮看下我们支持者的这个问题
B, 这个问题我们也一时看不清楚,客户也描述是部分系统无法唤醒,这需要花时间实际测试,可能会比较麻烦
    等我们忙过了追风剑-STC32F12K54-64I-LQFP48这阵子,我们再详细按我们客户的描述测试看看
回复 支持 反对 送花

使用道具 举报

该用户从未签到

3

主题

5

回帖

52

积分

注册会员

积分
52
 楼主| 发表于 2023-4-28 09:32:18 | 显示全部楼层
神农鼎 发表于 2023-4-27 20:45
内部沟通:
A, 帮看下我们支持者的这个问题
B, 这个问题我们也一时看不清楚,客户也描述是部分系统无法唤醒 ...

好的

点评

您先多测试测试,看能否独立前行  发表于 2023-4-28 13:23
回复 支持 反对 送花

使用道具 举报

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-20 03:40 , Processed in 0.072111 second(s), 66 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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