1. Си / Говнокод #16251

    +136

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 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;
       }

    Автору платили за строки?
    Из драйвера тачскрина ft5x0x

    Запостил: Pythoner, 28 Июня 2014

    Комментарии (28) RSS

    • Хм.. Без break'ов и с каким-то printk. И что же оно делает?
      Ответить
      • хуйню.
        Ответить
      • > printk
        Ядрёный логгер в линухе.

        > что же оно делает
        Упихивает координаты касаний в какой-то массив ивентов, вестимо. Т.е. если 5 точек касания - то упихает туда 5 наборов координат, если 4 - то 4. Поэтому бряков нет. Ну это так, предположение.
        Ответить
      • > с каким-то printk
        printk аналогичен printf, только пишет в системный лог, а не на stdout log level проебали...
        > что же оно делает?
        делает вид, что умеет мультитач в пять точек

        алсо, копипаст детектед
        Ответить
        • > делает вид, что умеет мультитач
          Судя по ABS_MT_WIDTH_MAJOR = 1 именно что делает вид. Хуй руку от пальца не отличит ;(

          Хотя тачскрину это не особо и надо, в отличие от тачпада...
          Ответить
          • Тач используется на дешевых китайцах, искал сорцы драйвера в связи глюками тачскрина - сам нажимает, а откалибровать хуй. Ах, да, к чему я это... На самом деле тач поддерживает только 2 касания, так что хз, или драйвер делает вид, или в ядре где то режутся касания с ид больше 2.
            Ответить
            • > или в ядре где то режутся касания с ид больше 2
              Да поди сам контроллер ёмкостного тача больше джвух точек не распознает и не отправляет. А драйвер, возможно, рассчитан на всю линейку - и где 5 распознаются, и где всего 2. Поэтому и switch на 5 точек.
              Ответить
              • А еще он нераспознает силы нажатия - поле pressure в структуре event одно на все касания, и захардкожено = 200. Так что хз что делать - думал сортировать касания по силе нажатия, а тут такая фигня:(
                Ответить
            • > хз, или драйвер делает вид, или в ядре где то режутся касания с ид больше 2
              Судя по строкам 8, 15, 22 и 29, я бы в первую очередь грешил на драйвер :)
              Гуглеж дал ссылку, тут выглядит чуть поаккуратней:
              http://preview.tinyurl.com/ft5x0x-drv
              Ответить
    • cleaned
      Ответить
      • > А разве драйвера не на асме штампуют?
        Боже упаси... Давным-давно уже не пишут ;) На асме нынче пишут только небольшие кусочки, которые компилятор либо не сможет сгенерить вообще, либо они получатся слишком медленными.
        Ответить
        • cleaned
          Ответить
        • Я кстати зашол такое же написать) А вообще асм - тот же байт-код, только вместо цыфр в некоторых местах слова. И вообще, асм очень простой язык, по тому, что там нет абстракции разных, и такая тупая простость.
          Ответить
          • >>А вообще асм - тот же байт-код, только вместо цыфр в некоторых местах слова.
            байткод может быть гораздо более высокоуровневым, чем асм.
            Ответить
    • Ручной разворот цикла с неизвестной длиной11111
      Ответить
      • Почему неизвестной? Длина до 5.
        Ответить
        • Неизвестной, про которую известно лишь то, что она меньше 5.
          Ответить

    Добавить комментарий