안드로이드에 Touch를 추가하려고 합니다. S5PV210칩입니다.


아래는 Penmount 드라이버의 일부분인데...
디버그 메시지로는 Release시의 메시지가 잘나옵니다. ( 클릭시 [0: 100,100] , 손을땔시 [1:100,100])
그런데 실제 동작시에는 Release 동작을 하지 않습니다. Click다음 UP일때 동작을 하는데...모든 동작이 안먹네요..ㅠㅠ
개발자옵션에서 Pointer Location을 활성화 시키면...

P 1/1 => P 0/1 으로 BTN_TOUCH 가 0으로 잘나오지만...
Prs 부분이 클릭시 1로 올라가고 터치를 때면 0으로 떨어지질 않습니다.
Prs와 관련된 다른 부분이 있는지요.

마우스로 테스트할때는 Prs부분이 클릭시 1..UP시에 0으로 떨어집니다.


Android 소스까지 파봐야 하나요..ㅠㅠ


input_report_key(pInputDev, BTN_TOUCH, 0);
input_report_abs(pInputDev, ABS_PRESSURE, 0);
input_sync(pInputDev);

이 세가지 함수로 다들 UP이벤트를 구현하는거 같던데..동작을 안하네요...


========= Kernel 단 드라이버=================

int Init()

{   .....

        pInputDev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
        pInputDev->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) | BIT_MASK(ABS_PRESSURE);
        pInputDev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
        input_set_abs_params(pInputDev, ABS_X, 0, 0x3FF, 0, 0);
        input_set_abs_params(pInputDev, ABS_Y, 0, 0x3FF, 0, 0);
        input_set_abs_params(pInputDev, ABS_PRESSURE, 0, 1, 0, 0);

..........
}


staticvoid PenMount_ProcessEvent(struct input_dev *pInputDev,struct strPenMount *pPenMount)
{
        if (pPenMount->bTouch) {
                if (!pPenMount->bTouching) {
                        input_report_abs(pInputDev, ABS_X, pPenMount->X);
                        input_report_abs(pInputDev, ABS_Y, pPenMount->Y);
                        input_report_key(pInputDev, BTN_TOUCH, 1);
                        input_sync(pInputDev);
                        pPenMount->bTouching = 1;
                        printk("[1: %d,%d]",pPenMount->X,pPenMount->Y);
                }
        } else {
                if (pPenMount->bTouching) {
                        //input_report_abs(pInputDev, ABS_X, pPenMount->X);
                        //input_report_abs(pInputDev, ABS_Y, pPenMount->Y);
                        input_report_key(pInputDev, BTN_TOUCH, 0);
                        input_report_abs(pInputDev, ABS_PRESSURE, 0);
                        input_sync(pInputDev);
                        pPenMount->bTouching = 0;
                        printk("[0: %d,%d]",pPenMount->X,pPenMount->Y);
                }
        }
        pPenMount->bTouch = 0;

        return;
}