Top Banner
Surgimento • Qualcomm Fundada em 1985 San Diego, Califórnia USA Localização por satélite – OmniTracs CDMA: dispositivos e estações base – Eudora! Ano: 2000 Um olho na cadeia de valores do mercado... Outro no potencial da tecnologia móvel... App lic ati on Dev elo per s Pub lis her s Con ten t Pro vid ers Dev ice Man ufa ctu res Car rie rs Cus tom ers
162

Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Apr 07, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Surgimento• Qualcomm

– Fundada em 1985– San Diego, Califórnia USA– Localização por satélite – OmniTracs– CDMA: dispositivos e estações base– Eudora!

• Ano: 2000• Um olho na cadeia de valores do

mercado...• Outro no potencial da tecnologia móvel...

Application Developers

Publishers

Content Providers

Device

Manufactures

Carriers

Customers

Page 2: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Surgimento• Vasta experiência em desenvolvimento para celular• Líder em desenvolvimento de aplicações CDMA

Necessidade de uma plataforma uniforme de desenvolvimento

para celular

Binary Runtime Environment for Wireless

Necessidade de conexão entre os links na cadeia de valores do

mercado móvel

Jan 2001

End-to-end business and technology solution

Page 3: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW: End-to-end business and technology solution

• Operadoras:– Virtual Marketplace

• Seleção de aplicação• Negociação de preço com o desenvolvedor

– BREW Delivery System (BDS)• Secure over-the-air distribution

• Coordinates billing and payment • Fabricantes:

– BREW client software

– Porting and testing tools

– Consultoria na especificação do dispositivo

• Usuários:– BREW Mobile Shop

– Transparência

Application Developers

Publishers

Content Providers

Device

Manufactures

Carriers

Customers

Page 4: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

• Publishers, Desenvolvedores e Provedores de Conteúdo:

– Modelo de negócio simples– Suporte Técnico– BREW SDK® – Ferramentas de Desenvolvimento– Assistência a testes– Near-real time application sales

reporting

– Sistema de pagamento– BREW Global Publisher (BGP)

BREW: End-to-end business and technology solution Ap

plication Developers

Publishers

Content Providers

Device

Manufactures

Operators

Customers

Page 5: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

O que é BREW

• Solução completa para– Desenvolvimento de aplicações wireless– Configuração de dispositivos– Distribuição de aplicações– Cobrança e pagamento de aplicações

BREW SolutionTecnologia + Modelo de negócio

Page 6: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

A Solução BREW

• BREW SDK– Kit de desenvolvimento para desenvolvedores de

aplicações• Software cliente BREW e ferramentas de

porting– Software base instalado no celular (+/- 150k)

embutido pelos fabricantes• BREW Distribution System (BDS)

– Sistema que permite comercialização de aplicações através de operadoras

Page 7: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

O Modelo de Negócios BREW

Fonte: http://brew.qualcomm.com

Page 8: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Facilidades do Modelo• Comercio virtual com BDS (BREW Distribution

System)– Submissão de aplicações e testes– Negociação operadora x desenvolvedor

• Customização de ofertas de produtos para assinantes via catálogo da operadora– Funções de gerenciamento de catálogo– Download, execução e deleção de aplicações– Serviços de download extensíveis

• Serviços financeiros com BDS– Suporte a transações– Serviços de cobrança integrados

Page 9: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Tecnologia: BREW no Celular

ASIC: Application Specific Integrated CircuitFonte: http://brew.qualcomm.com

Page 10: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW no Celular

• 150K , situado entre os aplicativos e a camada ASIC

• Desenvolvimento independente de chipset dos dispositivos– Porte!

• Aplicativos podem ser escritos em JAVA, C ou C++

• Suporte técnico

• Restrições de exclusividade

• Tecnologia própria• Centralização• Burocracia de

instalação/ publicação– Assinatura digital– TRUE BREW

• $$

Page 11: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW x J2ME - Vantagens

• API mais bem suportada• Tricks mais limpas

– Acesso direto à tela• Não há limite para tamanho da aplicação• Pode-se utilizar OO sem medo• Facilita a distribuição de aplicações

independentemente de tecnologia – OTA– cdmaOne,CDMA2000,gsm/gprs,UMTS (3G), etc

• Distribuição, gerenciamento e vendas

Page 12: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW x J2ME - Desvantagens

• Solução de compressão deve ser escrita pelos desenvolvedores

• Inexistência de profilers• Área de atuação restrita a Japão e EUA

Page 13: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW Hoje28 países

51 operadoras No Brasil:

                                                                                                                                                                                                              41 fabricantes

BREW 1.0 BREW 2.1BREW 1.1 BREW 3.0BREW 2.0 BREW 3.1

3 a caminho

5 a caminho

Page 14: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW: Evolução (1/3)• BREW 1.0

– Quase não existe aparelho Motorola V731 e Sharp800.

• BREW 1.1– Minor upgrade to BREW – Brew Compressed Image format (BCI )– T720 - 400k RAM - 4096 byte stack - 1500k de espaço de file system

• BREW 2.0 – Sprite nativo e suporte a tiles– Transformações em bitmaps, sprite e tile objects

• Rotated – 90 graus• Scaled – potência de 2• Flipped

– Suporte Bluethooth

Page 15: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW: Evolução (2/3)• BREW 2.1

– Gráficos 3D – Câmera

• BREW 3.0– Removable Storage media

• SD, MMC ...– Interface Serial– BREW Simulator baseado em dados reais do dispositivo

• BREW 3.1– Lançado este ano

Page 16: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW: Evolução (3/3)

Demonstração da evolução de BREW• http://brew.qualcomm.com/brew/en/operator/demo

s/demos.html

Page 17: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Overview do Curso1. Conceitos Básicos– Termos técnicos– Estrutura de uma aplicação BREW

2. Desenvolvimento de aplicações– Análise de uma aplicação simples– Interfaces básicas da API– HelloWorld

3. Aplicações – 2ª parteIntegração de código C++

– Compilação para o dispositivo

4. Interface com o usuárioIDisplay, IGraphics, IImage, IDialog

5. Recursos de RedeINetMgr, ISocket, ISSL, IWeb

6. Som e I/OISound, ISoundPlayer, IFileMgr, IFile

7. BREW MBA / TrueBREW

Page 18: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW

Conceitos Básicos

Page 19: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

O Modelo de Camadas

Page 20: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Elementos BREW

Recursos

BRI

= ClassIDPlataforma BREW

Interfa

ce

Interface

MIF BAR

AppletMódulo

BID

Page 21: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Módulos• Englobam os

componentes de uma aplicação

• Encapsulam um ou mais applets

• Desenvolvidos como DLLs Windows– Assumem outro formato

quando compilados para o dispositivo (.mod)

• Sempre possuem um arquivo MIF associado

Page 22: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Applets• Similares a “aplicações”• Toda aplicação BREW

deve possuir pelo menos um applet

• Classes que permitem ser gerenciadas pelo ambiente– Criação, destruição e

troca de mensagens• Implementam uma

interface comum– IApplet

Page 23: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Interfaces• Serviços na plataforma

BREW são disponibilizados através de interfaces (APIs)

• Interfaces em BREW possuem um ID único e o acesso é gerenciado pela plataforma

• Cada interface encapsula um conjunto de serviços como– Acesso ao display– Controle de som– Serviços de rede– Etc...

Page 24: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ClassIDs

• Applets e interfaces públicas possuem identificadores únicos em BREW

• Identificadores possuem 32 bits e são chamados de ClassIDs

• São gerenciados pela Qualcomm para garantir sua unicidade

• São mantidos em arquivos de texto com extensão .bid

Page 25: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Arquivos MIF• Cada módulo BREW possui

um arquivo MIF (Module Information File) associado

• MIFs mantêm informações sobre o conteúdo do módulo– Applets– Privilégios– Títulos de applets e ícones– ClassIDs

