Няшная / Говнокод #29221 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
/* IOCTL calls for E-Ink paper update */
#define EPAPER_UPDATE_LOCAL 0x101         /** Update localarea */
#define EPAPER_UPDATE_PART  0x102         /** ???              */
#define EPAPER_UPDATE_FULL  0x103         /** Fully update     */
#define EPAPER_UPDATE_DISPLAY_QT  0x120d  /** Update all display

/* Helper FB update function */
int epaper_update_helper(int fb, unsigned long int ioctl_call, void *mode)
{
  if (framebuffer_descriptor >= 0)
  {
    errno=0;
    ioctl(fb, ioctl_call, mode);
//    sleep_timer=sleep_timeout; // Reset sleep timer on every display refresh = we are not have any constantly refreshing display parts now!
    return errno;
  }
  return TRUE;
}

void epaperUpdate(__attribute__((unused)) unsigned long int ioctl_call, __attribute__((unused)) void *mode)
{
  #ifndef __amd64
  int ioctl_result;
  #endif //__amd64
  TRACE("Called void epaperUpdate()\n");
  if (enable_refresh == FALSE)
  {
    TRACE("Display refresh was locked, IGNORED!\n");
    (void) ioctl_call;
    (void) mode;
    return;
  }
  #ifndef __amd64
  /* Иначе запись в видеопамять не успевает завершиться и получаем верхний левый угол новой картинки и нижний правый - прежней. */
//  if (hw_platform != HW_PLATFORM_SIBRARY_GTK) {
//    const struct timespec delay = {0, QT_REFRESH_DELAY};
//    nanosleep(&delay, NULL);
//  }
  ioctl_result=epaper_update_helper(framebuffer_descriptor, ioctl_call, mode);
  #ifdef debug
  if (ioctl_result != 0)
  {
    TRACE("Display refresh ioctl call FAILED %d (%s)\n", ioctl_result, strerror(ioctl_result));
    // GTK прошивка, обновление от Qt: 1 (Операция не позволяется)
    // Qt прошивка, обновление от GTK: 22 (Недопустимый аргумент)
  }
  #else
  (void) ioctl_result;
  #endif
  #endif
  return;
}


int detect_refresh_type (void)
{
  int mode=3;
#if 0
  struct mxcfb_update_data data = {
    .update_region =
    { .top = 0,
      .left = 0,
      .width = 1,
      .height = 1
    },
    .update_mode = UPDATE_MODE_FULL,
    .update_marker = 0,
    .waveform_mode = WAVEFORM_MODE_AUTO,
    .temp = TEMP_USE_AMBIENT,
    .flags = 0
  };
#endif
  if (epaper_update_helper(framebuffer_descriptor, EPAPER_UPDATE_DISPLAY_QT, &mode) == 0)
  {
    refresh_type=REFRESH_NEW;
    TRACE("Display refresh was successed, new\n");
  }
  else if (epaper_update_helper(framebuffer_descriptor, EPAPER_UPDATE_FULL, &mode) == 0)
  {
    refresh_type=REFRESH_LEGACY;
    TRACE("Display refresh was successed, legacy\n");
  }
//  else if (epaper_update_helper(framebuffer_descriptor, MXCFB_SEND_UPDATE_ORG, &data) == 0)
//  {
//    refresh_type=REFRESH_KOBO;
//    TRACE("Display refresh was successed, kobo\n");
//  }
  else
  {
    TRACE("Display refresh was not detected!\n");
  }
  return (refresh_type);
}

Источник:
https://github.com/gheorghe-crihan/digma-e605-qt-apps-framework/blob/master/firstapp/digma_hw.c

Не то, чтобы говно, просто код испещрён #if 0 и комментариями.

