Войти
airplayСтатьи

Airplay: Начало работы

Автор:

Первые шаги по созданию проекта на базе Airplay

Введение
Проект
Код

Введение

Для начала работы с 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. Чтобы исправить это вам нужно поменять язык ОС или запускать компиляцию вручную. У меня это выглядело так:

C:\Airplay SDK\4.0\examples\Basic\build_basic_vc9>..\..\..\s3e\bin\s3e_deploy.bat -osymbian8 --release --gcc --quiet

Параметр --quiet указывает что не нужно обрабатывать вывод утилит, соответственно всё работает. Обратите внимание и на параметр --gcc, который указывает что необходимо брать откомпилированный бинарник из папки Release_Basic_vc9_gcc_arm, а не Release_Basic_vc9_arm.

Проект

Сердце любого проекта Airplay SDK - файл с раширением *.mkb. Он является интерпретируемым файлом для утилиты сборки проектов Ideaworks3d. Вот пример такого файла:

#!/usr/bin/env i3d_make_build.py
options
{
  strict
}

files
{
  Basic.cpp
}

Раздел 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");

    // Если пользователь не сбросил приложение, и если не была нажата
    // любая кнопка и если не была нажата кнопка SELECT
    while (!s3eDeviceCheckQuitRequest() && !s3eKeyboardAnyKey() 
       && !(s3ePointerGetState(S3E_POINTER_BUTTON_SELECT) & S3E_POINTER_STATE_PRESSED))
    {
        // Закрашиваем экран
        if (s3eTimerGetMs() % 3000 < 1000)
            fillScreen(255,0,0);
        else if (s3eTimerGetMs() % 3000 < 2000)
            fillScreen(0,255,0);
        else
            fillScreen(0,0,255);

        // Выводим текст на экран по координатам 0x0 без переноса
        s3eDebugPrint(0, 0, "Hello, World!", 0);
        // Делаем невидимый буфер видимым
        s3eSurfaceShow();
        // Даём возможность поработать ОС
        s3eDeviceYield(0);
        // Обновляем различные состояния
        s3eKeyboardUpdate();
        s3ePointerUpdate();
    }
    return 0;
}

#Airplay, #SDK

8 ноября 2009 (Обновление: 23 апр 2011)

Комментарии [3]