Ir para o conteúdo

Comunicação serial (MS)

A comunicação serial é dividida em algumas partes:

  1. Inicialização da porta serial: Criar um SerialPortManager e definir seus parâmetros (porta e baudrate)
  2. Acesso ao input stream: Ler os dados recebidos da porta serial
  3. Acesso ao output stream: Enviar dados para a porta serial
  4. Processamento de dados e visualização: Manipular e exibir os dados recebidos

Iniciando e configurando o SerialPortManager

A classe SerialPortManager é responsável por gerenciar toda a comunicação serial e integrá-la com seu aplicativo. Crie uma instância do SerialPortManager, com o código a seguir:

1
SerialPortManager spManager = SerialPortManager.getInstances();

Habilitando uma Porta Serial

Para abrir um porta de comunicação serial, use o método SerialPortManager.startSerialPort().

Parâmetros: porta, a codificação dos dados enviados, e uma instância da classe baseReader.

Dica

Cada porta serial pode ter uma implementação diferente de baseReader.

Exemplo:

1
2
3
boolean isAscii = true;
BaseReader baseReader = new BaseReader() {/* Implementação de um baseReader */};
spManager.startSerialPort(SerialEnums.Ports.ttyS0, isAscii, baseReader);

A instanciação da classe baseReader é demonstrada na seção Lendo os dados de entrada serial, abaixo.

Dica

Verifique as portas disponíveis no datasheet do seu Display.


Desabilitando uma Porta Serial

Para fechar (desabilitar) uma porta e comunicação serial previamente aberta, use o método SerialPortManager.stopSerialPort().

Parâmetro: porta.

Exemplo:

1
spManager.stopSerialPort(SerialEnums.Ports.ttyS0);

Enviando dados através da porta serial

Para enviar dados pela porta serial, use o método SerialPortManager.send().

Parâmetros: dados e porta.

O método retorna estes valores:

Valor Descrição
0 O nome da porta serial está vazio
1 A mensagem a ser enviada está vazia
2 Enviado com sucesso
3 A porta solicitada não está aberta
1
int result = spManager.send("Mensagem de Teste", SerialEnums.Ports.ttyS0);

Lendo os dados de entrada serial

Para ler os dados recebidos da porta serial, crie um objeto da classe BaseReader e sobrescreva a implementação do método BaseReader.onParse():

1
2
3
4
5
6
BaseReader baseReader = new BaseReader() {
    @Override
    protected void onParse(final String port, final boolean isAscii, final String read) {
    // Código que usa os dados recebidos (parâmetro "read")
    }
};

O parâmetro read contém os dados recebidos. Por exemplo, o código abaixo atualiza um TextView do UI do Android:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
BaseReader baseReader = new BaseReader() {
    @Override
    protected void onParse(final String port, final boolean isAscii, final String read) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.append(read + "\n");
            }
        });
    }
};

Interceptando o log dos objetos da classe SerialPortManager

Para acessar o log interno das instâncias da classe SerialPortManager use o método SerialPortManager.setLogInterceptor(), instanciando a classe LogInterceptorSerialPort e sobrescrevendo o método LogInterceptorSerialPort.log():

1
2
3
4
5
6
7
spManager.setLogInterceptor(new LogInterceptorSerialPort() {
    @Override
    public void log(@SerialPortManager.Type final String type, final String port,
                    final boolean isAscii, final String log) {
        // Código que usa os dados recebidos (parâmetro "log")
    }
});

O parâmetro log contém os dados do log. Por exemplo, o código abaixo atualiza um TextView do UI do Android:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
spManager.setLogInterceptor(new LogInterceptorSerialPort() {
    @Override
    public void log(@SerialPortManager.Type final String type, final String port,
                    final boolean isAscii, final String log) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.append(log + "\n");
            }
        });
    }
});