КурилкаСтатьи

Несколько сотен слов о BREW

Автор:

Введение.
Все что находиться ниже не является статьей, а просто является некоторой «рекламой» BREW и ничем более.

Все наверное играли в игры для мобильников. Многие знают, что большинство этих игр написаны на Java ME. На  самом деле так дела обстоят в России. За бугром же немного другая история. Помимо Java там используются и другие средства разработки. В частности платформа BREW  (Binary Runtime Environment for Wireless). Она предоставляет API реализованный на C, так что лично мне, как программисту C++,  предоставилась возможность безболезненно попробовать себя на поприще мобильных игр. Чем собственно и хочу поделиться. Проблема пока одна – в России, до недавних пор, не было мобил на которых можно было бы запустить BREW приложение. Сейчас SkyLink вводит такие телефоны, но их количество мало по сравнению с общей массой. Хорошая новость состоит в том, что в комплекте SDK идет эмулятор, с помощью которого Вы сможете запустить свою игру на виртуальном телефоне, менять свойства этого телефона (размер экрана, кол – во памяти, размер стека и т. д).

Скачать SDK можно с сайта QUALCOMM. Преимуществом BREW перед Java ME является то, что программы реализованные с помощью BREW API шустрее аналогичных написанных на Java ME и  обладают большими возможностями (например могут перезагрузить телефон или выполнить еще какие – нибудь действия на уровне операционной системы). Платой за это является то, что такие программы могут запросто «убить» операционную систему. Так мне например, попалась игра, которая без проблем работала на разных телефонах, разных производителей. Но тут ее начали портировать на телефон Х, и при нехватке памяти игра не могла сохранить save – файл на выходе из игры и просто вешалась, после чего телефон автоматически перезагружался. Виноватым оказался не «кривой» телефон, а кривые руки – ошибка была в коде и имела место на всех телефонах, просто проявляла себя по разному. В данном случае «убивала» операционку, а в других случаях  просто операционка незаметно для пользователя «убивала» приложение.

Я думаю, что не стоит объяснять простых вещей, типа API. Его описание можно найти в SDK и оно совсем несложное. В качестве примера приведу код для маленькой программулинки под BREW, выводящей строку “Hello World”.

#include "AEEAppGen.h"        // Applet helper file
#include "helloworld.bid"  // Applet-specific header that contains class ID

static boolean HelloWorld_HandleEvent(AEEApplet * pme, AEEEvent eCode,uint16 wParam, uint32 dwParam);

int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * pMod,void ** ppObj)
{
   *ppObj = NULL;
    
   if(AEEApplet_New( sizeof(AEEApplet),                  // Size of our //private class
                     ClsId,                              // Our class ID
                     pIShell,                            // Shell interface
                     pMod,                               // Module instance
                     (IApplet**)ppObj,                   // Return object
                     (AEEHANDLER)HelloWorld_HandleEvent, // Our event handler
                     NULL))                              // No special  //"cleanup" function
      return(AEE_SUCCESS);

  return (EFAILED);
}

static boolean HelloWorld_HandleEvent(AEEApplet * pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{  
   AECHAR szText[] = {'H','e','l','l','o',' ','W','o', 'r', 'l', 'd', '\0'};

   switch (eCode){
      case EVT_APP_START:                        
         IDISPLAY_DrawText(pMe->m_pIDisplay,    // Display instance
                           AEE_FONT_BOLD,       // Use BOLD font
                           szText,              // Text - Normally comes from resource
                           -1,                  // -1 = Use full string length
                           0,                   // Ignored - IDF_ALIGN_CENTER
                           0,                   // Ignored - IDF_ALIGN_MIDDLE
                           NULL,                // No clipping
                           IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
         IDISPLAY_Update (pMe->m_pIDisplay);

         
      return(TRUE);

      case EVT_APP_STOP:
         return(TRUE);


      default:
         break;
   }
   return(FALSE);
}

Все что делает эта «программа» - регистрирует обработчик событий HelloWorld_HandleEvent и в нем при старте программы с помощью IDISPLAY_DrawText рисует наш текст. После просто обновляет экран с помощью IDISPLAY_Update. Все. Единственное что может потребовать объяснения так это строка:
AECHAR szText[] = {'H','e','l','l','o',' ','W','o', 'r', 'l', 'd', '\0'};
Все просто – BREW использует два байта на символ. По поводу параметров функций я не вижу смысла рассказывать, т. к. это все есть в документации, а сам этот пример взят из SDK examples.

Действительно что интересно – это, как запустить эту программу на компьютере. Для этого в SDK в папке bin существует эмулятор телефона BREW_Emulator.exe (если BREW SDK version >= 3.0, то BREW_Simulator.exe). Для запуска программы на эмуляторе необходимо выполнить следующие шаги (на примере скомпилированного HelloWorld из SDK, brewdir = “BREWX.X.X”, для версии < 3.0,
brewdir = “BREWX.X.X/sdk”, для версии >= 3.0):
1.  Собственно открыть эмулятор
2.  File->Load device…
3.  Выбрать подходящий для Вас девайс из каталога brewdir/devices
4.  File->Change Applet Dir…
5.  Выбрать каталог brewdir/examples
(Пункты 6, 7 только для BREW < 3.0)
6.  File->Tools->Settings…
7.  Пометить флажок Specify MIF Directory и указать каталог brewdir/examples
8.  Вы должны увидеть что – то вроде после этого, после выхода из Tools:

Изображение удалено

9.  Запустить программу
Обращаю Ваше внимание на то, что файл .MIF должет лежать на том же уровне и иметь то же имя что и директория, в которой лежит сама программа. А программа, в свою очередь, должна иметь то же имя что и директория. Вобщем структура должна быть такая же как и у HelloWorld из примеров SDK.

Надеюсь, то что я настрочил, побудит Вас зайти на QUALCOMM, скачать SDK, посмотреть что, да как. Я в свою очередь постараюсь выкладывать как можно больше информации.
Кстати вот книга о BREW.

11 декабря 2006

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