Открыть главное меню

Изменения

AHI

9137 байт добавлено, 14:29, 20 августа 2009
Нет описания правки
AHI {{lang-en|ATI Handheld Interface}} — драйвер для чипов ATI. Присутствует в каждой прошивке для телефонов, где есть чип ATI, а это - все телефоны на базе [[LTE]] и [[LTE2]].

== Чипы ATI ==
Два основных чипа, используемых в телефонах [[Motorola]]:
*[[ATI W2250]] - преимущественно в LTE
*[[ATI W2260]] - преимущественно в LTE2

API драйвера для различных чипов одинаков, однако внутреннее устройство значительно различается (''По словам владельцев. Лично мне неизвестно, насколько. A51'')

== Применение ==
Вывод графики через драйвер, в обход стандартных средств прошивки (см. [[Canvas]]), предоставляет больше возможностей по сравнению с последними, и, при правильном применении, работает значительно быстрее.

Если Вам нужно, чтобы вывод собственной графики был на максимально возможной скорости, как, например, для разработки динамичных [[ELF Игры|игр]] - тогда стоит задуматься о применении средств драйвера. В остальных случаях использование [[Canvas]] будет значительно проще.

С учётом сказанного, для наиболее эффективного использования средств, предоставляемых драйвером, их следует использовать в приложении, основанном на [[Task|таске]].

=== Основные концепции ===
API драйвера напоминает интерфейсом обычные графические библиотеки, как например GDI. Рассмотрим основные понятия и приёмы работы с AHI в применении к эльфописанию.

AHI разрабатывался отдельно от программных продуктов, где он используется, поэтому был спроектирован максимально универсальным. Одно из следствий такой универсальности является возможность драйвера распараллеливать работу с железом между различными "клиентами", а именно - между приложениями операционной системы и самой ОС.

Для обеспечения такой возможности используется специальный объект, с которым разработчику [[ELF|эльфа]] под драйвер придётся сталкиваться постоянно - это ''контекст устройства''.

==== Контекст устройства ====
'''Контекст устройства''' ({{lang-en|Device Context}}) — структура данных, обеспечивающая эксклюзивный доступ к устройству вывода для приложения, использующего эту структуру и предотвращающая влияние других приложений на процесс работы с устройством. В ней хранятся все данные о текущем состоянии устройства, устанавливаемом приложением - владельцем контекста.

Чтобы лучше разъяснить как это работает, рассмотрим ситуацию на упрощенном примере:
:'''Приложения A''' и '''B''' работают параллельно, и хотят получить доступ к '''Устройству''', для чего каждый из них создаёт с помощью AHI новый '''контекст''' для собственного пользования.
:'''Приложение A''' пытается изменить состояние '''Устройства''', скажем, меняет основной цвет "кисти" на <font color="red">красный</font>. А на самом деле, информация о цвете кисти попадает не сразу в '''Устройство''', а сохраняется в '''контексте приложения A'''.
:'''Приложение B''' тоже меняет (в своём '''контексте''') цвет кисти, но на <font color="blue">синий</font>.
:Теперь, '''Приложение B''' пытается вывести линию <font color="blue">синим</font> цветом. Для этого драйвер отсылает '''контекст приложения B''' (вместе с информацией о цвете) '''Устройств'''у и подаёт команду на рисование линии текущим (<font color="blue">синим</font>) цветом.
:После этого, если '''Приложение A''' тоже решит нарисовать линию, ему не придётся "задумываться" о том, что '''Приложение B''' что-то там проделало с '''Устройством''', а просто вызовет функцию рисования линии, и драйвер нарисует её <font color="red">красным</font> цветом, выполнив те же процедуры с контекстом.

Если бы небыло системы контекстов, и данные сразу попадали в устройство, то после установки '''Приложением B''' цвета в <font color="blue">синий</font>, '''Приложение A''' тоже бы получало <font color="blue">синие</font> линии вместо желаемых <font color="red">красных</font>.

В коде контекст описывается как тип <tt>'''AHIDEVCONTEXT_T'''</tt> и является первым параметром почти у всех функций AHI.
В ОС [[P2K]] напрямую функции драйвера не используются (кроме [[JVM|Java-машины]]), а Функции графики предоставляются через промежуточную надстройку над AHI - [[DAL]], поэтому все приложения ОС (а точнее, система [[UIS]]), так же как и сама ОС, используют единственный системный контекст.

Для эльфов есть выбор, как получить контекст:
<ol>
<li>Можно получить системный контекст, который использует ОС, с помощью функции [[DAL_GetDeviceContext]]:
<pre>
// Это будет наш контекст. Удобнее всего объявить его глобальным
AHIDEVCONTEXT_T dCtx;

// Получаем системный контекст
dCtx = DAL_GetDeviceContext(0);
</pre>
Недостаток этого способа - необходимо помнить, что приложение не является единственным клиентом драйвера, и делать необходимые установки перед каждой операцией вывода.
</li>
<li>Либо можно создать новый контекст только для нужд приложения, с помощью функций [[ldrGetAhiDevice]] и [[AhiDevOpen]]:
<pre>
// Это будет наш контекст. Удобнее всего объявить его глобальным
AHIDEVCONTEXT_T dCtx;

// Информация об устройстве
AHIDEVICE_T device;

// В EP2 уже есть вспомогательная функция для получения информации об устройстве
device = ldrGetAhiDevice();

// Создаём контекст
sts = AhiDevOpen( &dCtx, device, "Matrix", 0 );
</pre>
Недостаток этого способа - если функции драйвера используются несколькими клиентами одновременно, они работают медленнее из-за необходимости постоянно переключаться между контекстами.
</li>
</ol>

----
Пока что это всё, ждите продолжения :)
--[[Участник:Andy51|Andy51]] 18:29, 20 августа 2009 (MSD)

[[Категория:Эльфостроение]]
161
правка