eae galera, seguinte, to precisando usar o modulo TC65 da siemens para me comunicar com um dispositivo com baudrate 9600, para isso eu estou usando o código abaixo:
public ComandoAT atc;
public InputStream in;
public OutputStream out;
CommConnection con;
Arquivo arq;
/**
* Construtor
* Abre conexão com a porta serial
*/
public Teste() {
System.out.println("\nConstrutor");
try {
atc = new ComandoAT(false);
System.out.println("\nTry");
con = (CommConnection) Connector.open("comm:com0;blocking=off;baudrate=9600;autorts=off;autocts=off");
int baudrate = con.getBaudRate();
System.out.println("Baudrate com0: " + baudrate);
out = con.openOutputStream();
in = con.openInputStream();
//in = atc.getDataInputStream();
} catch (IOException e) {
System.out.println(e);
} catch (ATCommandFailedException e) {
System.out.println(e);
}
}
/**
* Método principal da aplicação.
* Primeiro a ser executado quando a aplicação é iniciada.
*/
public void startApp() throws MIDletStateChangeException {
System.out.println("\nstartApp\n");
System.out.println(resposta);
//Seta 8 data bits, sem bit paridade e stop bit 1
resposta = atc.send("AT+ICF=3","ERROR: AT+ICF",false);
System.out.println(resposta);
//Seta controle de fluxo XON/XOFF
resposta = atc.send("AT\\Q0", "ERROR: AT\\Q1", false);
System.out.println(resposta);
//Seta o baudrate para 9600
//resposta = atc.send("AT+IPR=9600", "ERROR: AT+IPR", false);
//System.out.println(resposta);
int rcv = 0;
try {
arq = new Arquivo("file:///a:/teste.txt");
System.out.println("arquivo pronto");
out.write(new String("status").getBytes());
System.out.println("status enviado");
String input = "";
while(rcv != -1){
//if(in.available() > 0){
rcv = in.read();
//rcv++;
if(rcv >= 0){
input = input + (char)rcv;
System.out.println(input);
if((char)rcv == '\r'){
rcv = -1;
}
}
//}
}
System.out.println("escrevendo em arquivo");
arq.esvreverArquivo(input);
System.out.println(arq.lerArquivo());
arq.fecharArquivo();
} catch (IOException e1) {
System.out.println(e1);
}
destroyApp(true);
}
/**
* Método chamado quando a aplicação tem de ser temporariamente pausada.
*/
public void pauseApp() {
System.out.println("\npauseApp()\n");
}
/**
* Método chamado quando a aplicação é finalizada.
* Aqui deve ser destruido tudo que não pode ser levado pelo garbage collector.
*/
public void destroyApp(boolean unconditional) {
System.out.println("\ndestroyApp(" + unconditional + ")\n");
try {
con.close();
in.close();
out.close();
} catch (IOException e) {
System.out.println(e);
}
notifyDestroyed();
}
}[/code]
eu consigo enviar o comando pela serial, mas eu nao recebo nenhuma resposta e quando eu conecto o pc direto pela serial com o dispositivo e mando o mesmo comando eu consigo a resposta
Nunca programei para o TC65, mas estou usando um Motorola G24.
Você desligou o controle de fluxo ao abrir a porta serial (autorts=off;autocts=off),
certifique-se de dasabilitar também o controle de fluxo do dispositivo para o qual você está enviando os comandos.
Não seria AT+IFC=0 ?
O método read() de uma InputStream bloqueia até que chegue dado. Se está travado direto, e nunca saiu de lah (do in.read()),
então pode ser que não tenha chegado nenhum dado, mais um sinal de que pode ser controle de fluxo.
Apenas para reforçar o que o Ricarte Barros disse, relamente o comando read() fica 'preso ’ até que chegue um dado.
Por isso é importante para quem vai mexer com esses módulos, saber mexer bem com threads ou ThreadsPool para liberar o resto do aplicativo.
Abraços
Estou comecando a programar para XT65 o que seria a mesma coisa para TC65.
Estou com uma duvida a respeito de criar um arquivo TXT e nao consigo pois nao acho a API certa.
Vi esse exemplo que vc enviou no forum e é bem o que eu preciso, so nao consigo construir a classe Arquivo.
Estou comecando a programar para XT65 o que seria a mesma coisa para TC65.
Estou com uma duvida a respeito de criar um arquivo TXT e nao consigo pois nao acho a API certa.
Vi esse exemplo que vc enviou no forum e é bem o que eu preciso, so nao consigo construir a classe Arquivo.
Se puder me ajudar fico agradecido!!
Valeu!!
Marco[/quote]
opa cara, seguinte, vou postar aki alguns metodos da minha classe arquivo, deles já da pra tu tirar oq tu precisa e qq coisa eh soh perguntar
estes sao os atributos q tu precisa basicamente
private PrintStream printer; //imprime os caracteres em arquivos
private FileConnection file; //usado para leitura de arquivos
metodo pra criar o arquivo
[code]public Arquivo(String caminho, boolean novo) throws IOException{
this.file = (FileConnection)Connector.open(caminho);
//Cria o arquivo caso ele não exista
if(!this.file.exists()){
this.file.create();
} else if(novo){
this.file.delete();
this.file.create();
}
}[/code]
metodo pra escrever
[code]public void escreverArquivo(String texto) throws IOException{
OutputStream out = this.file.openOutputStream();
String temp = this.lerArquivo();
this.printer = new PrintStream(out);
//Checa se o arquivo já tem algo escrito, caso não, escreve na primeira linha, caso sim, pula uma linha e escreve
if(temp.length() > 0){
this.printer.println(temp + texto);
} else {
this.printer.println(texto);
}
out.close();
}[/code]
Seguinte,
meu equipamento esta recebendo linhas de dados pela serial e criando esse arquivo TXT.
ate ai tudo bem.
Estou querendo que ele pegue essas linhas de informação, inclua os dados GPS e envie por GPRS para um servidor,
e ao mesmo tempo que apague as linhas que foram enviadas.
Conclui-se que o arquivo txt sera atualizado o tempo todo, funcionando como uma pilha (FIFO).
Se caso vc tiver algo que possa me ajudar, um link um tutorial, alguns exemplos ou ate uma
solução melhor fico grato.
Seguinte,
meu equipamento esta recebendo linhas de dados pela serial e criando esse arquivo TXT.
ate ai tudo bem.
Estou querendo que ele pegue essas linhas de informação, inclua os dados GPS e envie por GPRS para um servidor,
e ao mesmo tempo que apague as linhas que foram enviadas.
Conclui-se que o arquivo txt sera atualizado o tempo todo, funcionando como uma pilha (FIFO).
Se caso vc tiver algo que possa me ajudar, um link um tutorial, alguns exemplos ou ate uma
solução melhor fico grato.
Obrigado
Marco[/quote]
dexa eu ver se eu entendi, tu quer usar o arquivo como uma pilha?
Sim,
O meu equipamento recebe pela serial linhas de leitura de tempo em tempo,
assim o equipamento armazena em um txt essas linhas enquanto nao estiver
conectado.
A partir do momento que conectar ele envia essas linhas para um servidor que
por sua vez irá extrair os dados da linha e armazenar em um banco de dados.
as linhas devem ser enviadas na ordem em que chegaram, a primeira que entra
sera a primeira que sai.
E quando enviada a linha ela deve ser apagada do arquivo.
Nao sei se é a melor maneira de se fazer isso, mas estou partindo para esse caminho.
Se tiveres outra alternativa melhor por favor.
[quote=marcobogo]Sim,
O meu equipamento recebe pela serial linhas de leitura de tempo em tempo,
assim o equipamento armazena em um txt essas linhas enquanto nao estiver
conectado.
A partir do momento que conectar ele envia essas linhas para um servidor que
por sua vez irá extrair os dados da linha e armazenar em um banco de dados.
as linhas devem ser enviadas na ordem em que chegaram, a primeira que entra
sera a primeira que sai.
E quando enviada a linha ela deve ser apagada do arquivo.
Nao sei se é a melor maneira de se fazer isso, mas estou partindo para esse caminho.
Se tiveres outra alternativa melhor por favor.
Grato
Marco.[/quote]
nao seria melhor utilizar uma pilha mesmo? Dentro da aplicação, ou não rola?