Запостил: HoBorogHuu_nemyx HoBorogHuu_nemyx, (Updated )

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

  • Что это и для чего?

    Есть читалки на электронных чернилах типа Sibrary G5/G6/G10/G51, Digma e500/e600/q1000, Boeye и Ergo Book с теми же цифрами, что у Дигмы, Qumo Libro/Colibri, G-mini M6, Ritmix RBK700 и даже некий EvroMedia E-підручник. Все они на одном железе и с похожей прошивкой (Линукс с библиотеками GTK). Зроблены на процессоре Слмсунг S3C2416 рахит-тинктуры ARMv5TEJ (да, как у бабушкофона Philips Xenium, только у него вроде Медиатек, а не Гнусмас).

    Так вот, поскольку лепестрические чернила — птица гордая, пока не пнёшь, не полетит, прямо из прикладной программы нужно отправлять ioctl на обновление экрана (посреди кода для GTK или Qt, гы), причём есть варианты, обновить весь экран (медленно, но результат чистый) или только заданную область (быстро, но может появиться «грязь» на границе зоны обновления).
    Ответить
    • наколенное говно какое ))

      во-первых, экспортировать ioctl неприлично: надо делать SDK нормальный.
      во-вторых, эта задача решается же во всех оконных фреймворках: ты помечаешь область как "грязную", и тред в фоне ее обновляет. Я уверен, что `markDirty()` в Qt или `gdk_window_invalidate_region` в GTK что-то такое должны делать, не?
      Ответить
      • >Иначе запись в видеопамять не успевает завершиться и получаем верхний левый угол новой картинки и нижний правый

        какая синхронизация с обратным кодом луча ))
        Ответить
      • > надо делать SDK нормальный.

        Всё, что есть на данный момент, это sibrary-toolchain.tbz2 и «SZBOEYE SDK USER GUIDE-en.docx», которые лежали на китайском FTP, который уже не работает. Как я их нашёл и скачал, это отдельная история. Там в основном компилятор для armv5, а специальных библиотек для е-инка я не заметил, только рекомендацию в docx-файле делать всё через ioctl.

        Раскопки начал с этого бложика:
        https://omlin.blogspot.com/2011/02/qumo-libro.html?m=1

        Китайский фтп сдох, как я уже сказал, paccbet.ru тоже, свои файлы @omlin проебал после того, как разбил экран у читалки и потерял к читалкам интерес.
        Ответить
      • У этих читалок есть аудиокодек, только не у всех моделей есть динамик, надо наушники подключать. Из «SDK»:

        7.4 Audio driver
        7.4.1 Open driver
        fd = open("/dev/audio_sw", O_RDWR);

        7.4.2 Audio channel switch
        7.4.2.1 Playback from speaker
        ioctl (fd, 2, 0);
        7.4.2.2 Playback from headphone
        ioctl (fd, 3, 0);
        7.4.2.3 FM radio from headphone
        ioctl (fd, 5, 0);
        7.4.2.4 Capture from mic
        ioctl (fd, 4, 0);
        7.4.2.5 Capture from FM radio
        ioctl (fd, 11,0);
        7.4.2.6 Close all channel
        ioctl (fd, 6, 0);


        Бывает датчик ускорения (вероятно, чтобы автоматически менять ориентацию изображения при наклоне экрана). Из «SDK»:

        7.7 Gsensor driver

        #define AXIS_ACCEL_ON 1
        #define AXIS_ACCEL_OFF 2
        #define AXIS_ACCEL_READ 3

        Open gsensor:
        fd=Open(“/dev/axis_accel”,O_RDWR);

        Turn on the gsensor:
        ioctl(fd,AXIS_ACCEL_ON);

        Turn off the gsensor:
        ioctl(fd,AXIS_ACCEL_OFF);

        Get the state of ereader:
        ret = Ioctl(fd,AXIS_ACCEL_READ);

        the value of ret bits[4:2] dir_status:

        identify direction:
        dir_status = 0,unknow
        dir_status = 1, up
        dir_status = 2, down
        dir_status = 3, left
        dir_status = 4, right


        Часики:

        Open RTC driver:
        fd = open(“/dev/rtc0”, O_RDWR)
        RTC read :
        ioctl(fd, RTC_RD_TIME, &tm);

        RTC write :
        ioctl(fd, RTC_SET_TIME, &tm);

        Set alarm time :
        ioctl(fd, RTC_ALM_SET, &tm);

        Close RTC device:
        close(fd);
        Ответить
        • Светодиодик:

          7.11 LED driver

          #define GREEN_LED_ON 0x3
          #define GREEN_LED_OFF 0x4
          #define GREEN_LED_FLASH 0x5

          Open led:
          fd=open(“/dev/boeye_leds”,O_RDWR);

          Turn on the green led:
          ioctl(fd, GREEN_LED_ON);

          Turn off the green led:
          ioctl(fd, GREEN_LED_OFF);

          Flash the green led:
          ioctl(fd, GREEN_LED_FLASH);


          У некоторых моделей есть симка и вайфай. Надо ли говорить, что включение/выключение модема производится тоже через ioctl.
          Ответить
          • а не надо таймаут после ioctl кстати?
            Ответить
            • Судя по этому участку, иногда надо:

              /* Иначе запись в видеопамять не успевает завершиться и получаем верхний левый угол новой картинки и нижний правый - прежней. */
              //  if (hw_platform != HW_PLATFORM_SIBRARY_GTK) {
              //    const struct timespec delay = {0, QT_REFRESH_DELAY};
              //    nanosleep(&delay, NULL);
              //  }
              Ответить
              • Оцени, кстати:
                HW_PLATFORM_SIBRARY_GTK
                QT_REFRESH_DELAY

                В одном участке кода! Что вижу, о том пою.
                Ответить
                  • Тоже поржал. Я не знал о бренде Sibrary, пока не начал искать ПО для Дигмы, так я узнал, что Дигма и всё перечисленное (Qumo, Ergo, Ritmix и прочие суньхуньвчаи) — клоны Sibrary.
                    Ответить
                  • ЖЫРНАЯ как СЕБАРЕЯ

                    also

                    >RIBRARY

                    Am: We have elections every four years
                    Jap: I have erlection everly morlning
                    Ответить
                    • Да, у нихонцев одноударное «р» вместо раскатистого, поэтому японцы путают «р» и «л». Нету у них отдельного «л» в качестве фонемы.

                      А китайцы «р» и «ж» не различают.
                      Ответить
  • Если вас тоже бесит «ИИ-обзор» во время поиска в гугле, который обычно не выдаёт ничего полезного, то есть простое решение.

    Оказывается, если в конце запроса добавить -nigger, то блок с ИИ пропадает.

    ГОЛОГУБ!!!
    Ответить
    • Есть два способа:
      1. Написать знак минуса и слово, которое нужно исключить (нужно подобрать слово, которого точно не будет в ответе). «ИИ» не умеет обрабатывать такие сложные запросы.

      2. Добавить любое стоп-слово, например, f-word или n-word. Есть риск, что оно появится в ответе.

      Метод «-nigger» же объединяет оба перечисленных выше метода для надёжности. Причём обычно даже без побочных эффектов, если только ты не ищешь ниггеров специально.
      Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8