# Configuración y conectividad

Esta guía explica cómo gestionar las versiones de la aplicación, manejar las variantes de compilación específicas y verificar el enlace de comunicación entre su Sistema Host y el dispositivo Pinpad.

## Versionado de la aplicación

La aplicación sigue un formato de versionado semántico y una convención interna específica para garantizar la trazabilidad de la compilación y la compatibilidad con el sistema operativo (OS).

### Formato de versionado

El versionado sigue el formato **X.Y.Z-rc**:

* **X (Versión Principal)**: Versión principal del software.
* **Y (Versión Secundaria)**: Adición de nuevas funcionalidades.
* **Z (Revisión)**: Revisiones de código o correcciones de errores.
* **rc**: Siglas de "release candidate" (candidato a lanzamiento).

### Convención de versionado

Para actualizar la versión, modifique el `versionCode` y el `versionName` en el archivo `build.gradle.kts(:app)`. Este proyecto requiere que el **`versionCode`** (un número entero utilizado por Android) coincida con el **`versionName`** tras eliminar todos los caracteres no numéricos.

> **Ejemplo**: Si `versionName` es "1.9.8-rc", el `versionCode` debe ser **198**.

## Variantes de compilación

El proyecto Pinpad Getnet utiliza variantes de compilación para habilitar o deshabilitar la lógica funcional en tiempo de compilación mediante flags específicos.

### Definiciones de flags

* **`RemoveFlagScreen`**: Cuando es **TRUE**, **activa** la pantalla "Retire la Tarjeta" (Retire Tarjeta) al finalizar la transacción.
* **`EmvSpecialTags`**: Cuando es **TRUE**, habilita la transmisión de las etiquetas EMV `9F1A`, `5F2A` y `5F34` en las respuestas de criptogramas.
* **`ChangeYDL`**: Cuando es **TRUE**, la pantalla de error durante una descarga remota (YDL) permanece visible indefinidamente hasta que se cierra manualmente. En este modo, la pantalla muestra detalles granulares, incluyendo el número de paquete fallido, volumen de bytes y ruta del fichero.

### Tabla de mapeo de variantes

Seleccione la variante correspondiente a la combinación de flags requerida:

| 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             |

### Compilación de variantes

1. Abra la ventana de herramientas **Build Variants** en Android Studio (**View > Tool Windows > Build Variants**).
2. Seleccione la variante deseada (ej. `F03Debug`).
3. Para generar todos los APK de depuración simultáneamente, ejecute `./gradlew assembleDebug` en el terminal. Tenga en cuenta que para entornos de producción se utiliza `assembleRelease`.

## Verificación de conectividad (prueba de echo)

El comando **Y0I** (Echo Request) verifica el enlace serie y recupera los identificadores técnicos del terminal sin cambiar el estado de la interfaz de usuario (UI).

### Solicitud \[Sistema Host]

El Host debe enviar el siguiente payload:

| Campo       | Valor     | Atributo | Descripción                                        |
| ----------- | --------- | -------- | -------------------------------------------------- |
| **`<STX>`** | 02h       | 1 H      | Inicio de Mensaje (Start of Message)               |
| **\[CID]**  | “Y0I”     | 3 ANS    | Identificador de Comando                           |
| **`<ETX>`** | 03h       | 1 H      | Fin de Mensaje (End of Message)                    |
| **\{LRC\}**   | Algoritmo | 1 H      | Verificación de Error (Ver Integridad y Checksums) |

Una trama de solicitud de Echo mínima sería la siguiente:

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

### Respuesta \[Pinpad]

Si el enlace funciona, el Pinpad devuelve sus metadatos de hardware y software, separados por **`<FS>`** (Separadores de Campo - 1Ch).

| Campo      | Atributo | Descripción                                   |
| ---------- | -------- | --------------------------------------------- |
| **\[CID]** | 3 ANS    | Identificador de Comando (“Y0I”)              |
| **\[OWN]** | 15 ANS   | Propietario del Pinpad (“GETNET”)             |
| **`<FS>`** | 1 H      | Separador de Campo                            |
| **\[VEN]** | 1..15 ANS | ID del Fabricante (Obtenido del dispositivo)  |
| **`<FS>`** | 1 H      | Separador de Campo                            |
| **\[MOD]** | 1..15 ANS | Modelo del Pinpad (ej. “N750P”)               |
| **`<FS>`** | 1 H      | Separador de Campo                            |
| **\[VOS]** | 1..15 ANS | Versión del OS (ej. “Android 12”)             |
| **`<FS>`** | 1 H      | Separador de Campo                            |
| **\[SOF]** | 1..15 ANS | Versión de Software (ej. “1.9.7-rc”)          |
| **`<FS>`** | 1 H      | Separador de Campo                            |
| **\[NSF]** | 1..15 ANS | Número de Serie del Dispositivo               |

Una trama de respuesta satisfactoria sería similar a la siguiente:

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

## Próximos pasos

Con la conectividad verificada y el sistema de compilación configurado, puede proceder a:

1. [**Arquitectura y Conceptos Básicos**](https://docs.globalgetnet.com/es/products/in-store-payments/host-to-host?doc=h2h-system-architecture\&section=qkgon7kvze04x46w47u75f1n): comprenda los módulos internos como `HandlerCommands` y `Transaction`.
2. [**Seguridad y Modelo de PIN**](https://docs.globalgetnet.com/es/products/in-store-payments/host-to-host?doc=h2h-security-and-pin-model\&section=qkgon7kvze04x46w47u75f1n): información sobre la generación de claves RSA y la inyección DUKPT.