Você está na página 1de 25

Programando

Bluetooth com J2ME


Prof. MSc. João Ricardo Bittencourt

Jogos Digitais
Programação Multiplataforma
UNISINOS
Sumário
1. O Contexto
2. A Tecnologia
3. A Arquitetura
4. A JSR-82
5. Programando Bluetooth
6. Exemplos
Contexto
 Começou em 1994 pela Ericsson
 A tecnologia Bluetooth é mantida pelo Bluetooth
Special Interest Group (SIG) com mais de 6 mil
membros de diferentes setores:
 Telecomunicações, computação, indústria
automobilística, automação industrial, setor musical,...
 Agere, Ericsson, Intel, Lenovo, Microsoft, Motorola,
Nokia e Toshiba
 Origem do nome: Rei Harald Blatand conhecido
como Harold Bluetooth. Viveu no século X e
unificou facções suíças, norueguesas e
dinamarquesas.
Contexto
 Principal objetivo é interconectar dispositivos
sem fio à curta distância com baixo custo
 Interconexão entre diferentes tipos de
dispositivos
 Celulares, telefones,PDAs, PCs, automóveis,
impressoras, mouse, teclado, câmera digital, fones de
ouvido, hot spots, óculos, jaquetas, consoles de
videogame,MP3 players, tênis, monitor cardíaco, jogos
móveis, bluejacking e redes sociais.
 Surgimento da PAN (Personal Area Network)
Tecnologia
 Usam a faixa ISM (Industrial, Scientific,Medical)
de 2,45Ghz
 Pode dividir esta banda em 79 canais
 Pode sofrer influência do microondas, portão eletrônico,
babá eletrônica, redes 802.11
 Três classes de dispositivos Bluetooth
 Classe 1: até 100m
 Classe 2: até 10m
 Classe 3: até 1m
Tecnologia
 Dois tipos de conexão:
 Asynchronous Connectionless (ACL)
• Tráfego de dados
• Assimétrico: 721Kbps e 57.6Kbps (retorno)
• Simétrico: 432.6 Kbps
 Synchronous Connection Oriented (SCO)
• Suporta 3 canais para transmissão de áudio/voz
• Velocidade de 64Kbps
Arquitetura
 Cada dispositivo possui um endereço fixo e único
(BD_ADDR) de 48 bits
 Comunicação entre um dispositivo mestre
(master) e dispositivos escravos (slaves)
 Uma rede dispositivos BT é chamada de piconet
 Possui um dispositivo master – que inicia um link de
comunicação
 Até 7 dispositivos escravos
 Um slaver pode trocar de papel com o master
 Compartilham o mesmo canal
http://www.tutorial-reports.com/system/files?file=bluetoothscatternetpiconet.gif

Arquitetura
 Várias piconets em uma mesma área formam uma
scatternet
 Dispositivos slavers podem participar de diferentes piconets
 Dispositivo pode ser master em uma piconet e slaver em uma
ou mais piconets

S4
S5 S7
S1
M1
Piconet A S3 M2

S6 Piconet B
S2
Scatternet
Arquitetura
 Utiliza um modelo de pilha de protocolos para
facilitar o desenvolvimento de hardware e
software
 Chamada de Bluetooth Stack
 Protocolos de mais baixo nível (hardware) e de
alto nível (software)
Arquitetura
Arquitetura
 Baseband Link Controller
 Estrutura base de comunicação
 Permite abrir canais de áudio diretamente entre devices
 Link Manager Protocol (LMP)
 Configuração do link entre dispositivos
 Responsável pela segurança – criptografia e
autenticação
 Host Controller Interface (HCI)
 Implementado em software é responsável pela
interconexão das aplicações com hardware
 Equivalem aos drivers de um sistema operacional
Arquitetura
 Logical Link Control and Adaptation Layer (L2CAP)
 Oferece suporte ao tráfego de dados (ACL)
 Não suporta áudio
 Oferece serviço orientado a conexão para protocolos de
alto nível. Troca de mensagens L2CAP
 Service Discovery Protocol (SDP)
 Usado para descobrir dispositivos Bluetooth
 RFCOMM
 Protocolo que simula a porta serial conforme o padrão
RS-232
Arquitetura
 Object Exchange Protocolo (OBEX)
 Definido pelo IrDA (Infrared Data Association)
 Serve para trocar objetos de forma síncrona e
simplificada
 Objetos: vCard, vCalendar
 Outros protocolos
 WAP
 PPP
 TCP/UDP/IP
Arquitetura
 Profiles
 Definições dos protocolos para um
