Леонид Осик
losik@bytemag.ru

В начале мая была официально анонсирована модель КПК, известная по слухам как TRGpro-II. Спустя три дня после официального анонса опытный образец HandEra 330 был предоставлен тестовой лаборатории "СК Пресс". Скажем сразу, это лучший из существующих на сегодня "профессиональный" клон Palm - даже на фоне таких выдающихся изделий, как Palm m500/505, Visor Edge или Sony CLIE PEG-N710С.

HandEra 330 - достойный наследник машины TRGpro. С точки зрения количества инноваций эта модель опережает любые новые клоны Palm.

Photo1

Внешне HandEra 330 напоминает модели семейства Palm III. Конструкторы использовали практически такой же корпус, модернизировав лишь клавиши и добавив возможность управления с помощью манипулятора, подобного Sony JogDial, над которым размещается дополнительная кнопка (она или запускает диктофон, или играет роль клавиши Esc). Машина оснащается процессором Motorola DragonBall-VZ/33, 8 Мбайт ОЗУ, 2-Мбайт ППЗУ и двумя (!) разъемами расширения - CompactFlash Type II и SecureDigital/MultiMedia Card. Конструкторы улучшили и систему питания: HandEra 330 работает от четырех батарей AAA (их можно заменить аккумулятором, предусматривается гнездо для блока питания), а можно просто включить машину в сеть и не беспокоиться по поводу высокого энергопотребления, например диска IBM Microdrive. Имеется микрофон, и при желании HandEra 330 можно использовать как цифровой диктофон (от предыдущей модели ей досталась улучшенная по сравнению с другими клонами звуковая подсистема).

Разработчики HandEra 330 исправили в этой машине один из наиболее крупных недостатков платформы Palm. Разрешение экрана у этой модели составляет 240x320 пикселов (16 градаций серого, по четкости "картинки" HandEra 330 намного опережает нынешнего лидера, Palm m100). Кроме того, экран практически в полтора раза больше, чем у любого современного клона Palm, поскольку у HandEra 330 нет плашки Graffiti! (непременной особенностью машин на базе PalmOS была металлическая плашка дигитайзера, которая занимала примерно треть экрана). В HandEra 330 область ввода рукописных символов просто "рисуется", как и любой другой диалог ОС. Превращение плашки Graffiti в "программное" окно позволяет видеть символы, которые вводит пользователь (на экране остается "след" от пера), с комфортом работать в темноте (экран подсвечивается). У этой модели исключительно оригинальная подсветка своеобразного синего цвета ("нормальная", а не инверсная).

Photo2