• Plataforma lê as informações do aplicativo instalado do .mif– Similar ao .jad de J2ME

São criados e editados pelo BREW MIF EditorProgramas BREW SDK 2.0 BREW MIF Editor

Page 26: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Arquivos de Recursos (.BAR)• Mantêm os recursos

usados pela aplicação– Textos– Imagens– Sons

• .BRI descreve o BAR• .BRI editado por BREW

Resource Editor– <BREWDIR> BREW

Resource Editor

Recursos precisam ser compilados antes de serem utilizados pela aplicação!

Page 27: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Compilação do BRI

• Compilador embutido no Resource Editor– Build Build QUALCOMM .BAR/.H Files

Page 28: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Relembrando• Applets• Módulos• Interfaces

ClassIDsMIFsArquivos de recursos

Recursos

BRI

= ClassIDPlataforma BREW

Interfa

ce

Interface

MIF BAR

AppletMódulo

BID

Page 29: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Aplicações BREW

1ª parte

1. Criando aplicações no VS 20052. Interfaces básicas3. Debugando no VS 2005

Page 30: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Analisando uma Aplicação

• Execute o emulador BREW– IniciarProgramasBREW SDK 2.0BREW

Emulator• Selecione a aplicação

“Hello World App”

Page 31: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Estrutura de Arquivos• No Windows Explorer, abrir

– <BREWDIR>\Examples• Estrutura padrão

MIF<APP> dll bar bid

• Componentes de uma aplicação– mif, bid, dll, bar (opcional)

Page 32: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Estrutura de arquivos - MeantimeProjeto

mba.mif, mba.bid

mba.mifmba.dll, mba.bid, mba.bar

mba.vcproj, pre_build.bat, post_build.dat

mba.bri, *.png, *.bvg, *.mid, *.txtMainApplet.cpp....

Page 33: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

VS - O Ambiente• VS 2003 - A IDE oficial de desenvolvimento BREW é

Microsoft Visual Studio• VS 2003 - Quando instalado, o BREW SDK incorpora um

novo wizard aos tipos de projeto do VS– File New Projects BREW Application Wizard

• VS 2003 - O wizard configura o ambiente e adiciona automaticamente os arquivos base necessários ao projeto

• VS 2003 – Pago• VS 2005 – Versão Express gratis• VS 2005 – Roda sem wizard

– Por nossa conta!

Page 34: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

O Ambiente

• Microsoft Visual Studio C++ 2005– Express Edition

• BREW SDK 2.0.1

• BREW Tools 1.0

Page 35: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Visão Geral do Código• No Visual Studio, abrir

– <BREWDIR>\Examples\HelloWorld\helloworld.dsw• Convert project• Do not remove source control bindings from project!

• Arquivos que compõem a aplicação– AEEAppGen.c (gerado)– AEEModGen.c (gerado)– helloworld.c (implementação das funcionalidades)

• Funções principais– AEEClsCreateInstance()– HelloWorld_HandleEvent()

• AEE – Application Execution Environment

Page 36: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Criando uma aplicação• É necessário– Arquivo MIF (MIF Editor)

– Criar o projeto

– Implementação das interfaces básicas• IApplet, IModule

– Fornecer os métodos para a plataforma:• CreateInstance• HandleEvent• FreeAddData

– Configurar as propriedades de projeto

• O VS 2003 resolve esses problemas com o App Wizard do Add-in

• Já o VS 2005 “É estudante...”

Page 37: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Passo a passo - Criando o mif1. Abrir o BREW MIF Editor2. Clique em New Applet e dê o nome “HelloWorld”3. Marque a opção “Locally” e entre com o número “11111111”

• Por ser um ID local, pode ser qualquer ID diferente dos existentes4. Nomeie o ClassID como HELLO_WORLD5. Clique em Generate e confirme

• Lembrar da estrutura de diretórios!6. Salve o arquivo .bid junto à raiz do seu projeto7. Salve o arquivo. mif na pasta mais externa

Page 38: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Passo a passo - Criando o projeto

1. Abra o Visual Studio2. File New Project3. Selecione “emptyproj”4. Nomear o projeto como “HelloWorld”

Desmarque a opção “Create directory for solution”

Page 39: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Passo a passo - Implementando as interfaces

básicas• Essas interfaces já estão prontas,

bastam ser adicionadas ao projeto• Clique com o botão direito em ‘Source

Files’ e selecione ‘Add existing Item’• Do caminho <BREWDIR>/src, adicione

os arquivos:– AEEAppGen.c– AEEModGen.c

Page 40: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

• É o arquivo que fornece os métodos de entrada na aplicação

• Com o botão direito no ‘Source Files’, selecione ‘Add New Item’

• Crie um MainApplet.cpp

• Copie o corpo do arquivo ‘Exemplo1.c’

• Substitua as referências ao bid, ao classId e ao nome “Exemplo1”

Passo a passo - Criando o arquivo principal

Page 41: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

• General do projeto– Dll!

• General em C/C++– inc de <BREWDIR>– 64bits -> NO

• Preprocessor em C/C++– Adicione AEE_SIMULATOR

• Advanced em C/C++– Compile as Default

• General em Linker– Output file: $(ProjectName)/$(ProjectName).dll

Passo a passo - Configurando o projeto

Page 42: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Interação com a plataforma

• ‘Padrão’ de comportamento definido– É necessário um padrão

uniforme para que o ambiente interaja com as aplicações

• ‘Diretos e deveres’ das aplicações

Aplicações podem acessar os serviços das interfacesPlataforma controla o ciclo de vida das aplicações

Page 43: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Interação Ambiente Aplicação

• Toda aplicação BREW precisa– Permitir sua criação e destruição pelo ambiente– Receber e tratar eventos

• Duas interfaces definem o padrão para módulos e applets– IModule– IApplet

• Definem os serviços básicos que devem ser fornecidos por toda aplicação BREW

Page 44: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IModule• Mecanismo para controle de acesso a applets

e classes• Define funções para

– Permitir ao BREW requisitar uma instância de classe específica do módulo

• IMODULE_CreateInstance()– Permitir ao BREW requisitar a liberação de

recursos• IMODULE_FreeResources()

• Raramente utilizada diretamente pelo desenvolvedor

Page 45: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IApplet

• Define o serviço para manipulação de eventos gerados pelo sistema ou outros applets

• Deriva de IBase e define a função HandleEvent

• Todo applet precisa implementar esta interface

IAPPLET_HandleEvent() só pode ser chamada pelo shell!Para enviar eventos para outros applets deve-se chamar ISHELL_SendEvent()

Page 46: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Tratamento de eventos

• O modelo de aplicação BREW é baseado em um engenho dirigido a eventos– Todas as entradas do applet são recebidas

como eventos– O applet precisa indicar ao ambiente se tratou

ou não o evento recebido (retorno TRUE ou FALSE)

– Eventos são recebidos pela função HandleEvent() implementada por todo appletPor questão de segurança, a demora

na resposta a eventos causa a interrupção do applet pelo ambiente!

Page 47: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

A Função HandleEvent

• Parâmetros– pIApp: ponteiro para o applet atual– eCode: código do evento recebido– wParam: parâmetro do evento (16 bits)– dwParam: parâmetro do evento (32 bits)

• Exemplos de possíveis eventos– EVT_APP_START, EVT_APP_STOP,

EVT_KEY_PRESS– Lista completa disponível no BREW API Reference,

seção Data Types AEE Events

boolean HandleEvent(IApplet * pIApp, AEEEvent eCode, uint16 wParam, uint32 dwParam)

Page 48: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Interação Aplicação Ambiente

• Toda aplicação precisa– Acessar o dispositivo

• Tela, som, teclas, etc.– Fazer uso de serviços pré-definidos

• Primitivas de desenho, tratamento de eventos, etc.

• Em BREW, duas interfaces provêem este tipo de suporte– IShell– IBase

