- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
switch(event->touch_point) {
case 5:
input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x5);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y5);
input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 1);
input_mt_sync(data->input_dev);
// printk("===x2 = %d,y2 = %d ====\n",event->x2,event->y2);
case 4:
input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x4);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y4);
input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 1);
input_mt_sync(data->input_dev);
// printk("===x2 = %d,y2 = %d ====\n",event->x2,event->y2);
case 3:
input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x3);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y3);
input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 1);
input_mt_sync(data->input_dev);
// printk("===x2 = %d,y2 = %d ====\n",event->x2,event->y2);
case 2:
input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x2);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y2);
input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 1);
input_mt_sync(data->input_dev);
// printk("===x2 = %d,y2 = %d ====\n",event->x2,event->y2);
case 1:
input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->x1);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->y1);
input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 1);
input_mt_sync(data->input_dev);
printk("===x1 = %d,y1 = %d ====\n",event->x1,event->y1);
default:
// printk("==touch_point default =\n");
break;
}
Ядрёный логгер в линухе.
> что же оно делает
Упихивает координаты касаний в какой-то массив ивентов, вестимо. Т.е. если 5 точек касания - то упихает туда 5 наборов координат, если 4 - то 4. Поэтому бряков нет. Ну это так, предположение.
printk аналогичен printf, только пишет в системный лог, а не на stdout log level проебали...
> что же оно делает?
делает вид, что умеет мультитач в пять точек
алсо, копипаст детектед
Судя по ABS_MT_WIDTH_MAJOR = 1 именно что делает вид. Хуй руку от пальца не отличит ;(
Хотя тачскрину это не особо и надо, в отличие от тачпада...
Да поди сам контроллер ёмкостного тача больше джвух точек не распознает и не отправляет. А драйвер, возможно, рассчитан на всю линейку - и где 5 распознаются, и где всего 2. Поэтому и switch на 5 точек.
Судя по строкам 8, 15, 22 и 29, я бы в первую очередь грешил на драйвер :)
Гуглеж дал ссылку, тут выглядит чуть поаккуратней:
http://preview.tinyurl.com/ft5x0x-drv
Боже упаси... Давным-давно уже не пишут ;) На асме нынче пишут только небольшие кусочки, которые компилятор либо не сможет сгенерить вообще, либо они получатся слишком медленными.
А ты уверен, что ты сможешь писать на асме лучше нынешних компиляторов сишечки?
2. да
остался один вопрос
байткод может быть гораздо более высокоуровневым, чем асм.