OpenWiki

Graffiti Manager

Edit this page (last edited February 9, 2006)
Palm Notes | Recent Changes | Title Index | User Preferences | Random Page | Help
Как устроена подсистема graffiti в palmos?

  • Введение
  • Архитектура PalmOS
  • Роль библиотеки граффити
  • Что делает программа GraffitiAnywhere?
  • Как работает подмена граффити G2 на G1?
  • Что была за проблема с PalmOS 5.4?
  • Введение

    Статья рассказывает об архитектуре подсистемы граффити в Palm OS.

    Архитектура PalmOS

    Palm OS пятой версии стала модульнее. В отличии от предыдущих версий оси, где все системные библиотеки были объединены в один модуль, новая Palm OS аккуратно разделена между отдельными модулями.

    Ядро Palm OS состоит из следующих модулей:

    Роль библиотеки граффити

    Библиотека граффити также вынесена в отдельный модуль. С точки зрения остальной части Palm OS эта библиотека является черным ящиком. Как и любая библиотека, модуль граффити предоставляет набор из 23 функций. Из них только три вызываются ядром: GrfInit ( инициализация библиотеки), GrfProcessStroke? (передача штриха на обработку) и SysGraffitiReferenceDialog (показ подсказки по граффити). Все остальные функции изредка вызываются прикладными программами.

    ===Как ядро вызывает библиотеку граффити=== Ядро Palm OS ( модуль BOOT )делает следующие действия:
    1. При старте ядро загружает библиотеку граффити. При загрузке указывается не имя библиотеки, а ее тип (libr) и код создателя (grft). Имя библиотеки совершенно безразлично.
    2. Вызывается функция GrfInit.
    3. Из системных ресурсов извлекается ресурс с координатами поля граффити. Если такой ресурс существует, то система запоминает координаты области граффити, вместе с координатами алфавитного и числовых полей.
    4. При получении росчерка в области граффити ядро вызывает GrfProcessStroke, передавая координаты. При этом ядро совершенно не заботит как и что распознается библиотекой. При получении законченных букв, библиотека просто добавляет события с распознанными буквами.
    5. При получении вертикального росчерка через весь экран, ядро может вызвать SysGraffitiReferenceDialog, которая покажет диалог основных росчерков библиотеки.

    Что делает программа GraffitiAnywhere?

    Еще во времена Palm OS 4 было понятно, что совершенно необязательно вводить граффити именно в поле, предназначенном для ввода. Первой ласточкой полноэкранного граффити была программа NewPen?. В настоящее время самой известной программой такого класса является GraffitiAnywhere?. На некоторых машинках от PalmOne? существует альтернативная реализация, наываемая GoLCD?.

    Как работают эти программы?

    Очень просто. У программ существует два режима - обычный ввод и переключени граффити на полный экран. Во втором режиме все росчерки масштабируются в росчерки в области граффити линейным преобразованием и передаются в библиотеку. Понятно, что программам, как и ядру не должно быть никакого дела до версии граффити.

    Как работает подмена граффити G2 на G1?

    Подмена библиотеки граффити основана именно на том, что
    1. Граффити вынесено в отдельную библиотеку
    2. Интерфейс библиотеки не менялся
    3. Имя библиотеки неважно, важен только ее тип и создатель, а эти два параметра у G1 и G2 совпадают
    4. Алгоритм поиска библиотеки работает так как нужно.

    Остановимся на п 4. поподробнее. Как ядро определяет какую из двух библиотек (G2 в ROM и G1 в RAM) нужно загружать? Ведь обе билиотеки имеют совпадающий тип и создателя?

    !DataManager? (менеджер баз) поступает просто - он ищет базу с максимальной версией. Версия - это внутреннее поле в заголовке базы. У библиотек G1 и G2 это поле совпадает. Если версии сопадают, то будет выбрана библиотека из RAM. Именно это и позволяет выбирать версию G1.

    Если посмотреть на алгоритм использования, то становится ясно, что билиотека выбирается однажды при загрузке. Именно поэтому и требуется ресет.

    Все проблемы с инсталляцией библиотеки через хотсинк вызваны простой причиной: протокол хотсинк плохо умеет замещать файлы, одноименные файлом из ROM.

    Что была за проблема с PalmOS 5.4?

    Старый метод подмены библиотеки перестал работать на устройствах с Palm OS 5.4. В чем проблема?

    Все оказалось просто: Palm Source изменили интерфейс библиотеки и добавили в нее еще одну функцию GrfHandleEvent?. Эта функция периодически вызывается для дополнительных отрисовок виртуального граффити. В G1 эта функция отсутствует и скорее всего не нужна, но наличие пустой функции необходимо. Я подпатчил библиотеку G1, добавил в нее отсутствующую функцию. Исправленную версию можно взять здесь: http://yahm.palmoid.com/G14OS54.zip .


    Palm Notes | Recent Changes | Title Index | User Preferences | Random Page | Help
    Edit this page | View other revisions
    Print this page | View XML
    Find page by browsing, searching or an index
    Edited February 9, 2006 (diff)
    Valid XHTML 1.0!Valid CSS!