기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
아래는 Penmount 드라이버의 일부분인데...
디버그 메시지로는 Release시의 메시지가 잘나옵니다. ( [0: 100,100] )
그런데 실제 동작시에는 Relase이벤트가 발생을 안합니다.
개발자옵션에서 Pointer Location을 활성화 시키면...
P 1/1 => P 0/1 으로 BTN_TOUCH 가 0으로 잘나오지만...
Prs 부분이 클릭시 1로 올라가고 터치를 때면 0으로 떨어지질 않습니다.
Prs와 관련된 다른 부분이 있는지요.
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;
}