Page 49: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IShell

• Dá acesso a todos os serviços externos• Applets podem requisitar ponteiros para outras

interfaces (passando o respectivo ID)– ISHELL_CreateInstance()

• Algumas características principais– Ativar e desativar o applet atual– Gerenciar timers– Carregar recursos utilizados em applets– Passar eventos para outros applets– Acessar o relógio e outros recursos do dispositivo

Page 50: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IBase

• Define a estrutura básica de todas as classes do ambiente

• Toda interface do AEE herda de IBase• Define as funções principais para

gerenciamento de objetos na memória– Alocação de objetos (função AddRef())– Liberação de objetos (função Release())

Page 51: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Nosso Alô Mundo!1. Abra o projeto HelloWorld criado anteriormente 2. Abra o arquivo MainApplet.cpp3. Vamos analisar

• Estrutura _Exemplo1• Funcão AEEClsCreateInstance()• Funcão Exemplo1_HandleEvent()• Funcão Exemplo1_InitAppData()• Funcão Exemplo1_FreeAppData()

4. No início da função Exemplo1_HandleEvent(), crie um string contendo a mensagem que será apresentada na tela• Exemplo:

AECHAR szText[] = {'A', 'l','o',' ', 'M', 'u', 'n', 'd', 'o', '!', '\0'};

Page 52: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Alô Mundo!5. No case de tratamento do evento de inicialização do applet

(EVT_APP_START), desenhe o texto na tela e atualize o display

6. Compile a aplicação – Crtl + Shift + B7. Pronto! Agora basta disponibilizar no emulador...

IDISPLAY_DrawText(pMe->pIDisplay, // ponteiro para o display AEE_FONT_BOLD, // fonte negrito szText, // texto -1, // -1 = a string toda 0, // posicao x – ignorada aqui 0, // posicao y – ignorada aqui NULL, // sem clipping IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);IDISPLAY_Update (pMe->pIDisplay);

Page 53: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Alô Mundo! no Emulador

1. Copie o arquivo HelloWorld.mif para o diretório “<ROOT>\BREW SDK v2.0.1\Examples”

2. Neste mesmo diretório crie uma pasta “HelloWorld”

3. Para esta pasta copie os arquivos• HelloWorld.bid• helloworld.dll

4. Abra o emulador e veja sua aplicação!

Page 54: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Debugging no Visual Studio: Configuração

1. Project Properties2. Debugging Command

• Entre com “<ROOT>\BREW SDK v2.0.1\Bin\BREW_Emulator.exe”

3. C/C++ General Debug Information Format• Selecione “Program Database for Edit & Continue”

4. C/C++ Optimization• Disabled!

5. Linker Debugging Generate Debug Info• Selecione “Yes (/DEBUG)”

6. Indique um ponto de parada no programa e teste• Clique na barra do lado esquerdo de algum ponto do código• Debug Start

Page 55: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Aplicações BREW

2ª parte

1. Migrando de C para C++2. Compilando para o dispositivo

Page 56: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

STDLIB em BREW• BREW não suporta a biblioteca padrão de C• As funções de STDLIB são substituídas por macros e

funções específicas• Existem funções para

– Manipulação de strings– Arquivos e I/O– Alocação de memória– Etc.

• Estas funções são chamadas Helper Functions e estão documentadas no BREW API Reference, seção Helper Functions

• Seu código deve incluir a biblioteca “AEEStdLib.h”

Page 57: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Integrando Código C++• Além de código C, BREW suporta recursos de C++

– Classes– Herança– Interfaces

• Exceções não são suportadas!• Threads não são suportadas!• Objetos estáticos não são suportados!• Classes podem ser incorporadas à aplicação

normalmente, desde que as funções invocadas pelo ambiente sejam estáticas!

• A função AEEClsCreateInstance() deve ser utilizada para criar os objetos iniciais

Page 58: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Migrando para C++ : Acesso à plataforma

• Applet (IShell e IDisplay) + DeviceInfo fornecem acesso à plataforma

• Todo mundo precisa desses recursos..• O Acesso à plataforma deve então ser encapsulado

numa estruturatypedef struct SBREWAccess : public AEEApplet {

AEEDeviceInfo m_deviceInfo;} SBREWAccess;

Page 59: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Migrando para C++: O Applet • Uma classe que herda da estrutura de acesso a BREW• Métodos de controle de toda a aplicação

– HandleEvent,– FreeAppData, – InitAppData, – StopApp, – StartApp, – PauseApp, – ResumeApp

• Criação da aplicação no .cpp do Applet– CreateInstance– Metodo isolado, fora do escopo da classe

Page 60: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

class CMainApplet : public CBREWAccess {

public:static boolean HandleEvent(CMainApplet * pCMainApplet,

AEEEvent eCode, uint16 wParam, uint32 dwParam);

static void FreeAppData(CMainApplet *pCMainApplet);

void InitAppData();void StopApp();void StartApp();void PauseApp();void ResumeApp();

private:CScreenManager* m_pScreenManager;CDataManager* m_pDataManager;/* etc, etc, etc*/

};

Migrando para C++: O Applet

Page 61: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

• HandleEvent e FreeAppData são chamados pela plataforma– Métodos estáticos. – Ponteiros passados no CreateInstance– Assinatura fixa

• InitAppData, Start, Stop, Pause e Resume reagem a eventos enviados pela plataforma

Migrando para C++: O Applet

Page 62: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *po, void **ppObj){ *ppObj = NULL;

if( ClsId == AEECLSID_HELLOWORLD ) {

// Create the applet and make room for the applet structure if( AEEApplet_New(sizeof(CMainApplet), ClsId, pIShell, po, (IApplet**)ppObj,

(AEEHANDLER)CMainApplet::HandleEvent, (PFNFREEAPPDATA)CMainApplet::FreeAppData) == TRUE ) {

((CMainApplet *)*ppObj)->InitAppData();return (AEE_SUCCESS);

} return (EFAILED);}

