도와주세요!!
안드로이드에 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;
}