{"id":1310,"date":"2013-08-27T00:27:33","date_gmt":"2013-08-26T22:27:33","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=1310"},"modified":"2013-08-27T00:27:33","modified_gmt":"2013-08-26T22:27:33","slug":"driver-tactil","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=1310","title":{"rendered":"Driver tactil"},"content":{"rendered":"<p>Acabo de terminar la segunda versi\u00f3n completamente funcional del driver para el <a href=\"http:\/\/linux-sunxi.org\/GSL1680\" target=\"_blank\">chip t\u00e1ctil GSL1680<\/a> que incorpora <a href=\"https:\/\/blog.rastersoft.com\/?p=1218\" target=\"_blank\">mi tablet<\/a>. Entre las ventajas que tiene est\u00e1n que, adem\u00e1s de procesar pulsaciones normales, permite tambi\u00e9n emular la rueda de desplazamiento del rat\u00f3n para hacer scroll de una ventana, as\u00ed como emular zoom-in y zoom-out con el gesto <em>pinch-to-zoom<\/em>. Por \u00faltimo, tambi\u00e9n permite hacer <em>click derecho<\/em> de manera puramente t\u00e1ctil.<\/p>\n<p>El scroll se hace con dos dedos, movi\u00e9ndolos de manera simultanea. Cuando el driver lo detecta emite eventos <em>wheel<\/em> y <em>hwheel<\/em>, que todas las aplicaciones interpretan como scroll. Por otro lado, al detectar un <em>pinch-to-zoom<\/em>, emite un evento <em>wheel<\/em> m\u00e1s la tecla <em>CTRL<\/em>. Esto se interpreta, en general, como zoom (al menos en Firefox, GIMP e InkScape).<\/p>\n<p>El click derecho es el menos intuitivo, pero dado que no es algo se se utilice demasiado, no es tan problem\u00e1tico. Para hacerlo hay que:<\/p>\n<ul>\n<li>tocar con un dedo en la pantalla, y mantenerlo.<\/li>\n<li>tocar y soltar con otro dedo sin quitar el primer dedo de la pantalla. Esto hace entrar al driver en el modo <em>click derecho<\/em><\/li>\n<li>mover el primer dedo al punto donde queremos hacer <em>click derecho<\/em> (lo normal es que ya est\u00e9 ah\u00ed, pero&#8230;)<\/li>\n<li>tocar y soltar con otro dedo sin quitar el primer dedo de la pantalla.<\/li>\n<li>mientras no despeguemos el primer dedo de la pantalla, podemos hacer tantos <em>clicks derechos<\/em> como queramos en cualquier parte de la pantalla.<\/li>\n<\/ul>\n<p>Como es algo lioso, sugiero ver este v\u00eddeo de demostraci\u00f3n del driver. El <em>click derecho <\/em>se hace en el segundo 5:<\/p>\n<p style=\"text-align: center;\"><iframe loading=\"lazy\" src=\"\/\/www.youtube.com\/embed\/1pRL_Zj-kGs\" height=\"315\" width=\"420\" allowfullscreen=\"\" frameborder=\"0\"><\/iframe><\/p>\n<p>Para programar el driver decid\u00ed no meterme en fregados, y lo implement\u00e9 como un driver en espacio de usuario mediante <a href=\"http:\/\/thiemonge.org\/getting-started-with-uinput\" target=\"_blank\">uinput<\/a>. La principal ventaja es que resulta mucho m\u00e1s sencillo de depurar que un m\u00f3dulo para el kernel, adem\u00e1s de permitir hacer cosas m\u00e1s avanzadas, como cargar el firmware directamente, sin necesidad de meter a udev por medio. A nivel t\u00e9cnico, comentar que, en realidad, se crean <em>dos<\/em> dispositivos, uno de tipo absoluto (pantalla t\u00e1ctil, touchpad&#8230;) y otro de tipo relativo (rat\u00f3n). El motivo es que un mismo dispositivo no puede enviar eventos relativos y absolutos a la vez, pero para el cursor necesitaba eventos absolutos, mientras que para el scroll y el zoom necesitaba relativos.<\/p>\n<p>De momento el<a href=\"https:\/\/github.com\/rastersoft\/gsl1680\" target=\"_blank\"> c\u00f3digo del driver est\u00e1 disponible \u00fanicamente en github<\/a>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Acabo de terminar la segunda versi\u00f3n completamente funcional del driver para el chip t\u00e1ctil GSL1680 que incorpora mi tablet. Entre las ventajas que tiene est\u00e1n que, adem\u00e1s de procesar pulsaciones normales, permite tambi\u00e9n emular la rueda de desplazamiento del rat\u00f3n para hacer scroll de una ventana, as\u00ed como emular zoom-in y zoom-out con el gesto &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=1310\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Driver tactil<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,5],"tags":[],"class_list":["post-1310","post","type-post","status-publish","format-standard","hentry","category-cacharreo","category-programacion"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1310"}],"version-history":[{"count":0,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1310\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}