determinado modelo de uso da tecnologia
Bluetooth
 General Profiles
 GAP – Generic Access Profile
• Todos os dispositivos implementam.
 SPP – Serial Port Profile
 SDAP – Service Discover Application Profile
 GOEP – Generic Object Exchange Profile
JSR-82
 Implementação do padrão Bluetooth para
plataforma J2ME (dispositivos com poucos
recursos)
 Permite:
 Registrar serviços
 Descobrir dispositivos e serviços
 Permite conexão RFCOMM, L2CAP e OBEX
 Criar conexões entre dispositivos – enviar e receber
dados
 Não suporta comunicação via voz
 Gerencia e controla a comunicação das conexões
 Oferece serviços de segurança
JSR-82
Programando Bluetooth
1. Configurar o dispositivo Bluetooth
2. Gerenciar o dispositivo
3. Procurar dispositivos
4. Registrar serviços
5. Procurar serviços
6. Efetuar conexão através do RFCOMM
Programando Bluetooth
1. Configurar o dispositivo Bluetooth

Inicializar a pilha Bluetooth

Dispositivos oferecem uma aplicação externa
para configurar a pilha

Bluetooth Control Center (BCC)

No BCC é possível definir:

Nome amigável para o dispositivo (alias)

Se é visível por outros dispositivos

Ligar/desligar o Bluetooth

Se requer autenticação
Programando Bluetooth
2. Gerenciar o dispositivo

As classes LocalDevice e RemoteDevice são
responsáveis em manter as informações
definidas pelo profile GAP

Oferecem informações sobre endereço e nome
dos dispositivos

Além de informar o tipo de device
(DeviceClass) e os tipos de serviços que são
oferecidos
Programando Bluetooth
3. Procurar dispositivos

É necessário obter um agente
(DiscoveryAgent) para buscar os dispositivos
remotos

Pode efetuar as buscas da seguinte forma:

Efetuar uma nova busca

Buscar dispositivos pré-conhecidos

Buscar dispositivos em uma consulta
anterior
Programando Bluetooth
3. Procurar dispositivos

Efetuar uma nova busca
LocalDevice local = LocalDevice.getLocalDevice();
DiscoveryAgent agente = local.getDiscoveryAgent();
agente.startInquiry();

Buscar dispositivos pré-conhecidos
DiscoveryAgent agente = local.getDiscoveryAgent();
RemoteDevices dev[] =
agente.retrieveDevices(DiscoveryAgent.PREKNOWN);

Buscar dispositivos em uma consulta anterior
DiscoveryAgent agente = local.getDiscoveryAgent();
RemoteDevices dev[] =
agente.retrieveDevices(DiscoveryAgent.CACHED);
Programando Bluetooth
4. Registrar serviço
//Servico RFCOMM
String url =
"btspp://localhost:6663366633111;name=TesteBT";
StreamConnectionNotifier servico =
(StreamConnectionNotifier) Connector.open(url);
ServiceRecord sr = local.getRecord(servico);
//Bloqueia ateh criar a conexao
StreamConnection conn =
(StreamConnection) servico.acceptAndOpen();
//faz as operacoes necessarias
//...
//Encerra o servico
servico.close();
Programando Bluetooth
6. Procurar serviços

Localiza os serviços que estão disponíveis nos
dispositivos remotos

São descobertos através do uso do
DeviceListener que deve ser implementada
pela classe que deseja conhecer os serviços

LocalDevice local = LocalDevice.getLocalDevice();


DiscoveryAgent agente = local.getDiscoveryAgent();
//define a priori os parametros da busca
agente.searchServices(attrs,uuids,devices,listener);
Programando Bluetooth
6. Efetuar conexão através do RFCOMM

Dois dispositivos podem compartilhar apenas
uma sessão por vez

O esquema usada na URL: btspp

Uma sessão pode ter mais de 60 conexões
lógicas

Um dispositivo pode ter até 30 serviços ativos
baseados em RFCOMM

Dispositivo suporta um único cliente por vez

Após criar a conexão basicamente é utilizado o
GFC/streams
Links úteis
 Bluetooth SIG
http://www.bluetooth.com
 Sony Ericsson. Developing Applications with Java
APIs for Bluetooth (JSR-82). Janeiro, 2004
 Wireless Application Programing with J2ME and
Bluetooth
http://developers.sun.com/techtopics/mobility/
midp/articles/bluetooth1/
 The Java APIs for Bluetooth Wireless Technology
http://developers.sun.com/techtopics/mobility/
midp/articles/bluetooth2/
 JSR-82 Bluetooth API e OBEX API
 http://java.sun.com/javame/reference/apis/js
r082/index.html