Uplate 发表于 2015-8-16 09:05:58

有没有朋友搞过鼠标的绝对坐标控制

最近在触摸屏转hid鼠标,现在触摸屏那边传回一个绝对坐标,而鼠标通常给pc的都是相对位移,怎么样把两者结合起来呢?
网上看到有人实现usb鼠标的绝对坐标方式控制,相对的报告描述符也给出了,但是鼠标就是不能动。
有没有朋友搞过这块的?

NJ8888 发表于 2015-8-16 09:10:10

win linux自己会管理mouse

Uplate 发表于 2015-8-16 09:25:47

NJ8888 发表于 2015-8-16 09:10
win linux自己会管理mouse

我知道,但是现在的问题是,比如:我点击触摸屏的左上角,假设坐标为0,0,这时候我需要通过USB模拟鼠标的协议发送给PC,使得PC上鼠标指针移动到显示器0,0的坐标上,我的硬件又不知道PC上鼠标当前的位置,我如何移动鼠标呢?当然,如果自己做USB驱动可以实现,但是现在就是想通过现有的HID协议来实现

NJ8888 发表于 2015-8-16 10:04:24

Uplate 发表于 2015-8-16 09:25
我知道,但是现在的问题是,比如:我点击触摸屏的左上角,假设坐标为0,0,这时候我需要通过USB模拟鼠标的 ...

比如你用linux,QT做的程序,插入USB鼠标,系统带了驱动程序处理鼠标坐标啊,你不会是裸奔吧

stm32_xiaocai 发表于 2015-8-18 16:35:27

HID报告描述符里面有描述相对值还是绝对值的描述吧。

pengchhui 发表于 2015-8-18 17:20:15

记得好像要做个分辩率转换

Halley 发表于 2015-8-18 17:39:03

call me   嗯嗯

licheng0620 发表于 2015-8-18 17:52:09

Halley 发表于 2015-8-18 17:39
call me   嗯嗯

想知道大侠有解决方法吗?

Halley 发表于 2015-8-18 18:07:32

const u8 MOUSE_ReportDescriptor =
{
//=============================================================================
//【鼠标】-顶层集合(报告ID=1,报告长度=6),描述符长度=58
    0x05, 0x01,                // Usage Page (Generic Desktop)
    0x09, 0x02,                // Usage (Mouse)
    0xA1, 0x01,                // Collection (Application)        【通用桌面设备:鼠标】应用集合开始
    0x09, 0x01,                //        Usage (Pointer)        指针设备
    0xA1, 0x00,                //        Collection (Physical)        物理集合开始

    0x85, 0x01,                //                Report ID (1)        报告ID =1
   
    0x05, 0x09,                //                Usage Page (Buttons)用途页为【按键】
    0x19, 0x01,                //                Usage Minimum (01)        用途最小值1
    0x29, 0x03,                //                Usage Maximum (03)用途最大值3(1=左键,2=右键,3=示中键)
    0x15, 0x00,                //                Logical Minimum (0)        逻辑最小值0
    0x25, 0x01,                //                Logical Maximum (1)        逻辑最大值1
    0x75, 0x01,                //                Report Size (1)        字段大小为1bit
    0x95, 0x03,                //                Report Count (3)        这样的字段数量为3
    0x81, 0x02,                //                Input (Data, Var, Abs)输入(变量,数值,绝对值)

    0x75, 0x05,                //                Report Size (5)
    0x95, 0x01,                //                Report Count (1)        填充5个bit,补足一个字节
    0x81, 0x01,                //                Input (Constant) for padding       

    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】
    0x35, 0x00,                //                PHYSICAL_Minimum (0)        【物理最小值=0】
    0x46, 0xff, 0x7f,        //                PHYSICAL_Maximum (32767)        【物理最大值=32767】

    0x75, 0x10,                //                Report Size (16)                【16位量】
    0x95, 0x02,                //                Report Count (2)                【这样的字段数量为2】
    0x81, 0x02,                //                Input (Data, Var, Abs)        【输入(变量,数值,绝对值)】

    0xC0,                //        End Collection (Physical) 物理集合结束
    0xC0,                // End Collection (Application) 应用集合结束
};

yick 发表于 2015-8-18 18:24:47

Halley 发表于 2015-8-18 18:07


不错,不错~~~

danielyuan 发表于 2015-8-18 18:31:26

圈圈的书里 有你想要的,我也是参照他的

Uplate 发表于 2015-8-18 21:48:25

本帖最后由 Uplate 于 2015-8-18 21:50 编辑

Halley 发表于 2015-8-18 18:07


非常感谢各位,昨天晚上已经搞出来了
另外

    0x15, 0x00,                //                Logical Minimum (0)             【逻辑最小值=0】
    0x26, 0xff, 0x7f,      //                Logical_Maximum (32767)      【逻辑最大值=32767】
    0x35, 0x00,                //                PHYSICAL_Minimum (0)      【物理最小值=0】
    0x46, 0xff, 0x7f,      //                PHYSICAL_Maximum (32767)      【物理最大值=32767】

这个 PHYSICAL_Minimum (0)如果设为0 的话会有问题,我记得貌似是移动范围小了,明天到公司 把报告描述符贴出来

Halley 发表于 2015-8-19 09:34:49

Uplate 发表于 2015-8-18 21:48
非常感谢各位,昨天晚上已经搞出来了
另外



不会吧不会吧

tongdayusu 发表于 2015-8-20 05:38:07

n年前我做过一个这玩意儿。有点儿忘了。。

qq1113673178 发表于 2020-11-4 17:30:52

大哥 复合设备描述符搞过吗 就是一次性弄个键盘和鼠标的报告描述符

Momo 发表于 2020-11-5 04:26:04

你要模拟的是触摸屏,而不是鼠标

qq1113673178 发表于 2020-11-6 12:34:22

Uplate 发表于 2015-8-18 21:48
非常感谢各位,昨天晚上已经搞出来了
另外



大哥 可以贴一下描述符吗

qq1113673178 发表于 2020-11-6 12:34:44

Momo 发表于 2020-11-5 04:26
你要模拟的是触摸屏,而不是鼠标

触控屏的 描述符 我老是测了没反应呢

qq1113673178 发表于 2020-11-6 12:35:24

qq1113673178 发表于 2020-11-4 17:30
大哥 复合设备描述符搞过吗 就是一次性弄个键盘和鼠标的报告描述符

这个我弄出来 了 用report id区分,但是有的设备还是会没反应 用绝对坐标的鼠标 会没反应 相对坐标可以

qq1113673178 发表于 2021-1-9 13:39:50

Uplate 发表于 2015-8-18 21:48
非常感谢各位,昨天晚上已经搞出来了
另外



兄弟哥们 能贴一下吗

kissmybaby 发表于 2022-7-1 10:46:29

mark 学习一下

huangqi412 发表于 2022-7-2 12:50:13

看你给电脑是给相对还是绝对。给相对要自己算了再传,给绝对直接就能传。   HID可以定义相对还是绝对。
页: [1]
查看完整版本: 有没有朋友搞过鼠标的绝对坐标控制