Так получилось, что в руки ко мне попал интересный девайс: автомагнитола "всё в одном"
Hyundai H-CMD4015.
Девайс умеет играть DVD, играть MP3, ловить радио, показывать телевизор, и даже работать автомобильным навигатором. И это всё на экранчике 480х272 пикселей, ага. Передняя панель, на которой расположены кнопки, настолько хлипкая, что при каждом нажатии хрустит и гнётся.
Никогда не покупайте "комбайны". Во-первых, смотреть dvd в машине по дороге я лично считаю жутким извращением. Во-вторых, когда один и тот же девайс играет музыку, показывает dvd, ловит телевидение, да ещё пытается заниматься навигацией - все эти вещи он будет делать плохо. Очень плохо.
На девайсе стоит WinCE5, которая и пытается обслуживать все эти процессы. Естественно, всё меню на английском, а русские буквы песен - кракозябрами. И самое главное: при включении навигации воспроизведение музыки.. прекращается! Фирменная фича, похоже.
Оригинальная навигационная система -
Автоспутник с картами Teleatlas. Любой образованный человек в наше время знает, что за МКАДом жизни нет. Поэтому про дома и адреса в Липецке "Автоспутник" ничего не знает, а карты Тамбова у teleatlas'а нет в принципе. Действительно, где Телеатлас, а где Тамбов.
![](http://www.ljplus.ru/img4/s/t/stkorn3/th_DSC00314-.jpg)
![](http://www.ljplus.ru/img4/s/t/stkorn3/th_DSC00313-.jpg)
Казалось бы, установка Garmin на произвольный девайс с WinCE не должна принести никаких сюрпризов. Всё уже давно описано в статье
Делаем из GPS-навигатора КПК. Но как известно - каждый новый девайс - это всегда что-то новое и интересное. А переход от GPS-навигаторов к автомобильным магнитолам оказался даже несколько принципиальным, сейчас расскажу почему.
Но сначала несколько советов:
1. Если cecmd.exe из прошлой статьи не запускается - не спешите грешить на WinCE. Просто скачайте свежую версию с сайта производителя
Ghisler. Поскольку устанавливать нам ничего не хочется, то скачивайте .CAB архив, а затем вынимайте оттуда самый жирный и увесистый файл с сигнатурой .exe-шника, и переименовываете в cecmd.exe. Опыт показывает, что для успешного запуска приложения достаточно одного этого файла.
2. В случаях, если Garmin Mobile XT (que.exe) запускается с карточки, а не из основной памяти прибора - для разлочки приложения и карт следует применять не Device ID а Card ID, каким бы странным это не казалось. По крайней мере в этот раз у меня с Device ID программа видеть не-garmin'овский GPS-приёмник отказывалась напрочь и не разлочивалась.
3. При запуске Garmin'а из основного меню по кнопке "Навигация" происходила странная вещь: приложение запускалось, на экране мелькала приветственная заставка, а потом всё исчезало и магнитола возвращалась в режим радио. Повторный запуск "Навигации" вообще не вызывал никаких эффектов.
Причина такого глюка стала понятна только после запуска скрипта приложения из cecmd. Оказывается, родная оболочка магнитолы при запуске приложения отслеживает не факт завершения процесса, а факт пропадания основного окна запущенного приложения. Garmin при запуске вываливался с ошибкой, процесс ещё оставался висеть в памяти но основного окна уже не было - и оболочка принудительно возвращала управление штатному меню магнитолы.
Сообщения об ошибках были следующие:
• Error:Assert failed at PLM_String.cpp:650 in Garmin Mobile XT with error 87
• Error: Assert failed at CDP_intf.cpp: 1000 Garmin Mobile XT with error 87
Если встречаетесь с такими загадочными сообщениями - в певую очередь следует удалить все сохранённые настройки Garmin'а и запустить его с настройками по-умолчанию. У меня сработало. Выяснилось, что причина этих сообщений - попытка запустить Garmin с русским интерфейсом на WinCE не поддерживающем русскую локаль.
Если зайти в Панель управления -> Региональные настройки - видим, что данная сборка WinCE содержит только три языка: английский, испанский и китайский. Странно, никогда не думал, что испанский столь распространённый в мире язык. Добавлять в прошивку винды русский язык китайцы сошли излишним.
Примечательно, что тот же Автоспутник нормально работает с русским интерфейсом. Похоже, он изначально разрабатывался для произвольных устройств и не использует никакие системные библиотеки. Например, программа может воспользоваться системной функцией отображения дня недели в строковом виде, а может иметь свой собственный справочник. Автоспутник выбрал второй путь, поэтому его работа не зависит от наличия в устройстве русской локали. Garmin поступил более концептуально, возложив низкоуровневые региональные задачи на операционную систему, за что и поплатился.
Если кто-то вам скажет, что в WinCE можно добавить русскую локаль простым патчем реестра - не верьте и не ведитесь. Читаем
здесь. Если в файле wince.nls нет описания русской локали - ничего не выйдет. А заменить этот файл можно только извне системы, поскольку во время работы винды он заблокирован. Обычно для этого снимают с аппарата дамп прошивки, разбирают его, заменяют файл wince.nls, собирают дамп обратно и заливают на аппарат. Обычно стараются чтобы размер исходного и заменяемого файлов полностью совпадали. Вообщем, русифицировать установленную китайцами WinCE можно, но с определённой долей риска для аппарата.
В качестве выхода можно предложить следующее решение: запускать Garmin Mobile XT с английским интерфейсом, но русской раскладкой клавиатуры и звуками. При этом нормально отображается русскоязычное содержимое карты, набираются названия городов и стран. Единственная проблема - при поиске улицы по названию результаты отображаются кракозябрами. Но с этим можно смирится, так как на следующем шаге поиска прибор показывает выбранную улицы уже правильным кириллическим шрифтом.
Конечно, в процессе работы программы её можно будет переключить на русский интерфейс, но как показывает практика, на аппаратах без русской локали при этом не сохраняются никакие сделанные настройки Garmin'а и зачастую программа падает с одним из вышеуказанных сообщений об ошибке уже через несколько секунд работы в русскоязычном режиме.
![](http://www.ljplus.ru/img4/s/t/stkorn3/th_DSC00309-.jpg)
![](http://www.ljplus.ru/img4/s/t/stkorn3/th_DSC00310-.jpg)
Ну а теперь обещанная принципиальная разница между навигатором и магнитолой. Это - многозадачность. Если в навигаторе основная работа пользователя происходит в навигационном ПО, то в магнитоле человек может поездить на навигации, потом послушать музыку, потом он захочет снова вернуться к навигации, и надо чтобы он вернулся к ранее запущенной программе, с выбранным маршрутом.
Оказывается, использующийся runme.exe не позволяет запускать одновременно более одного экземпляра скрипта MortScript. Раньше мы могли позволить себе, что по кнопке "Навигация" запускается скрипт, который ждёт пока приложение Garmin отработает, и после этого выполняет завершающие действия (вроде сохранения настроек и завершения explorer.exe). Теперь пользователь может в любое время выйти в основное меню системы, а навигационный скрипт должен быть доступен для вызова в любую минуту.
Выход следующий: по кнопке "Навигация" запускается скрипт, который проверяет, запущен ли Garmin Mobile XT, и если да - то активирует его окно:
If(WndExists("Garmin Mobile XT"))
Show("Garmin Mobile XT")
Exit
EndIf Если приложение не запущено, то скрипт выполняет все необходимые действия и паралельно запускает другой скрипт RunGMXT.mscr, не дожидаясь его завершения:
If(not ProcExists("explorer.exe"))
Run("\windows\explorer.exe")
Sleep(2000)
EndIf
#Copy previous stored settings to \Garmin
XCopy(SystemPath("ScriptPath")\"Settings\*.*", "\Garmin", TRUE)
#Run Garmin Mobile XT.
#This script will not go to the next command before que.exe completely shut down
Run(SystemPath("ScriptPath")\"RunGMXT.exe") Чтобы не получилось так, что обнаружив завершение запущенного процесса навигации, оболочка магнитолы вновь не запустила на экран проигрывание музыки, несколько раз с интервалом в 2 секунды активируем окно Garmin Mobile XT, которое к тому времени должно появиться:
Sleep(2000)
If(WndExists("Garmin Mobile XT"))
Show("Garmin Mobile XT")
EndIf
Sleep(2000)
If(WndExists("Garmin Mobile XT"))
Show("Garmin Mobile XT")
EndIf На этом выполнение скрипта завершается. При этом активным приложением должен остаться Garmin. Скрипт RunGMXT.mscr выполняет привычные действия - запускает Garmin Mobile XT:
#Run Garmin Mobile XT.
#This script will not go to the next command before que.exe completely shut down
RunWait(SystemPath("ScriptPath")\"..\Garmin\Apps\WM\que.exe") Затем дожидается окончания её работы, а затем сохраняет настройки и завершает explorer.exe:
#Save new settings back to SD Card
XCopy("\Garmin\*.*", SystemPath("ScriptPath")\"Settings", TRUE)
Sleep(1000)
If(ProcExists("explorer.exe"))
Kill("explorer.exe")
EndIf Резюмируя всё вышесказанное: магнитола-комбаин в машине - вещь неудобная во всех отношениях.
• Она неудобна как магнитола. Отсутствуют традиционные ручки регулирования громкости. Регулировать громкость миниатюрными кнопками, а тем более сенсорным экраном - неудобно и требует большой концентрации внимания. Кроме того, что это за магнитола, если во время навигации воспроизведение музыки отключается?
Она неудобна как навигатор. Навигатор для того и вешают на лобовое стекло, чтобы угол перехода зрения от дороги к экрану устройства был минимальным. При этом хотя бы периферийным зрением человек всё равно продолжает видеть объект, на котором в данный момент не сфокусировано внимание. Как можно контролировать движение по навигатору, который находится где-то внизу под торпедо - я не представляю.
• Она бесполезна как телевизор. Если вы только не таксист, конечно. Пожалуй, это единственный случай, когда этот аппарат для вас незаменим. Тогда на него можно поставить ещё и пасьянс для Windows CE и тетрис какой-нибудь.
Так что пока современные "дорожные компьютеры" не дотягивают ни по каким параметрам до соответствующих самостоятельных устройств.