Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
13.7.2008, 13:18
Сообщение
#1
|
|
![]() Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 184 Регистрация: 13.11.2005 Dell Axim X51v Репутация: 41
|
Уважаемые модераторы, прошу подобрать подходящее место для данной темы...
В кратце: данная информация позволяет самостоятельно исправлять новые билды WM 6.1 в плане глюка прорисовки меню, который был выявлен на машинках с графикой i2700g, в частности - Dell Axim X51v Удаление градиентной заливки из меню, замена заливки на сплошную. Проблема С выходом последних билдов WM 6.1 оказалось, что при установке их на КПК Dell Axim X51v возникает странная проблема с перерисовкой «всплывающих» каскадных меню. Проблема заключается в том, что если из какого-либо меню раскрыть подменю, затем сразу (не закрывая) попытаться открыть другое подменю, то в результате основное меню перекрывает всплывающее. В общем, словами описать достаточно сложно — но результат хорошо виден на картинке, сделанной пользователем Snusman: Изображение Варианты решения Самый простой вариант решения — не открывать новое подменю при уже открытом Следующий вариант решения — вернуть перерисовку меню в тот вид, в котором она была в предыдущих билдах — то есть избавиться от градиента. Собственно про этот метод речь и пойдет. Существует более сложный метод решения проблемы, но о нем — не в этот раз. Кому это надо Описанный далее метод исправления проблемы с перерисовкой меню предназначен, в первую очередь тем, кто делает собственные прошивки для КПК/Коммуникаторов. Ответственность Как обычно, никто не несет ответственности за какие-либо действия или их отсутствие, связанные с данным текстом Немного о GWES.EXE Данный файл (Graphics, Windowing and Events Subsystem) в ОС Windows Mobile отвечает за поведение графической, оконной и «событийной» подсистем. В нашем случае именно он отвечает за отрисовку меню и, соответственно, подлежит изменению. О том, как получить файл из прошивки писать здесь смысла нет. Скажу только, что он нам нужен как в виде файла (собирается с помощью RecMod.exe), так и в виде модуля (разбирается через reversmode.exe). Последовательность действий 1.Распаковываем прошивку. 2.Получаем gwes.exe в виде файла. Попутно делаем его резервную копию в виде модуля. 3.Редактируем файл. 4.Разбираем измененный файл в модуль с помощью reversmode.exe. 5.(!!!!) В исходный модуль копируем только сами секции (файлы Sxxx без расширения)! Файлы imageinfo.* должны остаться оригинальными из прошивки! 6.С вновь полученными секциями в модуле собираем прошивку и радуемся. Редактирование GWES.EXE Это самый сложный этап — собственно само исправление. От точности действий зависит работоспособность прошивки. Замечу, что в будущих билдах возможны коренные изменения, которые потребуют корректировки данной инструкции. Для редактирования нам потребуется любой дееспособный HEX-редактор с возможностью поиска. Я пользовался Hex Workshop. Этап первый — вычисление смещений ключевых функций 1.Открываем gwes.exe в hex-редакторе. 2.Задаем команду поиска шестнадцатеричных значений. В строке поиска вводим «04E02DE504D04DE224309FE51C209FE501E0A0E3003093E5». 3.Записываем смещение в файле, по которому нашлась данная последовательность (смещение - в шестнадцатеричном виде!). Назовем этот адрес Func_0. (Например, Func_0 = 6BCC0). 4.Аналогично проделываем с другой последовательностью - «30402DE904D04DE20151C0E31C0055E3». Смещение в шестнадцатеричном виде назовем Func_1. (Например, Func_1 = 68CD0) 5.Аналогично для «0DC0A0E104002DE970582DE918B08DE240D04DE20250A0E1». Адрес назовем Func_2. (Например, Func_2 = 5E17C). 6.Еще нам потребуется два смещения. Первое (назовем Call_1) получается прибавлением к Func_0 значения 0x10. (Например, Call_1 = Func_0+0x10 = 0x6BCC0 + 0x10 = 6BCD0). Второе — Call_2 — получается прибавлением к Func_0 значения 0x20. (Например, Call_2 = Func_0 + 0x20 = 0x6BCC0 + 0x20 = 6BCE0). Этап второй — вычисление машинных кодов для инструкций перехода 1.Далее нам потребуется моя небольшая утилитка, вычисляющая смещения для ARM — инструкций перехода. Скачать ее можно здесь: http://rapidshare.com/files/129332578/arm_offset.rar 2.Запускаем утилитку. В поле Command Address вводим адрес Call_1 в шестнадцатеричном виде без префикса «0x» (например, Command Address = 6BCD0). В поле Jump to Address вводим адрес Func_1 (например, Jump to Address = 68CD0). Нажимаем «Calc». Нас интересует тот результат, который отображен напротив строки «BL (function call)». Запоминаем (записываем) данные четыре байта (по две шестнадцатеричных цифры в каждом). Для удобства назовем их Bytes_1 (Например, получилось Bytes_1 = FE F3 FF EB). 3.Аналогично проделываем с Command Address = Call_2 и Jump to Address = Func2, снова нажимаем «Calc». Запоминаем (записываем) полученные четыре байта как Bytes_2. (Например, получилось Bytes_2 = 25 C9 FF EB). Этап третий — редактируем файл GWES.EXE 1.В hex-редакторе делаем переход на смещение Func_0 (у меня это команда Edit -> Go to... Offset (from beginning of file) ). 2.Далее в окне редактирования hex-кодов ЗАМЕНЯЕМ байты, начиная с того, на котором встал курсор, на следующие: 30 40 2D E9 01 50 A0 E1 00 40 A0 E1 11 01 A0 E3. 3.После этого курсор должен оказаться в позиции Call_1. В этом месте следует записать четыре байта из Bytes_1. (В примере это FE F3 FF EB). 4.Затем, не смещая курсор, продолжаем: 00 20 A0 E1 04 00 A0 E1 05 10 A0 E1. 5.После этого курсор должен оказаться в позиции Call_2. В этом месте следует записать четыре байта из Bytes_2. (В примере это 25 C9 FF EB). 6. Затем следует записать следующую последовательность байт: 00 00 A0 E1 30 40 BD E8. 7. Для точности следует убедиться, что следом будет идти 4 таких байта: 1E FF 2F E1 Вот и все редактирование. Не забываем измененный файл записать в прошивку в виде модуля по вышеприведенной инструкции. В итоге получаем отсутствие градиента в фоне меню, а соответственно и исправление «глюка» перерисовки. Заключение Как я уже упомянул, существует второй метод исправления бага, при котором остается градиентная заливка в меню. Этот метод значительно сложнее приведенного и обладает побочным эффектом — небольшим «промаргиванием» при перерисовке подменю. Если кому-нибудь будет интересно, могу в будущем написать мануал по второму способу. Но там без знания ARM-ассемблера, дизассемблера IDA 5.2 и тонкостей работы оконных сообщений Windows не обойтись. Сообщение отредактировал dking - 18.7.2008, 3:28 -------------------- Hello, I'm your mind giving you someone to talk to...
|
|
|
|
18.7.2008, 3:18
Сообщение
#2
|
|
![]() Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 184 Регистрация: 13.11.2005 Dell Axim X51v Репутация: 41
|
Ага, вот и оно
в билдах выше 19949 добавились очередные изменения в GWES, для них эта инструкция нуждается в дороботке (кстати, это вовсе не помешает предыдущим билдам). Вышеизложенный текст подправлен под новые билды. Сообщение отредактировал dking - 18.7.2008, 3:25 -------------------- Hello, I'm your mind giving you someone to talk to...
|
|
|
|
6.9.2009, 13:10
Сообщение
#3
|
|
|
Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 148 Регистрация: 5.6.2006 Dell Axim X51v Репутация: 31
|
Глюк изчез после увеличения таймаута видео памяти
[HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR] "LocalMemoryTimeout"=dword:00002710 без правки GWES. Прошивка A04RU_Beta2 + подписаный файлик гвеса из билда 20759 из какой-то завалявшейся асус кухни. |
|
|
|
6.9.2009, 13:32
Сообщение
#4
|
|
![]() Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 184 Регистрация: 13.11.2005 Dell Axim X51v Репутация: 41
|
Тема уже не актуальна
-------------------- Hello, I'm your mind giving you someone to talk to...
|
|
|
|
6.9.2009, 13:52
Сообщение
#5
|
|
![]() Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 184 Регистрация: 13.11.2005 Dell Axim X51v Репутация: 41
|
Сейчас специально прошился Football A08, повысил таймаут (это с "0xA" на "0x2719" ! ого-го себе
-------------------- Hello, I'm your mind giving you someone to talk to...
|
|
|
|
6.9.2009, 22:40
Сообщение
#6
|
|
|
Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 148 Регистрация: 5.6.2006 Dell Axim X51v Репутация: 31
|
Прошивка WM61DE-A04RU_Beta2 от Dynamite.
Где подсмотрел, сайт посеял ( [HKEY_LOCAL_MACHINE\SYSTEM\GWE] ; "PORepaint"=dword:0 - the display driver handles everything ; "PORepaint"=dword:1 - gwe should save and restore the bits ; "PORepaint"=dword:2 - gwe should invalidate and repaint ; "PORepaint"=dword:3 - gwe and driver need to save video memory ; "PORepaint"=dword:3 #if ! defined PVR_CETESTKIT [HKEY_LOCAL_MACHINE\System\GDI\Drivers] "Display"="ddi_powervr.dll" #endif [HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR] ; Single mode stuff ; mode list is trunkated to just one entry with the following settings "Width"=dword:280 "Height"=dword:1E0 "BitsPerPixel"=dword:10 "OutputMask"=dword:00070707 ; Display refresh ; Default wait time (in millisecs) after access before local memory goes into self-refresh ; 0x2710 == 10000 ms == 10 secs ; "LocalMemoryTimeout"=dword:2710 "LocalMemoryTimeout"=dword:A ; Only enable this if the on-die frame buffer is being used to display "UseSelfRefresh"=dword:1 ; Special sleep mode support - to support Marathon and LM off upon sleep ; 1 to enable it; 0 to disable it. "SpecialSleep"=dword:1 ; Marathon system configuration overrides "VLIOChipSelect"=dword:5 "SRAMChipSelect"=dword:1 "SDRAMMemType"=dword:9 ; Marathon Revision ID will be read from the SOC_ID register to determine ; the approprate setting for ODFB Active Power Mode. Active Low Power Mode ; will only be enabled in this way, for revisions A3 and later. This can be ; overrided as required (revisions A0 and A1 do not support ODFB ; Active Low Power Mode). Note: the revision ID for A2 cannot be distinguished ; from the revision ID for A1. ; "ODFBPowerModeActiveLow"=dword:1 ; "Prefetch"=dword:0 ; "Timeout"=dword:ffffff00 ; "BondConfig"=dword:0 ; "SPAccessViaVLIO"=dword:ffffffff ; "CoreClock"=dword:C65D40 ;13MHz (ie REFCLK) ; "CoreClock"=dword:17D7840 ;25MHz ; "CoreClock"=dword:2FaF080 ;50MHz ; "CoreClock"=dword:47868C0 ;75MHz ; "CoreClock"=dword:4C4B400 ;80MHz (MBX=/2) ; "CoreClock"=dword:5F5E100 ;100MHz (MBX=/2) ; "CoreClock"=dword:7ED6B40 ;133MHz (MBX=/2) "Panel"=dword:00000005 "PanelExt"=dword:C0000002 ; Screen rotation control "DisableDynamicScreenRotation"=dword:0 IF OSV_PPC "RotationRemap"=dword:10E ENDIF ; Framebuffer allocation stratagy based on the allocation flags ; GPE_REQUIRE_VIDEO_MEMORY and GPE_PREFER_VIDEO_MEMORY ; ; default = 0 All FB memory,internal and external, available ; control is via a bit mask ; bit 0 Req Int FB, always assumed set ; bit 1 Req Ext FB ; bits 2 & 3 ignored ; bit 4 Pref Int FB ; bit 5 Pref Ext FB ; bits 6 - 31 ignored ; "FBAllocStrategy"=dword:21 [HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR\MBX1\Gl obal\D3DM] [HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR\MBX1\Ga me Settings\D3DM] [HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR\MBX1\Ga me Settings\D3DM\Common] [HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR\MBX1\Ga me Settings\DDraw] [HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR\MBX1\Ga me Settings\OpenGLES] [HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR\MBX1\Ga me Settings\OpenGLES\Common] [HKEY_LOCAL_MACHINE\Drivers\Display\PowerVR\MBX1\La stApp] [HKEY_LOCAL_MACHINE\system\gdi\rotation] IF OSV_PPC ;angle from portrait origin for PocketPC "Angle"=dword:0 "LandscapeMode"=dword:5A ELSE ;angle from landscape origin for WinCE IF WCE_LANDSCAPE "Angle"=dword:0 ELSE "Angle"=dword:10E ENDIF ENDIF [HKEY_LOCAL_MACHINE\SYSTEM\GDI] "ClearType"=dword:1 [HKEY_LOCAL_MACHINE\System\GDI\ClearTypeSettings] ;"NativeOrientation"=dword:0 ; 0 is the default. This is the angle that supports cleartype. IF OSV_PPC "OffOnRotation"=dword:1 ; 1 means "turn off Cleartype when rotated" ENDIF IF OSV_PPC ; Welcome.exe: Disable tutorial and calibration pages ; Touch calibration (0x02), Stylus (0x04), Popup menu (0x08), Timezone (0x10), Complete (0x20) [HKEY_LOCAL_MACHINE\Software\Microsoft\Welcome] ; Touch calibration must be enabled for high res metrics. "Disable"=dword:FFFFFFFD [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Media Player\Video] ; sets WMP default to use full screen if video is large "Full Screen"=dword:00000001 ; -- Specify high res metrics (192 DPI) for PocketPC with VGA panel ; -- For low res (320x240) panel use 96 DPI metrics. [HKEY_LOCAL_MACHINE\Drivers\Display\GPE] ; 0xC0 = 192 This is DPI info "LogicalPixelsX"=dword:C0 "LogicalPixelsY"=dword:C0 ENDIF [HKEY_LOCAL_MACHINE\System\D3DM\Drivers] "LocalHook"="pvr_d3dm.dll" ; PowerVR entries end ---------------------------------- Сообщение отредактировал Mforward - 6.9.2009, 23:08 |
|
|
|
7.9.2009, 1:45
Сообщение
#7
|
|
![]() Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 184 Регистрация: 13.11.2005 Dell Axim X51v Репутация: 41
|
Ну да, есть такое дело
-------------------- Hello, I'm your mind giving you someone to talk to...
|
|
|
|
18.11.2009, 4:37
Сообщение
#8
|
|
![]() Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 317 Регистрация: 8.5.2007 Fujitsu-Siemens Loox C550 Репутация: 52
|
Огромнейшее спасибо за инструкцию. У меня аналогичные проблемы с билдом 19965. Уж думал не получится отключить дурацкий градиент. Сейчас опробую ваши инструкции.
-------------------- Здесь можно скачать мои прошивки для N560 и C550, а также описания и дополнения.
Мои кухни для N560 и C550 находятся по этой ссылке |
|
|
|
18.11.2009, 14:24
Сообщение
#9
|
|
![]() Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 184 Регистрация: 13.11.2005 Dell Axim X51v Репутация: 41
|
эээ... а проблема - она на C550 ???
-------------------- Hello, I'm your mind giving you someone to talk to...
|
|
|
|
18.11.2009, 19:32
Сообщение
#10
|
|
![]() Местный ![]() ![]() ![]() ![]() ![]() [offline] Группа: Друзья 4PDA Сообщений: 317 Регистрация: 8.5.2007 Fujitsu-Siemens Loox C550 Репутация: 52
|
Ага. И тоже как раз с градиентом проблема связана оказалась. Но правда, не настолько серьезная как на i2700g. У нас при открытии подменю затираются некоторые пункты предыдущего меню. А также иногда отдельные пункты меню затираются при перемещении полоски, при выборе их джойстиком. И меню, которые не помещаются на 1 экран - с кнопками прокрутки снизу и сверху - иногда при прокрутке оставляют на экране кашу из предыдущих надписей. Кстати, градиенты на этих кнопках почему-то остались включенными. Не знаете случаем, как и их тоже отключить?
Я заметил, что у других авторов прошивок на наши устройства, градиента нет, вот и возникло предположение, что наверное градиент как-то влияет. Отключали-ли они его сами, или может-быть у них GWES из более старых билдов, где градиента нет - я не знаю. У них билды 20755 - а для того чтобы эти билды у нас нормально заработали - надо вроде-бы взять ядро от билдов 2027x и gwes из билдов (19xxx). Я вот пытаюсь сделать прошивки на чистом билде 19965 (ну вернее почти чистом, я не нашел только офис с этим номером билда, но офис из 21054 - прекрасно работает, как не странно). И столкнулся с этой проблемой. Хотя в отличии от ваших устройств - с этим глюком вполне можно существовать, он в 99% случаев не мешает совсем (заметил его только сейчас - через 3 месяца использования этого билда). Вобщем, спасибо еще раз за работающий способ. Мне помогло. -------------------- Здесь можно скачать мои прошивки для N560 и C550, а также описания и дополнения.
Мои кухни для N560 и C550 находятся по этой ссылке |
|
|
|
|
| Текстовая версия | Сейчас: 3.9.10, 10:05 |