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
Embed
Surgimento Qualcomm –Fundada em 1985 –San Diego, Califórnia USA –Localização por satélite – OmniTracs –CDMA: dispositivos e estações base –Eudora! Ano:
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
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
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
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
• 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
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
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
O Modelo de Negócios BREW
Fonte: http://brew.qualcomm.com
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
Tecnologia: BREW no Celular
ASIC: Application Specific Integrated CircuitFonte: http://brew.qualcomm.com
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
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...”
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
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”
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
• É 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
• 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
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
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
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
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()
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!
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,
• 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
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
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())
Nosso Alô Mundo!1. Abra o projeto HelloWorld criado anteriormente 2. Abra o arquivo MainApplet.cpp3. Vamos analisar
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
• 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
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
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
IDatabase
• Representa a base de dados. Possui métodos para adicionar e remover registros, bem como navegar pelos registros.
• 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
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
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
BREW
Rede
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
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
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
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
... // 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; }}
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
BREW
Extensão da API
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
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
• 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);}
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
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()
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);
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
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;
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);
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;
Outras Inicializações
• Toda classe precisa incrementar o contador de referências para ISHELL e IMODULEISHELL_AddRef(pIShell);
• 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);
Acesso a ExtensõesApplet
Macros
IHELLOCLS_AddRef
IHELLOCLS_Release
IHELLOCLS_DrawHello
IHelloCls VTBLAddRef
Release
DrawHello
HelloCls_AddRef(){}
HelloCls_Release(){}
HelloCls_DrawHello() {}
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