# Visão Geral do Get Smart PeripheralsLib

PeripheralsLib é uma biblioteca Android projetada para facilitar a interação entre aplicativos Android e o hardware de Ponto de Venda (PDV). Ela fornece uma interface unificada para controlar periféricos específicos em dispositivos TPV-Android, como impressoras térmicas, leitores de tarja magnética e leitores de código de barras profissionais.

Este guia apresenta os principais conceitos, arquitetura e recursos da PeripheralsLib para ajudar você a entender como ela se integra às suas soluções de pagamento ou varejo.

## Propósito e Escopo

O principal objetivo da PeripheralsLib é abstrair as complexidades da comunicação de hardware de baixo nível. Em vez de escrever comandos brutos para os drivers do dispositivo, você interage com objetos e métodos Java de alto nível.

Esta biblioteca é especificamente adaptada para:

* **Impressão:** Envio de imagens bitmap para a impressora térmica do dispositivo.  
* **Captura de Dados:** Leitura de cartões de saúde (tarja magnética) e escaneamento de códigos de barras usando leitores de hardware profissionais.  
* **Gerenciamento de Dispositivos:** Configuração de modos quiosque, como bloqueio de barras de navegação ou definição de launchers padrão.

## Arquitetura Principal

A PeripheralsLib opera em um padrão **Manager-Callback**. Isso garante que seu aplicativo permaneça responsivo enquanto as operações de hardware — que podem ser demoradas — são executadas de forma assíncrona.

### O PeripheralsManager

A classe `PeripheralsManager` é o ponto de entrada central para todas as operações da biblioteca. Ela atua como uma ponte no estilo singleton entre o contexto do seu aplicativo e o hardware do dispositivo.

* **Inicialização:** Você instancia o manager uma vez, passando o Context do aplicativo. Isso estabelece automaticamente a conexão com o hardware do terminal subjacente.  
* **Escopo:** Todas as requisições de hardware (impressão, escaneamento, configuração) são roteadas através desta única instância.

### Callbacks Assíncronos

A maioria das operações de hardware na PeripheralsLib é assíncrona. Quando você solicita uma ação, como imprimir um recibo ou aguardar o escaneamento de um código de barras, você deve fornecer uma implementação de **Callback**.

A biblioteca usa interfaces de callback específicas para diferentes operações:

* `PrintBmpCallback`: Lida com os estados de sucesso ou erro para trabalhos de impressão.  
* `MagReadCallback`: Retorna dados da tarja magnética (Trilha 1 e Trilha 2) ou erros.  
* `BarcodeCallback`: Retorna dados do código de barras escaneado ou erros.  
* `ConfigCallback`: Confirma o sucesso ou a falha nas alterações de configuração do sistema.

Esse padrão garante que a thread de UI não seja bloqueada enquanto o dispositivo inicializa a impressora ou aguarda que o usuário passe um cartão.

## Principais Recursos

### 1. Impressão Térmica

A biblioteca suporta a impressão de imagens no formato **Bitmap**. Para garantir uma saída consistente em diferentes modelos de terminal, a biblioteca depende de padrões de imagem específicos (por exemplo, largura máxima de 390px, esquema de cores em preto e branco, compressão JPEG).

### 2. Leitura de Cartão de Saúde

A PeripheralsLib inclui uma lógica especializada para **Cartões de Saúde**. Ao contrário dos leitores de tarja magnética genéricos, a função `magStripeRead` analisa trilhas específicas (Trilha 1 e Trilha 2) para identificar se o cartão passado é um cartão de saúde válido.

### 3. Leitura Profissional de Código de Barras

Para dispositivos equipados com um leitor a laser profissional dedicado (baseado em hardware), a biblioteca fornece uma interface direta para acionar o leitor e recuperar os dados.

<Callout type="note">

Este recurso é voltado para dispositivos com leitores profissionais integrados. Ele não controla a câmera padrão do dispositivo.

</Callout>

### 4. Configuração de Quiosque do Terminal

Para ambientes de negócios dedicados, a PeripheralsLib permite bloquear programaticamente a interface do Android. Isso inclui:

* **Barra de Status e Barra de Navegação:** Ocultar ou desativar as barras do sistema para impedir que os usuários saiam do aplicativo ou alterem as configurações.  
* **Configuração do Launcher:** Definir um pacote de aplicativo e uma activity específicos como a tela inicial padrão (Launcher).

## Requisitos do Sistema

A PeripheralsLib é compatível com projetos do Android Studio.

### Suporte ao Android 12

A partir da versão 1.0.6, a biblioteca inclui suporte específico para o **Android 12 e superior**. Devido às mudanças de segurança nas versões mais recentes do Android, permissões específicas (`QUERY_ALL_PACKAGES`) devem ser declaradas no manifest do seu aplicativo para permitir que a biblioteca interaja corretamente com os serviços do sistema.