В связи с изменениями в графической подсистеме машина несовместима с некоторыми программами для Palm, в которых используется прямой доступ к аппаратным средствам. В HandEra 330 имеется несколько "видеорежимов". Поскольку разрешение у этой модели выше, обеспечить привычную "картинку" можно только "растягивая" на экране изображение, которое выводит программа, ориентированная на разрешение 160x160 пикселов (при этом динамически подменяются шрифты, увеличиваются графические элементы программ). Кроме того, можно использовать режим прямого соответствия между абсолютными или относительными координатами, что обеспечивает совместимость с пакетами, разработчики которых некорректно использовали системные метрики. На момент испытаний разработка русификатора для этой модели не была завершена; из испробованных нами программ русификации без сбоев и нареканий работал только пакет Paragon PiLoc 2.15 (при этом, правда, были русифицированы только первые четыре стандартных шрифта). Как сообщили представители компании Paragon Software (http://www.penreader.com), в самом ближайшем будущем разработка русификатора для HandEra 330 будет завершена.

Перспективы HandEra 330 как изделия для корпоративного рынка, с одной стороны, весьма радужны - из всех существующих на сегодня клонов Palm только HandEra 330 можно без преувеличения назвать "рабочим инструментом профессионала" (в комплект поставки входит офисный пакет QuickWord). Надо заметить, правда, что HandEra 330, как и любой бесклавиатурный ПК, ориентирован скорее на просмотр информации, нежели на ее ввод.

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

Адаптация программ для HandEra

Сергей Столбов
sergey@terminalstudio.com

С точки зрения разработчика ПО, эта машина - типичный ПК на базе PalmOS, обладающий, правда, некоторыми дополнительными возможностями. Компания HandEra предоставляет SDK (его можно найти на http://www.handera.com), в качестве средств разработки можно использовать CodeWarrior Release 7 для Palm OS или компилятор GCC и комплект утилит PilRC. Эмулятор входит в комплект SDK, файлы-образы ПЗУ можно скопировать с Web-сайта компании-производителя.

В качестве примера использована игра BrickShooter (это, заметим, первая российская программа, которая использует преимущества модели HandEra 330). Мы коснемся здесь только основных особенностей HandEra 330, не рассматривая возможность поворота экрана, - на нашем примере проиллюстрировать его достаточно сложно, а особой необходимости в какой-то специальной обработке его событий нет, поскольку реализация драйвера (кстати, "колесо" "совместимо" с Sony JogDial) предполагает возможность работать и в "старых" программах, без какой-либо специальной адаптации.

Photo3

Режимы отображения

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

Начнем с первой. Прежде чем задействовать специальные экранные функции, которые позволяют выводить изображение размером более 160x160 пикселов, необходимо проверить, позволяет ли это делать устройство, на котором запущена программа (в реальной жизни совсем не обязательно, что это будет HandEra 330). Если вызвать одну из таких функций на устройстве, отличном от HandEra 330, это приведет к краху ОС. Чтобы проверить наличие поддержки VGA-функций (они называются так потому, что в HandEra 330 используется VGA, правда, не полностью, а только 1/4), служит функция FtrGet:

int VgaEnabled(void)
{
UInt32 version;
return HANDERA = !FtrGet(TRGSysFtrID, TRGVgaFtrNum, &version);
}

HANDERA - глобальная переменная, к которой программа обращается для проверки, поддерживаются ли функции VGA (чтобы не вызывать каждый раз FtrGet). Теперь при запуске программы можно проверить устройство на наличие VGA-функций и переключиться в необходимый режим.

if (VgaEnabled())
VgaSetScreenMode(screenMode1To1, rotateModeNone);

Параметр screenMode1To1 указывает на то, что окно программы не следует растягивать в полтора раза, rotateModeNone - что не нужно поворачивать изображение. Очевидно, для того, чтобы задействовать поворот экрана, нужно лишь изменить второй параметр (кстати, в программах, использующих анимацию, не рекомендуется использовать "повороты", это связано с особенностями архитектуры процессора DragonBall).

Теперь необходимо изменить размер главного окна программы.

void SizeForm(FormPtr *frmP)
{
RectangleType rect;
rect.topLeft.x = 0;
rect.topLeft.y = 0;
WinGetDisplayExtent(&rect.extent.x, &rect.extent.y);
WinSetWindowBounds(FrmGetWindowHandle(frmP), &rect);
}

Эта функция представлена в руководстве разработчика (Programmer companion). Ее же придется вызывать для изменения размеров окна при отображении и удалении с экрана диалога ввода Graffiti, но об этом мы скажем ниже.

Что делать с таким большим окном? Это уже проблема прикладной программы. В BrickShooter был просто создан новый набор "кирпичиков" и более качественных графических картинок. При отрисовке проверяется, не на HandEra ли исполняется программа, и если да, то выводится большая картинка по особым (практически умноженным на коэффициент 1,5) координатам. Вот код, реализующий частный случай, - рисование "кирпичика" с игрового поля:

	if (!HANDERA)
	 DrawBitmap(GetID(Field[i][j]),6+(I+2)*9+1,12+(j+2)*9+1);
	else
	 DrawBitmap(GetID(Field[i][j]),8+(i+2)*14+1,16+(j+2)*14+1);

Остаются остальные формы, в которых хотелось бы просто увеличить шрифт. Для этого предусмотрена функция VgaFormModify:

if (HANDERA)
VgaFormModify(form, vgaFormModify160To240);

где form - указатель на активную форму. Эта функция "растягивает" форму в полтора раза, заменяя стандартные шрифты на укрупненные, поддерживаемые HandEra.

Теперь нужно показать ОС, что программа может использовать режим высокого разрешения (такие программы выводятся в диалоге панели управления Applications с признаком HiRes). Для этого нужно добавить запись с предопределенным кодом. Поскольку я использую PilRC, мне необходимо было занести в файл определений такую строчку:

HEX "sKst" ID 1000 0x00 0x00 0x00 0x00

Область Graffiti

При "сжатии" области Graffiti программа должна обрабатывать событие displayExtentChangedEvent. При получении формой такого события следует изменить ее размер и сделать перерисовку. Добавляем такой обработчик:

	case displayExtentChangedEvent:
	 SizeForm(FrmGetActiveForm());
	
	 FrmDrawForm(FrmGetActiveForm());
	 DrawField(1)		// Перерисовка игрового поля
	 handled = true;
	 break;

Вот, в общем, и все.

Крупные пиктограммы

Раз разрешение устройства выше, а размер экрана почти тот же, значит, пикселы меньше. А в таком случае нужно использовать более крупные шрифты. Но поскольку в системной оболочке используются крупные шрифты, нужно использовать и более крупные пиктограммы. Наряду с пиктограммами 22x22 и 15x9 (стандартными для Palm), в HandEra 330 используются пиктограммы 32x32 и 24x14.

Таким образом, в программу нужно включить еще три "семьи" пиктограмм*. Почему три? Дело в том, что нужен еще один комплект инвертированных 32x32 пиктограмм, которые используются, если пользователь переназначает программу, запускаемую по кнопке Calc. Эти "семьи" должны иметь ID 2000 (32x32), 2001 (24x14) и 2002 (инвертированные 32x32).


* Термин, связанный с особенностями хранения изображений и пиктограмм в PalmOS. - Прим. ред.

Шрифты

Шрифты HandEra напрямую в BrickShooter используются только в одном месте - в диалоге About для отображения информации об устройстве. В остальных местах они используются косвенно, при "растягивании" формы. Шрифты вызываются очень просто, той же функцией FntSetFont, что и на обычных устройствах:

FntSetFont(VgaBaseToVgaFont(boldFont));

В принципе, это все, что нужно для того, чтобы сказать: "Моя программа поддерживает основные функции компьютера HandEra".

Если хотите посмотреть на результат, программу BrickShooter для Palm можно найти по адресу http://www.brickshooter.com/palmru.