# Configuração e conectividade

Este guia aborda como gerenciar versões do aplicativo, lidar com variantes de compilação específicas e verificar o link de comunicação entre o seu Sistema Host e o dispositivo Pinpad.

## Versionamento do aplicativo

O aplicativo segue um formato de versionamento semântico e uma convenção interna específica para garantir a rastreabilidade da compilação e a compatibilidade com o sistema operacional (OS).

### Formato de versionamento

O versionamento segue o formato **X.Y.Z-rc**:

* **X (Versão Principal)**: Versão principal do software.
* **Y (Versão Secundária)**: Adição de novas funcionalidades.
* **Z (Revisão)**: Revisões de código ou correções de bugs.
* **rc**: Abreviação para "release candidate" (candidato a lançamento).

### Convenção de versionamento

Para atualizar a versão, modifique o `versionCode` e o `versionName` no arquivo `build.gradle.kts(:app)`. Este projeto exige que o **`versionCode`** (um número inteiro usado pelo Android) corresponda ao **`versionName`** com todos os caracteres não numéricos removidos.

> **Exemplo**: Se o `versionName` for "1.9.8-rc", o `versionCode` deve ser **198**.

## Variantes de compilação

O projeto Pinpad Getnet usa variantes de compilação para ativar ou desativar a lógica funcional em tempo de compilação por meio de flags específicas.

### Definições de flag

* **`RemoveFlagScreen`**: Quando **TRUE**, **ativa** a tela "Retire o Cartão" (Retire Tarjeta) após a conclusão da transação.
* **`EmvSpecialTags`**: Quando **TRUE**, habilita a transmissão das tags EMV `9F1A`, `5F2A` e `5F34` nas respostas de criptograma.
* **`ChangeYDL`**: Quando **TRUE**, a tela de erro durante um download remoto (YDL) permanece visível indefinidamente até ser fechada manualmente. Neste modo, a tela exibe detalhes granulares, incluindo o número do pacote que falhou, volume de bytes e caminho do arquivo.

### Tabela de mapeamento de variantes

Selecione a variante correspondente à combinação de flags necessária:

| Variante | Bits | ChangeYDL | EmvSpecialTags | RemoveFlagScreen |
| -------- | ---- | --------- | -------------- | ---------------- |
| **F00**  | 000  | FALSE     | FALSE          | FALSE            |
| **F01**  | 001  | FALSE     | FALSE          | TRUE             |
| **F02**  | 010  | FALSE     | TRUE           | FALSE            |
| **F03**  | 011  | FALSE     | TRUE           | TRUE             |
| **F04**  | 100  | TRUE      | FALSE          | FALSE            |
| **F05**  | 101  | TRUE      | FALSE          | TRUE             |
| **F06**  | 110  | TRUE      | TRUE           | FALSE            |
| **F07**  | 111  | TRUE      | TRUE           | TRUE             |

### Compilando variantes

1. Abra a janela de ferramentas **Build Variants** no Android Studio (**View > Tool Windows > Build Variants**).
2. Selecione a variante desejada (ex: `F03Debug`).
3. Para gerar todos os APKs de depuração simultaneamente, execute `./gradlew assembleDebug` no terminal. Observe que para ambientes de produção, `assembleRelease` é usado.

## Verificação de conectividade (echo test)

O comando **Y0I** (Echo Request) verifica o link serial e recupera os identificadores técnicos do terminal sem alterar o estado da interface do usuário (UI).

### Requisição \[Sistema Host]

O Host deve enviar o seguinte payload:

| Campo       | Valor     | Atributo | Descrição                                        |
| ----------- | --------- | -------- | ------------------------------------------------ |
| **`<STX>`** | 02h       | 1 H      | Início da Mensagem (Start of Message)            |
| **\[CID]**  | “Y0I”     | 3 ANS    | Identificador do Comando                         |
| **`<ETX>`** | 03h       | 1 H      | Fim da Mensagem (End of Message)                |
| **\{LRC\}**   | Algoritmo | 1 H      | Verificação de Erro (Veja Integridade & Checksums) |

Um quadro de requisição Echo mínimo seria o seguinte:

```text
<STX>Y0I<ETX>#
```

### Resposta \[Pinpad]

Se funcional, o Pinpad retorna seus metadados de hardware e software, separados por **`<FS>`** (Separadores de Campo - 1Ch).

| Campo      | Atributo | Descrição                                    |
| ---------- | -------- | -------------------------------------------- |
| **\[CID]** | 3 ANS    | Identificador do Comando (“Y0I”)             |
| **\[OWN]** | 15 ANS   | Proprietário do Pinpad (“GETNET”)            |
| **`<FS>`** | 1 H      | Separador de Campo                           |
| **\[VEN]** | 1..15 ANS | ID do Fabricante (Recuperado do dispositivo) |
| **`<FS>`** | 1 H      | Separador de Campo                           |
| **\[MOD]** | 1..15 ANS | Modelo do Pinpad (ex: “N750P”)               |
| **`<FS>`** | 1 H      | Separador de Campo                           |
| **\[VOS]** | 1..15 ANS | Versão do OS (ex: “Android 12”)              |
| **`<FS>`** | 1 H      | Separador de Campo                           |
| **\[SOF]** | 1..15 ANS | Versão do Software (ex: “1.9.7-rc”)          |
| **`<FS>`** | 1 H      | Separador de Campo                           |
| **\[NSF]** | 1..15 ANS | Número de Série do Dispositivo               |

Um quadro de resposta bem-sucedido se assemelharia ao seguinte:

```text
<ACK><STX>Y0IGETNET<FS>newland<FS>N750P<FS>Android 12<FS>1.9.7-rc<FS>NDB400005172<ETX>g
```

## Próximos passos

Com a conectividade verificada e o sistema de compilação configurado, você pode prosseguir para:

1. [**Arquitetura & Conceitos Principais**](https://docs.globalgetnet.com/pt/products/in-store-payments/host-to-host?doc=h2h-system-architecture\&section=qkgon7kvze04x46w47u75f1n): Entenda os módulos internos como `HandlerCommands` e `Transaction`.
2. [**Modelo de Segurança & PIN**](https://docs.globalgetnet.com/pt/products/in-store-payments/host-to-host?doc=h2h-security-and-pin-model\&section=qkgon7kvze04x46w47u75f1n): Saiba mais sobre a geração de chaves RSA e injeção DUKPT.