void CMainApplet::InitAppData() { // get device info ISHELL_GetDeviceInfo(m_pIShell, const_cast <AEEDeviceInfo*> (&m_deviceInfo));

// initialize your managers... // etc, etc, etc}

Migrando para C++: O Applet

Page 63: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

• HandleEvent– Chamado pela plataforma: tratar os eventos– Reenviá-los para o gerenciador de eventos

• InitAppData– Chamado dentro do createInstance– Inicializar os managers

• FreeAppData– Chamado pela plataforma após o envio do evento STOP– Deletar todos os recursos alocados

• StartApp– Acionado no recebimento de um evento de START– Coloca o aplicativo pronto pra realmente começar a executar

• StopApp– Acionado no recebimento de um evento de STOP– Coloca o aplicativo pronto pra ser destruído

• PauseApp– Acionado no recebimento de um evento de PAUSE– Desalocar recursos BREW– Mínimo de processamento possível

• ResumeApp– Acionado no recebimento de um evento de RESUME– Restaura o estado do aplicativo– Realiza as ações de processamento/exibição do estado de pause

Migrando para C++: O Applet

Page 64: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Migrando para C++: Funções Globais

• extern void* operator new(size_t size);

• extern void* operator new[](size_t size);

• extern void operator delete(void *ptr);

• extern void operator delete[](void *ptr);

void* operator new(size_t size) { return MALLOC(size);}

void* operator new[](size_t size) {

return MALLOC(size);}

void operator delete(void *ptr) { FREE(ptr);}

void operator delete[](void *ptr) {

FREE(ptr);}

New e delete precisam ser implementados com as macros MALLOC e FREEe não as funções free() e malloc() de ANSI

Page 65: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Migrando para C++: Simulando Exceções

• Definição do tipo que representa os erros– typedef int32 EUserError; – #define USERERROR_None AEE_SUCCESS // AEEError.h - 0– #define USERERROR_General (ERROR_USER + 0x01)– #define USERERROR_NoHeapMemory (ERROR_USER + 0x02)

• Definição das macros de TRY e CATCH– #define TRY_ERROR(e) if((e) != USERERROR_None) {goto CATCH;}

– #define TRY_OBJ(obj, e) if((obj) == NULL) {(e) = USERERROR_NoHeapMemory; goto CATCH;}

– #define BEGIN_CATCH() CATCH:

– #define END_CATCH()

Page 66: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

• Todos os métodos que levantariam exceções recebem como primeiro parâmetro a referência de um erro– void Init(EUserError& rError) {};

• Init e Free e não Construtor e Destrutor!

• Como simular as exceções, utilizando essas macros?

Migrando para C++: Simulando Exceções

Page 67: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Migrando para C++: Simulando Exceções

void Init(EUserError& rError) { // ... m_pScreenManager = new CScreenManager(); TRY_OBJ(m_pScreenManager, rError); m_pScreenManager->Init(rError); TRY_ERROR(rError); m_pDataManager = new CDataManager(); TRY_OBJ(m_pDataManager, rError); m_pDataManager->Init(rError); TRY_ERROR(rError); return;

//... BEGIN_CATCH(); // delete all the resources previously loaded if ( m_pScreenManager ) { m_pScreenManager->Free(); SAFE_DELETE(m_pScreenManager); } if ( m_pDataManager ) { m_pDataManager->Free(); SAFE_DELETE(m_pIDataManager); }}

Page 68: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Migrando para C++: Nosso HelloWorld

• Migrar nosso HelloWorld para C++

• Dica:– Globals.h com as inclusões de:

• AEEStdLib.h• AEEShell.h• AEEModGen.h• AEEAppGen.h• AEEShell.h• _res.h• .bid

Page 69: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Compilação para o Dispositivo• Antes de ser implantada no dispositivo, a

aplicação BREW precisa ser compilada para o formato ARM

• Existem atualmente dois compiladores– RealView Compilation Tool for BREW

• Conjunto de ferramentas oficial (e pago) da ARM• Bastante amigável e aplicações exemplo vêm com

makefiles para este ambiente– GNU Cross Compiler

• Solução não oficial, porém o compilador é free• Dependências

– BREW SDK– GNU Cross Compiler for ARM– Cygwin

Page 70: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Implantação da Aplicação

• O arquivo compilado possui extensão .mod• Este arquivo equivale à DLL usada no

emulador• Para implantar a aplicação no celular é

necessário– Celular com suporte a BREW (destravado!)– Cabo de dados para conexão serial pc <-> celular– Software para cópia de arquivos

• BREW AppLoader

Page 71: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW

Interface com o usuário

Page 72: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Recursos de Interface em BREW

• BREW dispõe de vários recursos para desenvolvimento de interface com usuário

• Existem interfaces para– Desenho de primitivas gráficas– Apresentação de imagens– Componentes de entrada e saída

• Texto, lista de opções, menus

• Principais interfaces– IDisplay, IGraphics, IImage, IControl

Page 73: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDisplay

• Desenha texto, BMPs e formas geométricas na tela

• É usada por todas as aplicações• Operações realizadas só têm efeito após uma

chamada à função de atualização da tela– Por questão de performance, recomenda-se atualizar

a tela apenas após várias operações de desenho

Page 74: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDisplay: Funções Principaisvoid IDisplay_ClearScreen(IDisplay * pIDisplay)

– Limpa a área de clipping ou a tela completa se não houver tal área definida

void IDISPLAY_EraseRect(IDisplay * pIDisplay, AEERect * pRect)

– Limpa um retângulo especificado

int IDISPLAY_DrawText(IDisplay * pIDisplay, AEEFont Font, const AECHAR * pcText, int nChars, int x, int y, const AEERect * prcBackground, uint32 dwFlags)

– Desenha um texto em uma determinada posição e ajusta ao retângulo de clipping

Page 75: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDisplay: Mais Funções Principais

void IDisplay_DrawRect(IDisplay * pIDisplay, const AEERect * pRect, RGBVAL clrFrame, RGBVAL clrFill,

uint32 dwFlags)– Desenha um retângulo usando as flags e cores

especificadas

void IDISPLAY_Update(IDisplay * pIDisplay)– Realiza a atualização da tela

IDISPLAY_Update() apenas coloca a operação na fila de mensagens!Para atualização imediata recomenda-se IDISPLAY_UpdateEx()

Existem funções similares para desenho de linhas verticais, horizontais e frames

Page 76: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDisplay: Utilização1. Obtenha uma instância da interface IDisplay através

da função ISHELL_CreateInstance()• Ou utiliza-se o ponteiro m_pIDisplay da estrutura de dados

do applet

2. Se necessário, limpe a região da tela• IDisplay_EraseRect() ou IDisplay_EraseRgn()

3. Realize a operação desejada• Desenho de texto, linha, retângulo ou bitmap

4. Atualize a tela• IDISPLAY_Update() ou IDISPLAY_UpdateEx()

5. Libere a interface se não for mais necessária• IDISPLAY_Release()• A instância apontada por m_pIDisplay é liberada

automaticamente!

Page 77: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDisplay: Exemplo

...

IDisplay * display = pMe->m_pIDisplay;

IDISPLAY_DrawText(display,

AEE_FONT_BOLD, szText,

-1, 0, 0, NULL,

IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);

IDISPLAY_Update(pMe->m_pIDisplay);

...

Acesso à instância da estrutura

Realização da operaçãoAtualização da

tela

Neste caso não é preciso chamar IDISPLAY_Release()!!

Page 78: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Exercício 1

• Alterar o código do Exemplo1 para que imprima na tela a tecla numérica pressionada pelo usuário

– O código da tecla é recebido no parâmetro wParam

– A lista de códigos das teclas está no BREW API Reference, seção Key Codes

Page 79: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IGraphics

• Interface para desenhos 2D mais complexos do que os suportados por IDisplay

• Suporta círculos e polígonos arbitrários• Operações de viewport

Page 80: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IGraphics: Funções PrincipaisRGBVAL IGRAPHICS_SetColor(IGraphics * pIGraphics,

uint8 r, uint8 g, uint8 b,uint8 alpha)

– Seta a cor (RGBA) atual dos objetos a serem desenhados

RGBVAL IGRAPHICS_SetBackground( IGraphics * pIGraphics, uint8 r, uint8 g, uint8 b)

– Seta a cor (RGBA) do background

Page 81: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IGraphics: Mais Funções Principais

boolean IGRAPHICS_SetClip(IGraphics * pIGraphics,

AEEClip * pShape, uint8 nFlag)

– Determina a área de clipping. Os formatos de clipping suportados hoje são retângulo, círculo e elipse

int IGRAPHICS_DrawLine(IGraphics * pIGraphics, AEELine * pLine)

– Desenha um segmento de reta entre um ponto inicial e um ponto final

Funções similares:DrawArcDrawCircleDrawEllipseDrawPoint

DrawPieDrawPolygonDrawTriangleDrawRect

Page 82: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IGraphics: Ainda Funções Principais

int IGRAPHICS_ClearRect(IGraphics * pIGraphics,

AEERect * pRect)– Limpa uma área retangular da tela preenchendo com

a cor do background

void IGRAPHICS_Update(IGraphics * pIGraphics)– Indica que as operações de desenho já foram

concluídas e a tela deve ser atualizada

Page 83: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IGraphics: Utilização1. Obtenha uma instância da interface IGraphics através

da função ISHELL_CreateInstance()2. Identifique a área na tela a ser mostrada

• IGRAPHICS_SetViewport()

3. Ajuste a cor do background• IGRAPHICS_SetBackground()

4. Limpe a área do viewport• IGRAPHICS_ClearViewport() pinta com a cor do background

5. Especifique a janela do buffer que será mostrada• IGRAPHICS_Translate()

Page 84: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IGraphics: Mais Utilização6. Ajuste os parâmetros com funções de set

• Cor de preenchimento, região de clipping, modo de pintura, etc

7. Realize a operação de desenho desejada8. Repita os passos 6 e 7 quantas vezes for

necessário9. Atualize a tela com o resultado das

operações• IGRAPHICS_Update()

10. Se não for mais utilizar a interface, libere-a• IGRAPHICS_Release()

Page 85: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IGraphics: ExemploIGraphics * m_pGraphics;

AEERect rect; AEELine line;

...

ISHELL_CreateInstance( app->m_pIShell,

AEECLSID_GRAPHICS,

(void**)( &m_pGraphics ));

IGRAPHICS_SetViewport( m_pGraphics,

&rect,

AEE_GRAPHICS_NONE );

IGRAPHICS_SetColor( m_pGraphics, 0, 0, 0, 0 );

IGRAPHICS_DrawLine( m_pGraphics, &line );

IGRAPHICS_Update( m_pGraphics );

Especifica tamanho e posição. x,y,dx,dy

Recebe endereço do ponteiro para

IGraphics

Atualização da tela

Page 86: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IImage

• Permite mostrar imagens e animações na tela

• Cada instância é associada com uma única imagem BMP

• É possível exibir animações utilizando-se frames em um único BMP

Frame 1 Frame 2 Frame 3

Page 87: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IImage: Funções Principaisvoid IIMAGE_Draw(IImage * pIImage, int x, int y)

– Desenha uma imagem (bitmap) na posição especificada

void IIMAGE_DrawFrame(IImage * pIImage, int nFrame, int x, int y)

– Desenha um frame contido na imagem na posição especificada

void IIMAGE_SetParm(pImage * pIImage, int nParm, int p1, int p2)

– Seta os valores de vários parâmetros como• Tamanho do bitmap (mostra apenas parte da img na tela)• Número de frames• Taxa de animação

Page 88: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IImage: Mais Funções Principais

void IIMAGE_Start(IImage * pIImage, int x, int y)– Inicia a animação de uma imagem dividida em frames

na posição indicada da tela– O número de frames e velocidade da animação é

ajustada através da função IIMAGE_SetParm()

void IIMAGE_Stop(IImage * pIImage)– Pára a animação iniciada por IIMAGE_Start()

Page 89: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IImage: Utilização1. Obtenha uma instância da interface que

contenha o BMP a ser mostrado• ISHELL_LoadResImage(), caso a imagem esteja no

arquivo de recursos• ISHELL_LoadImage(), para ler diretamente do

arquivo2. Desenhe a imagem na tela

• IIMAGE_Draw(), sem animação• IIMAGE_Start() e IIMAGE_Stop(), com animação

3. Libere a interface• IIMAGE_Release()

Page 90: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IImage: ExemploIImage * pImage;

pImage = ISHELL_LoadResImage(.....);

IIMAGE_Draw(pIMage,x,y);

IImage * pImage;

pImage = ISHELL_LoadResImage(.....);

IIMAGE_SetParm( pImage,IPARM_CXFRAME,cxFrame,0 );

IIMAGE_Start(pImage,10,10);

IIMAGE_Stop(pImage);

Cria a interface e carrega a imagem do arquivo de recursos

Desenha a imagem

Imagem simples

Com animação Separa a imagem em frames de largura

“cxFrame”

Inicia a animação

Pára a animação

Page 91: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Inserindo Imagens no Arquivo de Recursos

• Prática...

Page 92: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Exercício 2

• Altere o código do exercício 2 para que os números apresentados na tela sejam imagens

– Utilize a função ISHELL_LoadResImage() para carregar a imagem

– Não esqueça de liberar a imagem no final! IIMAGE_Release()

– A função IIMAGE_SetParm() permite indicar o número de frames de uma imagem

Page 93: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Dialogs e Controls

• Controls são componentes de entrada e saída– Menus, text boxes, listas, controle de teclas, etc.

• Dialogs são frames que contêm controls• Dialogs podem ser criados de duas formas

– Via BREW Resource Editor (fazendo parte do BRI)– Construídos programaticamente no código da

aplicação• Interfaces: IDialog e IControl

Page 94: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDialog

• Permite o acesso a controls• Possui dois métodos principais

– IDIALOG_GetControl()• Obtém um ponteiro para componentes de menu,

texto, data ou tempo pertencentes ao dialog– IDIALOG_SetFocus()

• Determina o control que receberá o foco para entrada do usuário

Page 95: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IControl

• Interface abstrata implementada por todos os controls BREW

• Exemplos de controls– IDateCtl: campo de data– IMenuCtl: componente de menu– ITextCtl: entrada de texto– ITimeCtl: campo de hora

Page 96: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Criando Dialogs e Controls com o Resource Editor

• O BREW Resource Editor suporta a criação e configuração de dialogs e diversos controls

ID e nome do recurso

Posição na tela e tamanho

Flags que determinam a aparência do

dialog

ID do control que receberá o

foco inicial

Tipos de controls suportados

Page 97: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Tipos de Controls

Page 98: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Exercício 3

• Crie um menu com dois itens no BREW Resource Editor e apresente na tela no início da aplicação– Dica 1: Para que o dialog seja reconhecido pelo

ambiente é necessário tratar os eventos (pelo menos retornar TRUE)

• EVT_DIALOG_START• EVT_DIALOG_INIT• EVT_DIALOG_END

– Dica 2: Para que o componente apareça inicialmente é preciso chamar IDIALOG_Redraw()

Page 99: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW

Recursos de Som

Page 100: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISound

• Fornece serviços básicos de som– Bips, ring tones, vibração

• Permite ajuste de volume• Pode encapsular um conjunto de tones

que podem ser tocados por um período contínuo

• Tones possuem formato WAV e são referenciados por IDs únicos

Page 101: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISound: Funções Principaisvoid ISOUND_RegisterNotify(ISound * pISound, PFNSOUNDSTATUS pfn, const void * pUser)

– Registra a função de callback para notificações

int ISOUND_Set(ISound * pISound, const AEESoundInfo * pSoundInfo)

– Permite ajustar os atributos do dispositivo– Device, Method, Ear-piece Mute Control e Microphone Mute Control

void ISOUND_SetVolume(ISound * pISound, uint16 wVolume)

– Ajusta o volume a ser usado

Page 102: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISound: Mais Funções Principais

void ISOUND_PlayTone(ISound * pISound, AEESoundToneData toneData)

– Toca um tone por um determinado período de tempo

void ISOUND_StopTone(ISound * pISound)– Para a reprodução do tone corrente ou finaliza o playback de

uma lista de tones

void ISOUND_Vibrate(ISound * pISound, uint16 w6Duration)

– Ativa a vibração do dispositivo– A chamada a esta função no emulador reproduz um som

característico

Page 103: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISound: Utilização1. Crie uma instância de ISound

• ISHELL_CreateInstance() • ClassID: AEECLSID_SOUND

2. Registre a função de callback• ISOUND_RegisterNotify()• Caso não queira notificações

• ISOUND_RegisterNotify(pISound, NULL, NULL)

3. Ajuste os parâmetros• ISOUND_Set()

4. Reproduza sons ou vibrações• ISOUND_Play() ou ISOUND_Vibrate()

Page 104: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISound: ExemploISound * pISound;

AEESoundInfo sInfo;

AEESoundToneData tone;

ISHELL_CreateInstance(pMe->pIShell, AEECLSID_SOUND, &pISound);

ISOUND_RegisterNotify(pMe->pISound, NULL, NULL);

...

sInfo.eDevice = AEE_SOUND_DEVICE_CURRENT;

sInfo.eMethod = AEE_SOUND_METHOD_RING;

tone.eTone = AEE_TONE_1;

tone.wDuration = 100;

ISOUND_Set(pMe->pISound, &sInfo);

ISOUND_PlayTone(pMe->pISound, tone);

Page 105: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISoundPlayer

• Provê serviços de áudio multimídia– MIDI, MP3 e QCP (Qualcomm PureVoice)

• Possui controles de playback avançados– Pause, resume, rewind, forward

• Pode reproduzir sons carregados na memória ou diretamente de arquivos

Playback só é possível para sons alocados em buffer na memória!

Page 106: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISoundPlayer: Funções Principais

void ISOUNDPLAYER_RegisterNotify( ISoundPlayer * pISoundPlayer, PFNSOUNDPLAYERSTATUS pfn, void * pUser)

– Registra a função de callback para receber eventos de status

int ISOUNDPLAYER_SetInfo(ISoundPlayer * pISoundPlayer, AEESoundPlayerInfo * pInfo)

– Permite indicar a fonte de áudio (arquivo/buffer)

void ISOUNDPLAYER_Play(ISoundPlayer * pISoundPlayer)– Reproduz um áudio MP3, MIDI ou QCP indicado por

uma chamada a ISOUNDPLAYER_Set()

Page 107: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISoundPlayer: Mais Funções Principais

void ISOUNDPLAYER_Stop(ISoundPlayer * pISoundPlayer)– Envia um comando para parar o playback atual

void ISOUNDPLAYER_Rewind(ISoundPlayer * pISoundPlayer, uint32 dwTime)– Realiza o retorno de um determinado período na trilha atual

void ISOUNDPLAYER_Pause(ISoundPlayer * pISoundPlayer)– Faz uma pausa na reprodução

void ISOUNDPLAYER_FastForward( ISoundPlayer * pISoundPlayer, uint32 dwTime)

– Adianta a trilha atual em um determinado período de tempo

Page 108: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISoundPlayer: Utilização1. Crie uma instância de ISoundPlayer

• ISHELL_CreateInstance() • ClassID: AEECLSID_SOUNDPLAYER

2. Registre a função de callback• ISOUNDPLAYER_RegisterNotify()

3. Indique a fonte da mídia• Se arquivo ou buffer• ISOUNDPLAYER_SetInfo()

4. Utilize os controles de playback para reprodução5. Ao final

• Remova o registro da função de callbackISOUNDPLAYER_RegisterNotify(pISoundPlayer, NULL, NULL)

• Pare a reprodução ativa com ISOUNDPLAYER_Stop()

Page 109: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISoundPlayer: ExemploISoundPlayer *pISPlayer;AEESoundPlayerInfo pinfo;AEESoundPlayerInput input;

ISHELL_CreateInstance(pMe->pIShell, AEECLSID_SOUNDPLAYER, &pISPlayer);ISOUND_RegisterNotify(pISPlayer, NULL, NULL);

pinfo.eInput = SDT_FILE;pinfo.pData = "piano.mp3";

ISOUNDPLAYER_SetInfo(pMe->pISPlayer, &pinfo);ISOUNDPLAYER_Play(pMe->pISPlayer);...

ISOUNDPLAYER_Stop(pMe->pISPlayer);

Page 110: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Exercício 4

• Crie uma aplicação que, ao se pressionar as teclas numéricas, realize as seguintes operações

Tecla Operação1 Tocar um tone qualquer por

200ms2 Iniciar a reprodução do mp3

“piano.mp3”3 Iniciar a reprodução do midi

“canyon.mid”4 Parar a reprodução atual

Page 111: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IMedia (BREW 2.0)

• Interface abstrata que define os serviços básicos de todos os objetos multimídia em BREW– IMediaMIDI, IMediaMP3, ...

• Objetos multimídia podem conter combinações de audio, vídeo e texto

• IMedia oferece suporte para playback e gravação como seek, stop, pause e resume

Page 112: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IMedia: Máquina de Estados

• Máquina de estados básica

Page 113: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IMedia Formats

• As seguintes interfaces derivam de IMedia– IMediaMIDI: toca o formato MIDI padrão– IMediaMIDIOutMsg: toca mensagens MIDI– IMediaMIDIOutQCP: toca arquivos QCP

(PureVoice) usando o dispositivo MIDI– IMediaMP3: toca o formato MP3– IMediaQCP: toca e grava o formato QCP– IMediaPMD: toca o formato PMD que inclui

áudio e vídeo sincronizados

Page 114: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW

Arquivos

Page 115: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Sistemas de Arquivos• Dispositivos móveis não contêm sistemas de

arquivos convencionais e sim EFSs• Não existe o conceito de drive

– Não se pode especificar o drive no path– Isto vale também para o emulador

• Arquivos são abertos a partir do diretório do módulo

• O número máximo de arquivos a serem criados e o espaço ocupado podem ser restringidos no MIF– “Max Files” e “Max Space”

Page 116: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IFile

• Permite ler e modificar o conteúdo de arquivos

• Instâncias de IFile são retornadas pela função IFILEMGR_OpenFile()

• Para modificação do conteúdo a aplicação precisa ter os privilégios “File” ou “All”

Page 117: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IFile: Funções Principaisint IFILE_GetInfo(IFile * pIFile, FileInfo * pInfo)

– Obtém informações como data de criação, tamanho, nome e atributos do arquivo

int32 IFILE_Read(IFile * pIFile, void * pBuffer, uint32 dwCount)

– Lê um determinado número de bytes de um arquivo aberto

uint32 IFILE_Write (IFile * pIFile, PACKED const void * pBuffer, uint32 dwCount)

– Escreve uma determinada quantidade de bytes em um arquivo

Page 118: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IFile: Utilização

1. Para criar instâncias de IFile• IFILEMGR_OpenFile(), pode abrir ou criar um arquivo• Retorna um ponteiro para IFile

2. Se necessário, posicione o cursor para leitura ou escrita• IFILE_Seek()

3. Leia ou escreva• IFILE_Read ou IFILE_Write()

4. Quando completar a operação feche o arquivo• IFILE_Release()

Page 119: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IFileMgr

• Possibilita a criação, remoção e renomeação de arquivos e diretórios

• Lembrar que– Nomes de arquivos e diretórios em BREW

não são case sensitive– O tamanho máximo do path no dispositivo é

64• No emulador é 256

Page 120: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IFileMgr: Funções PrincipaisIFile * IFILEMGR_OpenFile(IFileMgr * pIFileMgr, const char * pszFile, OpenFile mode)

– Abre arquivos em um determinado modo (leitura/escrita)

int IFILEMGR_MkDir(IFileMgr * pIFileMgr, const char * pszDir)

– Permite a criação de diretórios no sistema de arquivos

int IFILEMGR_RmDir(IFileMgr * pIFileMgr, const char * pszDir)– Remove um determinao diretório

Page 121: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IFileMgr: Mais Funções Principais

int IFILEMGR_Rename(IFileMgr * pIFileMgr, const char * pszSrc, const char * pszDest)

– Renomeia um arquivo

int IFILEMGR_Remove(IFileMgr * pIFileMgr, const char * pszName)

– Remove um dado arquivo do sistema

int IFILEMGR_Test(IFileMgr * pIFileMgr, const char * pszName)

– Testa se o arquivo ou diretório existe

Page 122: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Arquivos: ExemploIFileMgr * pIFileMgr;

if (ISHELL_CreateInstance(pIShell, AEECLSID_FILEMGR,

(void **)&pIFileMgr) == SUCCESS) {

IFile * pIFile;

if (IFILEMGR_Test(pIFileMgr, "arquivo.txt") != SUCCESS) {

pIFile = IFILEMGR_OpenFile(pIFileMgr,

"arquivo.txt",

_OFM_CREATE);

} else {

pIFile = IFILEMGR_OpenFile(pIFileMgr,

"arquivo.txt",

_OFM_APPEND);

}

...

Page 123: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Arquivos: Exemplo ...

if (pIFile != NULL) {

char timestamp[30];

SPRINTF(timestamp, “seu texto");

IFILE_Write(pIFile, timestamp, STRLEN(timestamp));

IFILE_Write(pIFile, "\r\n", 2);

IFILE_Release(pIFile);

}

IFILEMGR_Release(pIFileMgr);

}

Page 124: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Exercício 5

• Escreva uma aplicação que registra um log das teclas numéricas e direcionais pressionadas pelo usuário durante sua utilização

– Não esqueça de liberar o arquivo antes de sair da aplicação!

Page 125: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDBMgr

• Possibilita a criação, abertura e remoção de bases de dados

• A aplicação precisa ter os privilégios “File” ou “All” para ter acesso às funcionalidades de Banco de Dados

• Após a abertura, usa-se as funções da interface IDatabase para criar e recuperar registros e IDBRecord para atualizar os campos individuais

Page 126: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDBMgr: Funções Principais• IDatabase * IDBMgr_OpenDatabase ( IDBMgr *

pIDBMgr, const char * fileName,boolean bCreate)– Abre um banco de dados. – TRUE, indica que vai ser criada, caso não exista

• int IDBMgr_Remove(IDBMgr * pIDBMgr, const char * fileName)– Remove o banco especificado por fileName– O banco especificado deve ter sido liberado através de

IDatabase_Release() antes de ser removido.– Retorna código de erro, caso o banco não seja encontrado

Page 127: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDatabase

• Representa a base de dados. Possui métodos para adicionar e remover registros, bem como navegar pelos registros.

Page 128: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDatabase: Funções Principais• void IDATABASE_Reset(IDatabase * pIDatabase)

– Traz o ponteiro da base para a primeira posição

• IDBRecord * IDATABASE_CreateRecord( IDatabase * pIDatabase, AEEDBField * fields, int nFields )– Cria um registro na base, contendo os campos indicados por

fields – nFields : Número de campos no registro

• IDBRecord * IDATABASE_GetNextRecord(IDatabase * pIDatabase)– Retorna o próximo registro da base

Page 129: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDatabase: Mais funções• IDBRecord * IDATABASE_GetRecordByID ( IDatabase * pIDatabase, uint16 id )– Retorna o registro que contém o id especificado no

parâmetro• uint32 IDATABASE_GetRecordCount(IDatabase * pIDatabase)– Retorna a quantidade de registros presentes na

tabela

Page 130: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDatabase: Criando a base e adicionando registros

IDBMgr pDBMgr;

IDBMgr pDB;

ISHELL_CreateInstance(m_pIShell, AEECLSID_DBMGR, &pDBMgr);

pDB = IDBMGR_OpenDatabase(pMe->pDBMgr, "DBALUNO", TRUE);

// adiciona os alunos

addRecord(pDB, 3, "Marcos");

addRecord(pDB, 5, "Janaína");

// libera o banco

IDATABASE_Release(pDB);

// libera o DBMgr

IDBMGR_Release(pDBMgr);

Page 131: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDatabase: Adição de registrosvoid addRecord(IDatabase* pDB, uint16 id, char* name) {

AECHAR cName[512];

STRTOWSTR(name, cName, sizeof(cName));

AEEDBField fields[2];

fields[0].fName = AEEDBFIELD_PREF_ID;

fields[0].fType = AEEDB_FT_WORD;

fields[0].pBuffer = &id;

fields[0].wDataLen = sizeof(uint16);

fields[1].fName = AEEDBFIELD_FULLNAME;

fields[1].fType = AEEDB_FT_STRING;

fields[1].pBuffer = cName;

fields[1].wDataLen = WSTRLEN(cName) * sizeof(AECHAR);

// grava a entrada no banco

IDATABASE_CreateRecord(pDB, fields, 2);

}

Page 132: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDatabase: Imprimindo todosvoid imprimirTodos() {

IDBRecord* rec;

AEEDBField field;

pDB = IDBMGR_OpenDatabase(pMe->pDBMgr, "DBALUNO", FALSE);

IDATABASE_Reset(pDB);

rec = IDATABASE_GetNextRecord(pDB);

while (rec) {

// os dados do campo ficam registrados em field.pBuffer

IDBRECORD_NextField(rec, &field.fName, &field.wDataLen);

field.pBuffer = IDBRECORD_GetField(rec, &field.fName,

&field.fType, &field.wDataLen);

DBGPRINTF("Aluno (%s): ", field.pBuffer);

rec = IDATABASE_GetNextRecord(pDB);

}

}

Page 133: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

IDatabase: Utilização1. Obter uma instancia através de

IDBMGR_OpenDataBaseTRUE indica que a base irá ser criada

2. Traz o ponteiro para o primeiro registroIDATABASE_Reset()

3. Ler os registros através de IDATABASE_GetNextRecord

4. Escrever através de IDATABASE_CreateRecordUsar IDBRecord

AEEDBField

5. Liberar a base de dadosIDATABASE_Release

Page 134: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW

Rede

Page 135: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Suporte a Rede em BREW

• O ambiente BREW fornece a infraestrutura básica para comunicação via rede– Conexão com Sockets– Segurança com SSL

• Interfaces– INetMgr: gerenciamento de rede– ISocket: manipulação de sockets– ISSL: segurança

Page 136: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

INetMgr

• Fornece mecanismos acessar o subsistema de rede do dispositivo– Obtenção de IP remoto e local– Status da conexão PPP– Ajuste de parâmetros da conexão

• Dá suporte a criação de sockets para transmissão de pacotes TCP e UDP

Page 137: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISocket

• Permite conectar, transmitir e receber dados através de conexões UDP e TCP

• A aplicação precisa de privilégio de “Network” ou “All”

Lembre que BREW não tem suporte a threads!Chamadas de bloqueio são implementadas com um abordagem de notificação via callbacks

Page 138: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISocket: Algumas Funçõesint ISOCKET_Connect(ISocket * pISocket, INAddr a, INPort wPort, PFNCONNECTCB pfn, void * pUser)

– Tenta iniciar uma conexão TCP com o endereço especificado para sockets do tipo AEE_SOCK_STREAM

– Para sockets do tipo AEE_SOCK_DGRAM o endereço é associado ao socket para escritas subseqüentes

int32 ISOCKET_Read(ISocket * pISocket, byte * pbDest, uint16 wSize)

– Lê dados de um socket para um buffer local

int32 ISOCKET_Write(ISocket * pISocket, byte * pBuffer, uint16 wBytes)

– Escreve dados em um socket conectado

Page 139: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISocket: Mais Algumas Funçõesvoid ISOCKET_Writeable(ISocket * pISocket, PFNNOTIFY pfn, void * pUser)

– Permite registrar uma função de callback quando uma operação de escrita não bloqueante estiver sendo realizada

void ISOCKET_Readable(ISocket * pISocket, PFNNOTIFY pfn, void * pUser)

– Permite registrar uma função de callback quando uma operação de leitura não bloqueante (Read, ReadV, RecvFrom) estiver sendo realizada

Page 140: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISocket: Abrindo um socket

struct _CSocketsApplet { ... INetMgr * m_pINetMgr; ISocket * m_pISocket; AEECallback m_cb; // Callback para DNS AEEDNSResult m_dnsr; // Info do DNS} SocketsApplet;

...static void StartConection(SocketsApplet * pApp) { pApp->m_pISocket = INETMGR_OpenSocket(pApp->m_pINetMgr, AEE_SOCK_STREAM); CALLBACK_Init(&pApp->m_cb, TCPDNSConnect, pApp); INETMGR_GetHostByName(pApp->m_pINetMgr,&pApp->m_dnsr, “www.host.com”,&pApp->m_cb);}

• Conectando um socket através de um DNS

Page 141: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISocket: Conectandostatic void TCPDNSConnect(void * pApp) { int nErr = pApp ->m_dnsr.nResult; if (nErr > AEEDNSMAXADDRS) { // Falha no lookup ReleaseSocket(pApp); return; }

nErr = ISOCKET_Connect(pApp->m_pISocket, //socket pApp->m_dnsr.addrs[0],//endereco 0x700, //porta TCPConnected, //callback pApp);

if (nErr != AEE_NET_SUCCESS) { // Falha na conexao ReleaseSocket(pApp); } else { // conectando... }}

Page 142: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISocket: Conectadostatic void TCPConnected(void *pApp, int nErr) {

if ((nErr == AEE_NET_SUCCESS) || (nErr == AEE_NET_EISCONN)) { //Socket conectado! //Pode escrever... } else { // Falha na conexao ReleaseSocket(pApp); }}

Page 143: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISocket: Exemplo: Escrevendo um array de bytes

void WriteSocket(void *pApp) { char *psz = NULL; int cbWrite, rv; ...

// pszData e’ um ponteiro para os dados a serem escritos psz = pszData; cbWrite = STRLEN(pszData);

while (cbWrite > 0) { rv = ISOCKET_Write(pApp ->m_pISocket, (byte *)psz, (uint16)cbWrite); ...

Page 144: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISocket: Exemplo: Escrevendo um array de bytes

... // se nenhum byte foi escrito com sucesso if (rv == AEE_NET_WOULDBLOCK) { // regista a funcao de callback para tentar depois ISOCKET_Writeable(pApp ->m_pISocket, WriteSocket, (void*) pApp); return; } else if (rv == AEE_NET_ERROR) {// erro de escrita ReleaseSocket(pApp); return; } // se escreveu uma parte, continua o loop cbWrite -= rv; psz += rv; }}

Page 145: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

ISSL

• Fornece segurança SSL/TLS para conexões de rede

• Usada em conjunto com a interface ISocket

• Combinada com http, possibilita https na interface IWeb

Page 146: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

BREW

Extensão da API

Page 147: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

API Extensível

• O ambiente BREW permite que a API seja estendida com novas funcionalidades

• Similar ao desenvolvimento de aplicações• A extensão precisa expor a tabela de funções

virtuais para classes externas• É necessário

– Declarar as interfaces– Definir as classes– Implementar as funções

Page 148: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Declarando Interfaces

• Vamos definir uma extensão “Hello” que define uma função para mostrar uma mensagem na tela

• Chamaremos nossa interface de IHelloCls• Para declaração da interface utiliza-se a

macro QINTERFACE()QINTERFACE(IHelloCls){INHERIT_IBASE(IHelloCls)int (*DrawHello)(IHelloCls * po, AEEPoint ptXYOffset);};

Page 149: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Macros de Acesso• As seguintes macros de acesso a tabela virtual são

definidas

• Duas funções extras são expostas– AddRef() e Release()– Derivadas da interface IBase através da macro

INHERIT_IBASE() • Use INHERIT_XXX onde XXX é o nome da interface a ser estendida

• A macro GET_PVTBL é utilizada para acessar a tabela via ponteiros

#define IHELLOCLS_AddRef(p) \GET_PVTBL(p,IHelloCls)->AddRef(p)#define IHELLOCLS_Release(p) \GET_PVTBL(p,IHelloCls)->Release(p)#define IHELLOCLS_DrawHello(p,ptC) \GET_PVTBL(p,IHelloCls)->DrawHello(p,ptC)

Page 150: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Equivalente C++

• O método anterior equivale a seguinte declaração C++

• Por limitações no compilador ARM, não é possível declarações deste tipo

class IHelloCls : public IBase{int DrawHello(IHelloCls * po, AEEPoint ptXYOffset);}

Page 151: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Definindo Classes

• Após a definição da interface, é necessária sua implementaçãotypedef struct _HelloCls{DECLARE_VTBL(IHelloCls)

// Variaveis da classeUint32 m_nRefs;// Referencias pra mimIShell *m_pIShell;// copia do ponteiro para o shellIDisplay *m_pIDisplay;// ponteiro para o displayIModule *m_pIModule;// ponteiro para o modulo} HelloCls;

Declaração da tabela.Ponteiros para funções no

início da estrutura

Page 152: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Implementando as Funções

• As funções são implementadas normalmente como funções C

• As funções AddRef() e Release() são responsáveis pela contagem de referências e limpeza da memória

• DrawHello() realiza a funcionalidade da extensão• Uma função adicional é necessária em

extensões da API– AEEClsCreateInstance()

Page 153: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

AEEClsCreateInstance()

• Função responsável por criar uma instância da classe

• Precisa chamar uma operação new específica da classe a ser definida pelo programador

• Supondo que nossa operação new tem o nome HelloCls_New, ela deveria possuir a seguinte assinatura: int HelloCls_New(int16 nSize, IShell *pIShell, IModule* pIModule, IModule ** ppMod);

Page 154: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Operação New

• A função new deve realizar as seguintes operações– Alocação de memória– Inicialização da tabela virtual– Inicialização dos membros de classe– Incialização de outros códigos

• O retorno da função indica se a operação foi realizada com sucesso

Page 155: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Alocação de Memória

• A área de memória para a classe precisa ser alocadaVTBL(IHelloCls) * modFuncs; //tabela virtual

if(!ppMod || !pIShell || !pIModule)

return EFAILED;

*ppMod = NULL;

if(nSize < sizeof(HelloCls))

nSize += sizeof(HelloCls);

//alocacao de memoria para o objeto HelloCls

if((pMe = (HelloCls *) MALLOC(nSize +

sizeof(VTBL(IHellCls)))) == NULL )

return ENOMEMORY;

Page 156: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Inicialização da Tabela

• Após a alocação, a tabela precisa apontar para as funções corretasmodFuncs = (IHelloClsVtbl *)((byte *)pMe + nSize);

//inicializa as entradas individuais na VTBL

modFuncs->AddRef = HelloCls_AddRef;

modFuncs->Release = HelloCls_Release;

modFuncs->DrawHello = HelloCls_DrawHello;

// inicializa a tabela

INIT_VTBL(pMe, IModule, *modFuncs);

Page 157: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Inicialização dos Membros de Classe

• Após a inicialização da tabela, realiza-se a inicialização dos membros de classe

• Note que o número de referências é iniciado com o valor 1

pMe->m_nRefs = 1;

pMe->m_pIShell = pIShell;

pMe->m_pIModule = pIModule;

Page 158: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Outras Inicializações

• Toda classe precisa incrementar o contador de referências para ISHELL e IMODULEISHELL_AddRef(pIShell);

IMODULE_AddRef(pIModule);

//acesso a IDisplay

if(ISHELL_CreateInstance(pIShell, AEECLSID_DISPLAY,

(void **)&pMe->m_pIDisplay) = SUCCESS)

return EFAILED;

// coloca o ponteiro no parametro

*ppMod = (IModule*)pMe;

return AEE_SUCCESS;

Page 159: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Utilização da Extensão

• Após os passos anteriores, outras aplicações podem criar instâncias da extensão chamando ISHELL_CreateInstance()if((ISHELL_CreateInstance(pMe->m_pIShell,

AEECLSID_HELLO_CLS,

(void **)&pHelloCls))!=SUCCESS)

return FALSE;

IHELLOCLS_DrawHello(pHelloCls,ptHello);

IDISPLAY_Update(pMe->m_pIDisplay);

IHELLOCLS_Release(pHelloCls);

Page 160: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Acesso a ExtensõesApplet

Macros

IHELLOCLS_AddRef

IHELLOCLS_Release

IHELLOCLS_DrawHello

IHelloCls VTBLAddRef

Release

DrawHello

HelloCls_AddRef(){}

HelloCls_Release(){}

HelloCls_DrawHello() {}

Page 161: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

Referências

1. BREW SDKTM User’s Guide2. BREW SDKTM API Reference3. BREW Online Help4. http://brew.qualcomm.com5. Murray Bonner. What is BREW?

Disponível em http://www.developer.com/ws/brew/article.php/1454711

Page 162: Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:

<Título>• Itens