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

Изменения

AHI

29 277 байт добавлено, 05:23, 1 апреля 2019
metadesc
AHI {{lang-en|ATI Handheld Interface}} — драйвер для чипов ATI. Присутствует в каждой прошивке для телефонов, где есть чип ATI, а это - все телефоны на базе [[LTE]] и [[LTE2]].
<metadesc>AHI - драйвер для чипов ATI. Присутствует в каждой прошивке для телефонов, где есть чип ATI, а это - все телефоны на базе LTE и LTE2.</metadesc>
yZfgLO <a href="http://ejdjudbgakhl.com/">ejdjudbgakhl</a>, [url=http://fevoeukacthf.com/]fevoeukacthf[/url], [linkЧипы ATI ==http://mebvchxotgxg.com/]mebvchxotgxg[/link], http://hkksxkbsltie.com/
httpДва основных чипа, используемых в телефонах [[Motorola]]://topsailnet.com/#39145 buy ambien *[[ATI W2250]] - buy ambien no prescription http://www.americanindependentwriters.net/#35827 buy ativan online преимущественно в LTE*[[ATI W2260]] - buy ativan without a prescriptionпреимущественно в LTE2
http://lifeofpisAPI драйвера для различных чипов одинаков, однако внутреннее устройство значительно различается (''По словам владельцев.com/#75709 alternatives to lamisil - lamisil tablet side effect http://wwwЛично мне неизвестно, насколько.corasyndicate.com/#59342 phentermine - phentermineA51'')
http://donteatthatyet.com/#70608 buy valium online without prescription - generic valium
http== Применение == Вывод графики через драйвер, в обход стандартных средств прошивки (см. [[Canvas]]), предоставляет больше возможностей по сравнению с последними, и, при правильном применении, работает значительно быстрее. Если Вам нужно, чтобы вывод собственной графики был на максимально возможной скорости, как, например, для разработки динамичных [[ELF Игры|игр]] - тогда стоит задуматься о применении средств драйвера. В остальных случаях использование [[Canvas]] будет значительно проще. С учётом сказанного, для наиболее эффективного использования средств, предоставляемых драйвером, их следует использовать в приложении, основанном на [[Task|таске]].  == Основные понятия и начало работы == API драйвера напоминает интерфейсом обычные графические библиотеки, как например GDI. Рассмотрим основные понятия и приёмы работы с AHI в применении к эльфописанию. AHI разрабатывался отдельно от программных продуктов, где он используется, поэтому был спроектирован максимально универсальным. Одно из следствий такой универсальности является возможность драйвера распараллеливать работу с железом между различными "клиентами", а именно - между приложениями операционной системы и самой ОС. Для обеспечения такой возможности используется специальный объект, с которым разработчику [[ELF|эльфа]] под драйвер придётся сталкиваться постоянно - это ''контекст устройства''.  === Контекст устройства === '''Контекст устройства''' ({{lang-en|Device Context}}) — структура данных, обеспечивающая эксклюзивный доступ к устройству вывода для приложения, использующего эту структуру и предотвращающая влияние других приложений на процесс работы с устройством. В ней хранятся все данные о текущем состоянии устройства, устанавливаемом приложением - владельцем контекста. Чтобы лучше разъяснить как это работает, рассмотрим ситуацию на упрощенном примере::'''Приложения A''' и '''B''' работают параллельно, и хотят получить доступ к '''Устройству''', для чего каждый из них создаёт с помощью AHI новый '''контекст''' для собственного пользования.:'''Приложение A''' пытается изменить состояние '''Устройства''', скажем, меняет основной цвет "кисти" на <font color="red">красный<//wwwfont>.inthesunnyspotА на самом деле, информация о цвете кисти попадает не сразу в '''Устройство''', а сохраняется в '''контексте приложения A'''.net:'''Приложение B''' тоже меняет (в своём '''контексте''') цвет кисти, но на <font color="blue">синий</#22456 cialis - buy cialishttpfont>.:Теперь, '''Приложение B''' пытается вывести линию <font color="blue">синим</font> цветом. Для этого драйвер отсылает '''контекст приложения B''' (вместе с информацией о цвете) '''Устройств'''у и подаёт команду на рисование линии текущим (<font color="blue">синим</wwwfont>) цветом.carolinarailfan:После этого, если '''Приложение A''' тоже решит нарисовать линию, ему не придётся "задумываться" о том, что '''Приложение B''' что-то там проделало с '''Устройством''', а просто вызовет функцию рисования линии, и драйвер нарисует её <font color="red">красным</font> цветом, выполнив те же процедуры с контекстом.com#15033 phentermine pills online - real phentermine no prescriptionhttp: Если бы небыло системы контекстов, и данные сразу попадали в устройство, то после установки '''Приложением B''' цвета в <font color="blue">синий</font>, '''Приложение A''' тоже бы получало <font color="blue">синие</font> линии вместо желаемых <font color="red">красных</wwwfont>.buyonlinecialis  В коде контекст описывается как тип <tt>'''AHIDEVCONTEXT_T'''</tt> и является первым параметром почти у всех функций AHI.coВ ОС [[P2K]] напрямую функции драйвера не используются (кроме [[JVM|Java-машины]]), а Функции графики предоставляются через промежуточную надстройку над AHI - [[DAL]], поэтому все приложения ОС (а точнее, система [[UIS]]), так же как и сама ОС, используют единственный системный контекст.uk#25376 buy cialis vs viagra - buy cialis online cheaphttp Для эльфов есть выбор, как получить контекст:<ol><li>Можно получить системный контекст, который использует ОС, с помощью функции [[DAL_GetDeviceContext]]:<pre>//wwwЭто будет наш контекст.buyviagragenericУдобнее всего объявить его глобальнымAHIDEVCONTEXT_T dCtx; // Получаем системный контекстdCtx = DAL_GetDeviceContext(0);</pre>Недостаток этого способа - необходимо помнить, что приложение не является единственным клиентом драйвера, и делать необходимые установки перед каждой операцией вывода.coА так же есть вероятность появления искажений в прорисовке экрана самой системой (UIS).uk#70789 buy viagra online paypal - viagra cialishttp</li><li>Либо можно создать новый контекст только для нужд приложения, с помощью функций [[ldrGetAhiDevice]] и [[AhiDevOpen]]:<pre>//pamelahelmephotographyЭто будет наш контекст.comУдобнее всего объявить его глобальнымAHIDEVCONTEXT_T dCtx; /#39765 imitrex and pregnancy / Информация об устройствеAHIDEVICE_T device; // В EP2 уже есть вспомогательная функция для получения информации об устройствеdevice = ldrGetAhiDevice(); // Создаём контекстsts = AhiDevOpen( &dCtx, device, "Matrix", 0 );</pre>Недостаток этого способа - если функции драйвера используются несколькими клиентами одновременно, они работают медленнее из- imitrex 100mghttp:за необходимости постоянно переключаться между контекстами.</li></wwwol>  === Поверхности === Прежде чем переходить к рассмотрению непосредственно программирования под AHI, необходимо ознакомиться с ещё одним важнейшим понятием - "поверхностями". Поверхность ({{lang-en|Surface}}, "Сурфейс") — логически выделенный участок [[Видеопамять|видеопамяти]] чипа ATI. Как многим из вас известно, у видеочипов часто есть собственная видеопамять, причём эта видеопамять не обязательно доступна [[MCU|процессору]] напрмяую. В телефонах [[Motorola]] с чипами ATI именно такой случай. Размер внутренней видеопамяти (располагается прямо на чипе) на [[W2250]] и [[W2260]] одинаков и составляет ''192Kb'', однако к [[W2260]] подключен внешний модуль для расширения внутренней видеопамяти. Последняя работает медленнее внутренней, что отчасти компенсируется её значительно большим объёмом. [[MCU]] может обращаться к видеопамяти двумя способами - через [[DMAC]] (только запись), либо через [[QSPI]] (чтение и запись). Все растровые операции AHI производятся с участием поверхностей.buyonlinecialisЕсть четыре наиболее важные поверхности, используемые в работе драйвера.coОднако, последняя фраза не означает, что поверхностей именно четыре, скорее следует понимать это как статусы, присваиваемые определённым поверхностям, и при этом одна и та же поверхность(участок памяти) может принимать одновременно несколько таких статусов:*'''Отображаемая поверхность ("Display Surface", "Экранная поверхность", она же "Экранный буфер")*:Это та поверхность, из которой в данный момент чип берёт информацию для непосредственного вывода на экран.uk#69839 buy cialis without prescription *:Устанавливается с помощью функции [[AhiDispSurfSet]], а получить можно с помощью [[AhiDispSurfGet]]*'''Поверхность назначения ("Destination Surface", "Поверхность- buy cialis professionalhttpприёмник")*:Эта поверхность является целевой для функций рисования, тоесть в неё будет попадать результат операции.*://wwwУстанавливается функцией [[AhiDrawSurfDstSet]]*'''Поверхность-источник ("Source Surface")*:Эта поверхность является источником данных для функций рисования, например картинка спрайта, который мы хотим нарисовать.*:Устанавливается функцией [[AhiDrawSurfSrcSet]]*'''Поверхность кисти ("Brush Surface")*:С этой поверхностью приложения никогда не работают напрямую, но о её существовании нужно знать, чтобы проще было понимать принцип работы некоторых функций рисования - она является важным вспомогательным инструментом. Всегда монохромная (однобитная), и используется как параметр PATTERN в [[ROP|растровых операциях]].*:Устанавливается самим драйвером, а настраивается с помощью функции [[AhiDrawBrushSet]].buyviagrageneric Иногда требуется создать собственную поверхность в видеопамяти, например, чтобы закешировать спрайт (вывод графики из внутренней памяти намного быстрее, чем из системной).coДля этого можно использовать функции [[AhiSurfAlloc]], [[AhiSurfFree]], [[AhiSurfReuse]].uk#33178 buy viagra without prescription  === Координаты === Ещё одна вещь, с которой придётся постоянно иметь дело - buy viagra cheaphttpэто точки и области экрана и их координаты. Координатная система экрана (да и всякой поверхности, тоже!) с точки зрения чипа ATI имеет следующую конфигурацию:*Начало отсчёта - в левом верхнем углу, отсчёт начинается с нуля*Ось X направлена вправо*Ось Y направлена вниз Два основных объекта для описания координатных положений - это <tt>AHIPOINT_T</tt> и <tt>AHIRECT_T</tt>:<pre>typedef struct{INT32 x, y; } AHIPOINT_T; typedef struct{INT32 x1, y1, x2, y2; } AHIRECT_T;</www.buypre> Если с первым всё понятно -tramadolпросто задаёт координаты точки по x и y, то <tt>AHIRECT_T</tt>, который задаёт прямоугольную область экрана, стоит рассмотреть чуть подробнее:*<tt>x1, y1</tt> -now.comкоординаты левого верхнего угла прямоугольника*<tt>x2, y2</#26499 tramadol adverse side effects tt> - правого нижнегоВажное замечание: в отличие от используемой в [[UIS]] системе задания такой области, здесь координаты правого нижнего угла задаются '''не включительно'''!Например, если x1&nbsp;=&nbsp;0, x2&nbsp;=&nbsp;32 - buy tramadol cheap 120httpэто означает, что в область попадут точки с координатами x от 0 до 31.  Чаще всего эти две структуры используются в функциях AHI примерно так:<pre>UINT32 AhiDrawBitBlt( AHIDEVCONTEXT_T devCx, AHIRECT_T *dstRect, AHIPOINT_T *srcPt );</pre>*<tt>AHIRECT_T</wwwtt> указывает область на целевой поверхности, куда попадёт картинка из поверхности-источника, и именно он задаёт размер картинки.orderphenterminenow*<tt>AHIPOINT_T</tt> указывает координаты левого верхнего угла на поверхности-источнике, откуда будет скопирована область, размерами равная размерам прямоугольника <tt>AHIRECT_T</tt>.org/#82098 phentermine 37  === Цвет === Как многие знают, во многих телефонах используются дисплеи с глубиной цвета 16 бит (Покомпонентно: 5 бит на красный, 6 бит на зелёный и 5 - на синий, "RGB565"), а в настольных компьютерах - с глубиной цвета в 24 бита (по 8 бит на каждую компоненту цвета, "RGB888").5mg without perscription or approvals Многие привыкли к заданию цвета в 24- midland pharmacy phenterminehttpбитном формате на настольных компьютерах, да и это намного легче, стоит только рассмотреть пример://www0xFACE8D - в 24bpp сразу видно, какая интенсивность цвета на каждой компоненте, а на 16bpp это будет 0xFE71, и ничего не понятно...buyviagrabluepillsВебдизайнеры поймут.com#95147 online cheap viagra buy  Для облегчения задачи, предусмотрен макрос, который получает из привычного RGB888 цвета - on line order viagrahttpRGB565, например:<pre>ATI_565RGB(0xFA, 0xCE, 0x8D);<//wwwpre>Конечно, пользоваться им необязательно для случаев "чёрного" и "белого" - это 0x0 и 0xFFFF соответственно. {{Внимание|Нетрудно однако подсчитать, что "белый"(0xFFFF) в RGB565 при переводе обратно в RGB888 будет уже не очень "белым", далеко не 0xFFFFFF. Это полезно иметь в виду, когда работаете с картинками в формате RGB565}} Возможно, у Вас уже назрел вопрос ещё с первых строк этого раздела, "А как же 18-битные дисплеи, которые ставили, например, на E1?" Так вот по крайней мере [[W2250]] не имеет поддержки 18-битных поверхностей, чтобы обеспечить использование возможностей такого дисплея, так что это был не более чем маркетинговый ход. Впрочем, это же судя по всему касается и [[LTE2]] телефонов, так как для графики там опять же используются 16-битные поверхности. Во многих графических адаптерах прошлого (хотя, и по сей день нередко используется, например, в консолях) основным режимом был 8-битный цвет с палитрой. К моему великому сожалению, портативные чипы ATI не имеют аппаратной поддержки 8-битных палитр (8-битный цвет - возможно, только в формате RGB322, но не проверено), но есть особенность, которую можно назвать однобитной палитрой. Однобитные поверхности занимают особое место среди прочих. А именно, при выводе однобитной картинки, мы можем задавать 16-битный цвет, который будет представлять "1", "цвет переднего плана", и цвет, представляющий "0", "цвет фона", либо сделать один из них прозрачным. Фактически, получаем палитру для однобитного изображения. Эти два цвета также задаются отдельно для кисти (а она, как мы узнали из предыдущих разделов, тоже однобитная поверхность!) - с помощью функций [[AhiDrawBrushFgColorSet]] и [[AhiDrawBrushBgColorSet]], и для остальных однобитных изображений - функциями [[AhiDrawFgColorSet]] и [[AhiDrawBgColorSet]].  === Инициализация === Итак, у нас теперь есть контекст, полученный одним из двух способов, указанных выше. Что дальше? Вне зависимости от того, собственный у нас контекст или нет, нужно провести его инициализацию.theРазличие лишь в том, что в случае собственного контекста её достаточно провести один раз, а в случае использования системного - почти каждый раз перед вызовом какой-hangsлибо функции рисования AHI.com#39100 buy levitra  Перед тем, как вызвать какую- buy levitra online without prescriptionhttpлибо функцию рисования, мы должны установить необходимые для её работы параметры:<ol><li>'''Установить поверхность-приёмник<br>Часто для этого используется отображаемая поверхность, если не планируется вывод с использованием [[Двойная буферизация|двойной буферизации]].<pre>// Наш контекст, полученный ранееAHIDEVCONTEXT_T dCtx; //Наша отображаемая поверхностьAHISURFACE_T sDisp; /www/ Получим отображаемую поверхность.buyДостаточно сделать это один раз, ведь врядли она поменяется.AhiDispSurfGet( dCtx, &sDisp ); // Устанавливаем поверхность-tadalafilприёмникAhiDrawSurfDstSet( dCtx, sDisp, 0 );</pre></li> <li>'''Установить поверхность-onlineисточник<br>Обычно для этой роли используют либо пользовательскую поверхность с нужной к выводу картинкой, либо системную внеэкранную поверхность (см. [[Двойная буферизация]]).org<pre>/#19601 discount generic cialis / Сохраним сюда системную внеэкранную поверхностьAHISURFACE_T sDraw; // Получим системную внеэкранную поверхностьsDraw = DAL_GetDrawingSurface( DISPLAY_MAIN ); // Устанавливаем поверхность- what insurance formulaies list tadalafil http:источникAhiDrawSurfSrcSet( dCtx, sDraw, 0 );</pre></tzukune.infoli> <li>'''Установить [[Clipping|области вырезания]] для приёмника и источника<br>Пока что выключим их, и для этого передадим в функции [[AhiDrawClipDstSet]] и [[AhiDrawClipSrcSet]] - <tt>NULL</#81859 nolvadex discount - research chemical nolvadex buyhttptt>:<pre>//Выключаем области вырезания для приёмника и источникаAhiDrawClipDstSet( dCtx, NULL );AhiDrawClipSrcSet( dCtx, NULL );</tzukune.infopre></#69547 research chemical nolvadex buy - cheap nolvadex httpli> <li>'''Установить [[Raster Operations|растровую операцию]]<br>Чтобы не углубляться в рамках этой статьи в растровые операции, ограничимся пока что простым правиломДля вывода растровых изображений устанавливаем <tt>AHIROP_SRCCOPY</tt>, а для рисования цветом - <tt>AHIROP_PATCOPY</wwwtt>.buy-tadalafil-onlineОтсановимся на последнем, так как пригодится в последующем примере.org<pre>//#15254 buy cialis without prescription - buy cialishttp:Устанавливаем растровую операцию на применение кистиAhiDrawRopSet( dCtx, AHIROP3(AHIROP_PATCOPY) );</pre></wwwli> <li>'''Настроить кисть<br>Это делать не обязательно, если мы не собираемся рисовать графические примитивы.buyviagrabluepillsНо так как мы собираемся, то.com#82592 buy viagra online without prescription - viagrahttp:..<pre>// Установим кисть на самую обычную, сплошную (SOLID)AhiDrawBrushSet(devCx, NULL, NULL, 0x0, AHIFLAG_BRUSH_SOLID);</pre></li></wwwol> Конечно, некоторые из этих операций понадобится повторить перед вызовом определённых функций, с другими установками, но надеюсь это уже не составит для Вас проблем.buy == Примеры == Наконец, уже можно что-tadalafil-onlineнибудь да и нарисовать!Не будем здесь заострять внимание на таких тривиальных вещах, как размещение последующих примеров в коде и инициализация приложения. Пускай, например, рисовать мы будем в вызове по таймеру.  === Первый пример === Для первого раза нарисуем цветной графический примитив. <pre>// Вспомогательная переменная для указания области экранаAHIRECT_T rect; // Установим цвет кисти.orgЭтим цветом будут выводиться наши графические примитивыAhiDrawBrushFgColorSet(devCx, ATI_565RGB(0,0,255)); //#23657 buy cialis generic Ярко- buy cialis from canada http:синий //tzukuneЗададим прямоугольник на экране, который будет залит нашим цветомrect.infox1 = 0;rect.y1 = 0;rect.x2 = 64;rect.y2 = 64; // Нарисуем прямоугольник rectAhiDrawSpans( dCtx, &rect, 1, 0);</#32193 should i cycle both clomid and nolvadex pct pre>References: [[AhiDrawSpans]], [[AhiDrawBrushFgColorSet]] После этого мы получим на экране синий квадрат в левом верхнем углу. Не больно- clomid nolvadex or proviron which is bestто и сложно, не так ли?http  === Второй пример === Теперь мы попытаемся решить задачу чуть посложнее, а именно - выведем какую-нибдь картинку. Код для загрузки картинок можно взять из библиотеки AHG, написанной '''tim apple''', а саму картинку нужно будет [[Подготовка графики для ATI|подготовить особым образом]]. <pre>/* Проведём инициализацию при загрузке эльфа:*/ //wwwСюда будет загружена наша картинка.buy-tadalafil-onlineНе забудьте освободить память bitmap.orgimage по завершению!AHIBITMAP_T bitmap; //#52756 is cialis or levitra better - which is best viagra or cialis httpЗагружаем картинку!BMP_LoadFromFile(L"file://tzukuneb/image.infobmp", &bitmap); /* Теперь нарисуем картинку на экране средствами ATI */#36687 nolvadex discount - drug profile nolvadex clomid hcghttp: AHIPOINT_T point;AHIRECT_T rect; //wwwПусть мы хотим вывести картинку в левом верхнем углу, задаём область как в предыдущем примереrect.x1 = 0;rect.y1 = 0;rect.buyambienzolpidemx2 = bitmap.com#15784 buy generic Ambien no prescription width;rect.y2 = bitmap.height; // И ещё - buy Zolpidem pharmacyhttp:точку на исходной картинке. Мы выводим целиком, так что нули.point.x = 0;point.y = 0; // Не забываем, что в прошлый раз мы установили операцию PATCOPY, но она не подходит для вывода растра!AhiDrawRopSet( dCtx, AHIROP3(AHIROP_SRCCOPY) ); //Осталось собственно вывести картинку!AhiDrawBitmapBlt( dCtx, &rect, &point, &bitmap, NULL, 0 );</www.buylevitraedpre>References: [[AhiDrawBitmapBlt]], [[AhiDrawRopSet]]  === Третий пример === В третьем, заключительном примере мы создадим собственную поверхность, перенесём её в видеопамять и будем работать уже из неё.com#27966 buy levitra Пример во многом повторяет предыдущий, но смотрите внимательнее - buy levitra no prescriptionhttpесть значительные отличия! <pre>/* Проведём инициализацию при загрузке эльфа:*/ //wwwСюда будет загружена наша картинка.buyvaliumdiazepamНе забудьте освободить память bitmap.orgimage по завершению!AHIBITMAP_T bitmap;//#24957 buy diazepam overnight Это - valium and alcoholhttpразмер новой поверхностиAHIPOINT_T size;// Сюда мы сохраним указатель на новую поверхностьAHISURFACE_T surface; // Загружаем картинку!BMP_LoadFromFile(L"file://wwwb/image.bmp", &bitmap); /* Создадим новую поверхность - surface, по размеру картинки*/size.x = bitmap.width;size.buylexapronowy = bitmap.comheight; AhiSurfAlloc( dCtx, &surface, &size, AHIFMT_16BPP_565, 0 ); /* Перенесём картинку на нашу новую поверхность, просто нарисовав её из системной памяти */#11415 buy lexapro generic online - effects of lexaprohttp: AHIPOINT_T point;AHIRECT_T rect; //wwwЗадаём область выводаrect.x1 = 0;rect.y1 = 0;rect.x2 = bitmap.width;rect.buyambienzolpidemy2 = bitmap.com#20658 buy ambien online no prescription - buy zolpidem no prescriptionhttp:height; //wwwИ точку на исходной картинкеpoint.buyvaliumdiazepamx = 0;point.orgy = 0; /#64448 what are some generic forms of diazepam / Не забываем, что в прошлый раз мы установили операцию PATCOPY, но она не подходит для вывода растра!AhiDrawRopSet( dCtx, AHIROP3(AHIROP_SRCCOPY) ); // Сейчас мы хотим вывести картинку на новую поверхность.AhiDrawSurfDstSet( dCtx, surface, 0 );// Так как выводить будем из системной памяти, поверхность- buy roche diazepam 10mghttp:источник нам не важна. // Выводим картинкуAhiDrawBitmapBlt( dCtx, &rect, &point, &bitmap, NULL, 0 );  /* Теперь мы можем работать с этой картинкой в видеопамяти */AHIPOINT_T point;AHIRECT_T rect; //wwwСейчас мы хотим вывести картинку из новой поверхности на экран.AhiDrawSurfSrcSet( dCtx, surface, 0 );AhiDrawSurfDstSet( dCtx, sDisp, 0 ); point.buylexapronowx = 0;point.comy = 0; rect.x1 = 0;rect.y1 = 0;rect.x2 = bitmap.width;rect.y2 = bitmap.height; // Для вывода из видеопамяти используется эта функцияAhiDrawBitBlt( dCtx, &rect, &point );</#12040 buy lexapro medication pre>References: [[AhiDrawBitBlt]], [[AhiSurfAlloc]], [[AhiDrawSurfSrcSet]], [[AhiDrawSurfDstSet]], [[AhiDrawBitmapBlt]], [[AhiDrawRopSet]]  == Заключение == Итак, рассмотрев основные моменты работы с драйвером ATI и даже несколько конкретных примеров, у вас не должно возникнуть больших проблем с разработкой эльфов с его использованием.Тем более, что уже существует несколько подобных эльфов, с исходным кодом которых можно ознакомиться.  '''Если эта статья вам чем-то помогла - пожалуйста, отпишитесь на форуме!''' -- purchase lexapro online[[Участник:Andy51|Andy51]] 19:13, 29 августа 2009 (MSD)   [[Категория:Эльфостроение]]
214
правок