Plataforma de Comunicação Elgin versão 3.13.9
Documentação das bibliotecas de integração com hardware Elgin
Impressora Térmica

Módulo para comunicação com as impressoras térmicas. Mais...

Funções

int DirectIO (byte[] writeData, int writeNum, byte[] readData, Inteiro readNum)
 Envia comandos ESCPOS direto para a porta de comunicação. Mais...
 

Descrição detalhada

Módulo para comunicação com as impressoras térmicas.

Para utilizar essas funções em ambiente Android, é necessário importar a classe referente a este módulo:

‍import com.elgin.e1.Impressora.Termica;


Após importar a classe, suas funções poderão ser acessadas diretamente via operador ponto ("."), uma vez que seus métodos são estáticos.

Para estabelecer uma comunicação com a impressora, será necessário abrir uma conexão através do método AbreConexaoImpressora:

‍Termica.AbreConexaoImpressora(3, "i9", "192.168.0.1", 9100); // Argumentos ilustrativos


Caso o tipo de conexão seja USB (tipo = 1), a comunicação somente será efetuada se o usuário permitir o acesso à impressora na solicitação que aparecer na tela; devido a isso, existem duas formas para chamar a função AbreConexaoImpressora:

1ª: Chamá-la nos métodos de Activity onCreate ou onResume - nesse caso, a Activity sempre terá uma conexão USB aberta enquanto estiver "ativa" / em uso.
--> A função FechaConexaoImpressora deverá ser chamada em onDestroy ou em onStop.

2ª: Chamá-la através de um botão - nesse caso, a comunicação USB será estabelecida somente após um clique em tal botão.

O exemplo abaixo ilustra como abrir uma conexão TCP/IP com a impressora Elgin i9 em ambiente Android, avançar 50 linhas de papel ("imprimir em branco") e fechar a conexão.

import com.elgin.e1.Impressora.Termica;
// ...
Termica.AbreConexaoImpressora(3, "i9", "192.168.0.1", 9100);
Termica.AvancaPapel(50);
Termica.FechaConexaoImpressora();
// ...


O exemplo abaixo ilustra como abrir uma conexão USB com a impressora Elgin i9 em ambiente Android, avançar 50 linhas de papel ("imprimir em branco") e fechar a conexão.

// ...
import com.elgin.e1.Impressora.Termica;
public class MainActivity extends AppCompatActivity { // AppCompatActivity e' um subtipo de Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//* SETUP INICIAL
Termica.setActivity(this);
Termica.AbreConexaoImpressora(5, "", "", 0);
Termica.FechaConexaoImpressora();
//*
Termica.AbreConexaoImpressora(1, "i9", "", 0);
}
@Override
protected void onDestroy() {
super.onDestroy();
Termica.FechaConexaoImpressora();
}
// Essa funcao pode ser chamada em um botao, por exemplo
private int avanca50linhas() {
int retorno = Termica.AvancaPapel(50);
return retorno;
}
}
// ...


Conexão / desconexão automática

A biblioteca E1 Android inicia e encerra conexões USB automaticamente, dispensando o usuário de chamar os métodos AbreConexaoImpressora e FechaConexaoImpressora, nas seguintes situações:

  1. Se, ao carregar a biblioteca E1, houver uma impressora Elgin conectada no dispositivo Android;
  2. Se, ao conectar uma impressora Elgin no dispositivo Android, a biblioteca E1 estiver sem uma conexão ativa;
    • Em ambos os casos, uma conexão USB é estabelecida automaticamente com a impressora conectada, desde que o usuário aceite a permissão que aparecer na tela.
  3. Se a biblioteca E1 tiver uma conexão USB ativa com uma impressora Elgin e esta, por sua vez, for desligada ou desconectada do dispositivo Android.
    • A impressora desligada/desconectada terá sua conexão USB encerrada automaticamente.

Funções impressora térmica

- AbreConexaoImpressora

Funções

◆ DirectIO()

int DirectIO ( byte[]  writeData,
int  writeNum,
byte[]  readData,
Inteiro  readNum 
)

Envia comandos ESCPOS direto para a porta de comunicação.

Função de despejo de comandos na porta de comunicação. Essa função também recebe dados da porta de comunicação.

Observação
OBS: Se o tipo de conexão (definido na função AbreConexaoImpressora) for o 5, não será possível realizar a leitura da porta e os parâmetros readData e readNum podem ser definidos como null, pois não serão utilizados na função.
Parâmetros
writeData- Sequência de bytes que devem ser enviados para a porta de comunicação.

writeNum- Quantidade de bytes enviados e que serão escritos.

readData- Variável que receberá os dados de retorno caso seja necessário.

readNum- Quantidade de dados que se espera ler. Após a execução da função, essa variável deve indicar a quantidade de dados lidos da porta. Para evitar a leitura da porta esse parâmetro deve valer 0 (ZERO).

Perceba que este parâmetro recebe, como argumento, um objeto da classe Inteiro, inicializado com o valor que deseja-se passar ao parâmetro.

Essa classe representa um número inteiro e, para utilizá-la, é necessário importá-la:

‍import com.elgin.e1.Impressora.Utilidades.Inteiro;


Possui dois construtores: um construtor padrão (sem argumentos), que inicializa o objeto com valor 0; e um construtor com um argumento do tipo int, que inicializa o objeto com o valor passado nesse argumento.

Apresenta dois métodos: o método getValor (assinatura: int getValor()), que retorna o valor atual da instância (definido no construtor ou na função setValor); e o método setValor (assinatura: void setValor(int valor)), que modifica o valor da instância pelo valor passado no argumento).

Veja, abaixo, um exemplo de uso válido desta função, em Java, seguido de um comentário detalhado sobre os argumentos passados:
byte[] esc = {29, 73, 67}; // Nome da impressora
byte[] ler = new byte[1000]; // Armazena os dados retornados pela impressora (até 1000 bytes, nesse caso)
Inteiro leu = new Inteiro(1); // Armazena a quantidade de bytes lidos; o valor 1 (ou qualquer outro maior do que 0) solicita a leitura da porta
int ret = Termica.DirectIO(esc, 3, ler, leu);
// Imprime o retorno de DirectIO e a resposta da impressora:
System.out.printf("\n Ret: %d ; Leu: %d ; Dados lidos: %s \n", ret, leu.getValor(), new String(ler));


‍No exemplo acima, são passados a variável esc e o argumento 3 à função; a variável esc contém o comando que o DirectIO enviará à impressora - um comando em ESCPOS que solicita o nome da impressora - e o valor 3, a quantidade de bytes que devem ser escritos - no exemplo, todos os três bytes do comando armazenado na variável esc.

‍Em seguida, são passados à função as variáveis ler e leu; a variável ler armazenará os dados retornados pela impressora, em resposta ao comando enviado, e a variável leu, armazenará a quantidade de bytes efetivamente lidos.

‍O valor 1 (ou qualquer valor maior do que zero), inicialmente atribuido à variável leu, solicita a leitura da porta. Após a leitura, o valor final dessa variável será a quantidade de dados lidos.


Retorna
O retorno é numérico.
A função bem-sucedida deve retornar 0.