下面这个是 修改了hidmouseservice.c文件中uint8_t hidReportMap[]的报表
// HID Report Map characteristic value static const uint8_t hidReportMap[] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 用途页-桌面通用 0x09, 0x02, // USAGE (Mouse)用途-鼠标 0xa1, 0x01, // COLLECTION (Application)开集合-应用 0x85, 0x02, //Report ID (178) 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)逻辑最小值-0:按键抬起 0x25, 0x01, // LOGICAL_MAXIMUM (1)逻辑最大值-1:按键按下 0x95, 0x03, // REPORT_COUNT (3)报告数量-3:3个按键 0x75, 0x01, // REPORT_SIZE (1)报告小组-1:1组 0x81, 0x02, // INPUT (Data,Var,Abs)数据输入:可变,独立,绝对值 0x95, 0x01,//报告数量:1 0x75, 0x05,//报告小组:5,为了和前面的3bit凑成一个字节 0x81, 0x03,//数据输入:常量,独立,绝对值 0x05, 0x01, // USAGE_PAGE (Generic Desktop)用途页-桌面通用 0x09, 0x30, // USAGE (X)用途:X轴 0x09, 0x31, // USAGE (Y)用途:Y轴 0x15, 0x00, // LOGICAL_MINIMUM (0)逻辑最小值:0 0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767)逻辑最大值:32767,表示鼠标的左右、上下移动 0x75, 0x10, // REPORT_SIZE (16)报告数量:16 位 0x95, 0x02, // REPORT_COUNT (2)报告小组:2,X一个,Y一个,刚好两个 0x81, 0x02, // INPUT (Data,Var,Rel)数据输入:可变、独立、相对值 0xc0, // END_COLLECTION 0xc0 // END_COLLECTION };
这个报表描述符由6字节组成,
BIT0:报表描述符的ID,固定位为0x02.
BIT1:bit0-bit2分别指示了鼠标左右中键的是否按下,其位高5位固定值为0。
BIT2-BIT3:代表当前指针的X坐标,取值范围为0-32767
BIT4-BIT5:代表当前指针的Y坐标,取值范围为0-32767
同时修改了
static void hidEmuSendMouseReport(uint8_t buttons, uint16_t X_data, uint16_t Y_data) { uint8_t buf[HID_MOUSE_IN_RPT_LEN]; buf[0] = 0x02; // Buttons buf[1] = buttons; //BIT0-BIT2分别指示了鼠标左右中键的是否按下,其位高5位固定值为0。 buf[2] = (uint8_t)X_data; // X axis data low 8bit buf[3] = (uint8_t)(X_data >> 8); // X axis data high 8bit buf[4] = (uint8_t)Y_data; // Y axis data low 8bit buf[5] = (uint8_t)(Y_data >> 8); // Y axis data high 8bit HidDev_Report(HID_RPT_ID_MOUSE_IN, HID_REPORT_TYPE_INPUT, HID_MOUSE_IN_RPT_LEN, buf); }
在电脑上面是 可以实现 573f 输出绝对坐标的,
使用hidEmuSendMouseReport(0, 200, 200); 可以实现鼠标指针的 指定坐标跳转,而在手机上就没有反应了,
这是为什么呢,需要怎么修改