omap3530上移植AMT 6000 系列USB型触摸屏+tslib(3)

ret = usb_control_msg(usbtouch->udev, usb_rcvctrlpipe(usbtouch->udev, 0),
                          0x01, 0x02, 0x0000, 0x0081,
                          NULL, 0, USB_CTRL_SET_TIMEOUT);

dbg("%s - usb_control_msg - E2I_RESET - bytes|err: %d",
        __func__, ret);
    return ret;
}

static int e2i_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
    int tmp = (pkt[0] << 8) | pkt[1];
    dev->x  = (pkt[2] << 8) | pkt[3];
    dev->y  = (pkt[4] << 8) | pkt[5];

tmp = tmp - 0xA000;
    dev->touch = (tmp > 0);
    dev->press = (tmp > 0 ? tmp : 0);

return 1;
}
#endif


/*****************************************************************************
 * eGalax part
 */

#ifdef CONFIG_TOUCHSCREEN_USB_EGALAX

#ifndef MULTI_PACKET
#define MULTI_PACKET
#endif

#define EGALAX_PKT_TYPE_MASK        0xFE
#define EGALAX_PKT_TYPE_REPT        0x80
#define EGALAX_PKT_TYPE_DIAG        0x0A

static int egalax_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
    if ((pkt[0] & EGALAX_PKT_TYPE_MASK) != EGALAX_PKT_TYPE_REPT)
        return 0;

dev->x = ((pkt[3] & 0x0F) << 7) | (pkt[4] & 0x7F);
    dev->y = ((pkt[1] & 0x0F) << 7) | (pkt[2] & 0x7F);
    dev->touch = pkt[0] & 0x01;

return 1;
}

static int egalax_get_pkt_len(unsigned char *buf, int len)
{
    switch (buf[0] & EGALAX_PKT_TYPE_MASK) {
    case EGALAX_PKT_TYPE_REPT:
        return 5;

case EGALAX_PKT_TYPE_DIAG:
        if (len < 2)
            return -1;

return buf[1] + 2;
    }

return 0;
}
#endif


/*****************************************************************************
 * PanJit Part
 */
#ifdef CONFIG_TOUCHSCREEN_USB_PANJIT
static int panjit_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
    dev->x = ((pkt[2] & 0x0F) << 8) | pkt[1];
    dev->y = ((pkt[4] & 0x0F) << 8) | pkt[3];
    dev->touch = pkt[0] & 0x01;

return 1;
}
#endif


/*****************************************************************************
 * 3M/Microtouch Part
 */
#ifdef CONFIG_TOUCHSCREEN_USB_3M

#define MTOUCHUSB_ASYNC_REPORT          1
#define MTOUCHUSB_RESET                 7
#define MTOUCHUSB_REQ_CTRLLR_ID         10

static int mtouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
{
    if (hwcalib_xy) {
        dev->x = (pkt[4] << 8) | pkt[3];
        dev->y = 0xffff - ((pkt[6] << 8) | pkt[5]);
    } else {
        dev->x = (pkt[8] << 8) | pkt[7];
        dev->y = (pkt[10] << 8) | pkt[9];
    }
    dev->touch = (pkt[2] & 0x40) ? 1 : 0;

return 1;
}

static int mtouch_init(struct usbtouch_usb *usbtouch)
{
    int ret, i;

ret = usb_control_msg(usbtouch->udev, usb_rcvctrlpipe(usbtouch->udev, 0),
                          MTOUCHUSB_RESET,
                          USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
                          1, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
    dbg("%s - usb_control_msg - MTOUCHUSB_RESET - bytes|err: %d",
        __func__, ret);
    if (ret < 0)
        return ret;
    msleep(150);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxzdz.html