Для начала работы с AirplaySDK необходимо скачать его с официального сайта и установить.
Основная утилита, содержащая все необходимые для начала действия в виде кнопок, расположена в Airplay SDK\4.0\tools\LaunchPad\LaunchPad.exe.
Рассмотрим типичный проект, взяв за основу пример проекта Basic. Файлы этого проекта можно найти в папке Airplay SDK\4.0\examples\Basic.
Во время сборки приложения для Symbian OS 8 или Symbian OS 7 у вас может возникнуть проблема следующего характера:
UnicodeDecodeError: 'utf8' codec can't decode byte 0x91 in position 0: unexpected code byte
Это связано с тем что утилита на питоне содержит ошибку - она ожидает что стандартный вывод программы будет в кодировке Utf8, а он в кодировке Win-1251. Чтобы исправить это вам нужно поменять язык ОС или запускать компиляцию вручную. У меня это выглядело так:
Параметр --quiet указывает что не нужно обрабатывать вывод утилит, соответственно всё работает. Обратите внимание и на параметр --gcc, который указывает что необходимо брать откомпилированный бинарник из папки Release_Basic_vc9_gcc_arm, а не Release_Basic_vc9_arm.
Проект
Сердце любого проекта Airplay SDK - файл с раширением *.mkb. Он является интерпретируемым файлом для утилиты сборки проектов Ideaworks3d. Вот пример такого файла:
Раздел options включает в себя различные настройки проекта. Например strict делает все предупреждения утилиты makefile_builder и компилятора ошибками.
Раздел files описывает все файлы проекта. В этом же разделе могут присутствовать названия групп в квадратных скобках и имена папок в круглых.
При создании проекта рекомендуется придерживаться следующих правил:
- Папка проекта
- файл "имяпроекта.mkb"
- папка "data" для изображений, звуков и т.п.
- папка "source" для исходных кодов
Код
#include"s3e.h"void fillScreen(uint8 r, uint8 g, uint8 b)
{
// Получаем указатель на текущую поверхность
uint16* screen = (uint16*)s3eSurfacePtr();
// Преобразуем цвет в формат устройства
uint16 colour = (uint16)s3eSurfaceConvertRGB(r,g,b);
// Получаем размеры экрана
int32 width = s3eSurfaceGetInt(S3E_SURFACE_WIDTH);
int32 height = s3eSurfaceGetInt(S3E_SURFACE_HEIGHT);
int32 pitch = s3eSurfaceGetInt(S3E_SURFACE_PITCH);
// Закрашиваем экранfor(int y = 0; y < height; y++)for(int x = 0; x < width; x++)
screen[y * pitch/2 + x] = colour;
}
int main()
{
// Выводим строку в лог. Надо отметить что запись в файл лога//может быть медленной и не стоит этим злоупотреблять.
s3eDebugTraceLine("in IwMain");
// Если пользователь не сбросил приложение, и если не была нажата// любая кнопка и если не была нажата кнопка SELECTwhile(!s3eDeviceCheckQuitRequest() && !s3eKeyboardAnyKey()
&& !(s3ePointerGetState(S3E_POINTER_BUTTON_SELECT) & S3E_POINTER_STATE_PRESSED))
{
// Закрашиваем экранif(s3eTimerGetMs() % 3000<1000)
fillScreen(255,0,0);
elseif(s3eTimerGetMs() % 3000<2000)
fillScreen(0,255,0);
else
fillScreen(0,0,255);
// Выводим текст на экран по координатам 0x0 без переноса
s3eDebugPrint(0, 0, "Hello, World!", 0);
// Делаем невидимый буфер видимым
s3eSurfaceShow();
// Даём возможность поработать ОС
s3eDeviceYield(0);
// Обновляем различные состояния
s3eKeyboardUpdate();
s3ePointerUpdate();
}
return0;
}