×
Namespaces

Variants
Actions

Como utilizar conexões via USB em JavaME

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Exemplo de código
Código fonte: Media:USBTest.zip

Compatibilidade
Plataforma(s):
Symbian
S60 5th Edition

Artigo
Tradução:
Por thiagobrunoms
Última alteração feita por lpvalente em 10 Nov 2013

Contents

Introdução

Template:Artigo

Como criar conexões do tipo CommConnection

Após a criação do documento do Fórum Nokia tem havido mudanças na forma como a conexão entre o dispositivo e o PC é realizada. Nos modelos mais antigos, conexões do tipo CommConnection eram criadas como segue:

//Abre uma conexão na porta "com0".
CommConnection comm = (CommConnection)Connector.open("comm:com0");

Nos dispositivos mais novos, a conexão é aberta como segue:

//Abre uma conexão na porta "USB2". Define a interface como USB
CommConnection comm = (CommConnection)Connector.open("comm:USB2");

A MIDlet de exemplo foi testada no dispositivo Nokia N97, cujo modelo é basasdo em S60 5a edição. Podem existir diferenças nos nomes de porta em diferentes dispositivos. As portas podem ser consultados como segue:

String ports = System.getProperty("microedition.commports");

No caso do dispositivo N97 a propriedade do sistema retorna uma longa lista de conexões COM, IR, portas USB e BT. Há duas portas USB: USB1 e USB2. Se USB1 está sendo utilizada através do método Connector.open(), uma exceção IOException é lançada com a mensagem "acesso negado". A conexão pode ser aberta com êxito quando utilizada USB2. Note também que se alguma porta está em uso em outras aplicações no dispositivo, não se pode realizar conexões através de CommConnection, embora esteja listado pela propriedade da aplicação.

Instruções Básicas

Seguem algumas instruções para a realização de conexões CommConnection entre um dispositivo Nokia 97 e um PC.

  • Para testes simples, utilize um terminal através da linha de comando.
  • Conecte seu dispositivo N97 via USB com o PC.
    • Selecione "PC Suite" como o modo USB.
  • Inicialize o terminal e crie uma nova aplicação
    • Altere o campo "Conectar usando: " para obter a porta COM correta (neste caso COM5 foi utilizada)
    • A porta correta pode ser encontrada no Windows através dos seguintes passos: Painéis de Controle -> Sistema -> Gerenciador de Dispositivo -> Portas (COM & LPT)
    • Não existe necessidade de alterar as configurações de porta -> conexão é realizada entre o PC e o dispositivo


Connection creation in HyperTerminal Selecting the correct COM port in HyperTerminal

  • Instale a MIDlet USBTest no dispositivo e inicialize-a
    • Quando a MIDlet é inicializada, automaticamente abre a conexão com o PC
    • Você deve observar a mensagem "Hello from USBTest MIDlet! Anybody there at USB?" na tela do terminal
    • Selecione o comando "Start" para inicializar a espera por conexões na porta USB
  • Agora escreve algum texto na janela do terminal e pressione Enter
    • A mensagem deve aparecer na tela do dispositivo


Message from the phone has arrived and response has been sent

USBTest MIDlet

A MIDlet USBTest apresenta como uma MIDlet pode enviar e receber dados entre um dispositivo e um PC utilizando a porta USB através da conexão do tipo CommConnection. O projeto completo do NetBeans com a MIDlet e os arquivos jar e jad além do código-fonte estão disponíveis abaixo. Os dois métodos mais importantes também são apresentados abaixo. O método openUSBConnection() abre uma conexão do tipo CommConnection para o PC e o método listenUSB() recebe os dados da conexão.

A imagem abaixo apresnta uma tela da MIDlet no dispositivo Nokia N97 após receber uma mensagem do PC.


USBTest MIDlet running in Nokia N97


Source code: openUSBConnection() method in USBTest.java

/**
* Este método verifica através da propriedade do sistema "microedition.commports", que
* existe uma porta USB no dispositivo. Se encontrado, uma conexão CommConnection é aberta
* para o dispositivo remoto (PC) utilizando a porta da USB. Uma mensagem é enviada ao dispositivo remoto
* para indicar que a conexão foi estabelecida com sucesso.
*/

public void openUSBConnection() {
try {
String ports = System.getProperty("microedition.commports");
Tracer.outln("got ports="+ports, textbox);
int index = ports.indexOf("USB", 0);
if(index == -1) {
throw new RuntimeException("No USB port found in the device");
}
comm = (CommConnection)Connector.open("comm:USB2");
int orgBaudRate = comm.getBaudRate();
os = comm.openOutputStream();
String text = "Hello from USBTest MIDlet! Anybody there at USB?\r\n";
os.write(text.getBytes());
os.flush();
is = comm.openInputStream();
} catch (IOException e) {
Tracer.outln("IOException: " + e.getMessage(), textbox);
return;
}
}

Source code: listenUSB() method in USBTest.java

/**
* Este método obtém dados de tráfego numa conexão ComConnection. Quando uma mensagem (uma linha de texto
* com um caracter de final delinha) é recebida, a mensagem é mostrada num componente TextBox.
* Se a mensagem é um "EXIT + tecla enter", a stream e a conexão são fechadas
*/

public void listenUSB() {
Tracer.outln("Listening USB port...", textbox);
try {
byte[] buffer = new byte[500];
StringBuffer message = new StringBuffer();
for(int i = 0; i < 500;) {
try {
Thread.sleep(10);
}
catch(InterruptedException ie) { }
int available = is.available();
if(available == 0) {
continue;
}
String outText = "";
int count = is.read(buffer, i, available);
if(count > 0) {
outText = new String(buffer, i, count);
i = i + count;
message.append(outText);
if (outText.endsWith("\n")) {
String messageString = message.toString();
Tracer.outln("Message: " + messageString, textbox);
message.delete(0, message.length());
}
}
String total = new String(buffer,0,i);
if ((i > 3) && (-1 != total.indexOf("EXIT\r\n"))) {
Tracer.outln("Closing...", textbox);
break;
}
}
os.close();
is.close();
comm.close();
}
catch (IOException ioe) {
Tracer.outln("IOException: " + ioe.getMessage(), textbox);
}
Tracer.outln("SUCCEEDED.", textbox);
}

Aplicação Exemplo

Veja também

This page was last modified on 10 November 2013, at 01:51.
125 page views in the last 30 days.