Perguntas sobre o driver de entrada multitouch do kernel [closed]

2

Estou desenvolvendo um driver de kernel Linux para um dispositivo multitouch. Eu usei como ponto de partida o driver usbtouchscreen incluído na fonte do kernel linux-3.0.

Embora eu já possa fazer meu ponteiro do mouse se mover com o toque, ainda há muitas perguntas que ainda surgem:

  • Quando configurado corretamente, o xinput listará meu dispositivo como dispositivo mulitouch ou touchscreen? A única coisa que consegui até agora foi listada na categoria Virtual Core Pointer

  • Como devo configurar e configurar corretamente o dispositivo de entrada? É assim que eu estou fazendo:

  
    
      

/ * Para toque único * /
          input_set_abs_params (input_dev, ABS_X, 0, 6300, 0, 0);
          input_set_abs_params (input_dev, ABS_Y, 0, 6300, 0, 0);

             

/ * para multi-toque * /
          input_mt_init_slots (input_dev, 6);
          input_set_abs_params (input_dev, ABS_MT_TOUCH_MAJOR, 0, 0xff, 0, 0);
          input_set_abs_params (input_dev, ABS_MT_POSITION_X, 0, 6300, 0, 0);
          input_set_abs_params (input_dev, ABS_MT_POSITION_Y, 0, 6300, 0, 0);

    
  
  • Como devo injetar toques corretamente? No protocolo de entrada multitoque linux, diz o seguinte:
  
    
      

O protocolo é dividido em dois tipos, dependendo das capacidades do hardware. -Para dispositivos que lidam com contatos anônimos (tipo A), o protocolo descreve como enviar os dados brutos para todos os contatos para o receptor. Para dispositivos capazes de rastrear contatos identificáveis (tipo B), o protocolo descreve como enviar atualizações para contatos individuais por meio de slots de eventos.

             

O que significa contatos anônimos? Meu dispositivo envia dados brutos e meu rastreamento é feito no kernel. No momento em que estou prestes a injetar toques no subsistema do kernel, já toquei em identificado e rastreado. O que é afinal o meu tipo de dispositivo?

             

Independentemente disso, eu já tentei os dois tipos de relatórios e não parecem me dar uma entrada multitoque. É assim que estou fazendo agora:

    
  
if(touchActive)
{
    input_mt_slot(usbtouch->input, Touch->Id);
    input_mt_report_slot_state(usbtouch->input, MT_TOOL_FINGER, true);

   input_report_abs(usbtouch->input, ABS_MT_TOUCH_MAJOR, 128);
   input_report_abs(usbtouch->input, ABS_MT_POSITION_X, Touch->ReportedPosition.X);
   input_report_abs(usbtouch->input, ABS_MT_POSITION_Y, Touch->ReportedPosition.Y);

   touch++;
}

if (touch>0)
{
    input_report_key(usbtouch->input, BTN_TOUCH, true);

    input_report_abs(usbtouch->input, ABS_X, Touch->ReportedPosition.X);
    input_report_abs(usbtouch->input, ABS_Y, Touch->ReportedPosition.Y);

    input_sync(usbtouch->input);
}
  • Como posso testar a entrada multitouch do lado do usuário? Estou tentando ver se o xinput lista meu dispositivo como um dispositivo multitouch. Sem sucesso. Eu também estou tentando um exemplo de qt4-demos, pintura de dedo que sempre não me dá nada. Existe alguma ferramenta "oficial" para testes de entrada multitouch do Ubuntu?
por Nuno Santos 09.11.2011 / 13:28

0 respostas