> ## Documentation Index
> Fetch the complete documentation index at: https://docs.elata.bio/llms.txt
> Use this file to discover all available pages before exploring further.

# Implementación del adaptador

> Construya un adaptador de dispositivo que se conecte a BleTransport y emita marcos de diadema estables.

Una vez que su inventario de protocolo esté completo, cree el adaptador.

El objetivo es aislar la lógica de paquetes y BLE específica del dispositivo y al mismo tiempo preservar el contrato de transporte compartido de Elata para las aplicaciones.

<a id="recommended-shape" />

## Forma recomendada

Para integraciones BLE del navegador, el adaptador debe cumplir con la forma `BleDeviceLike` esperada por `@elata-biosciences/eeg-web-ble`.

Eso significa que la capa del dispositivo maneja el descubrimiento, la configuración de la sesión, la suscripción y la decodificación de paquetes, mientras que `BleTransport` maneja la superficie de transporte orientada a la aplicación.

<a id="implementation-order" />

## Orden de implementación

<Steps>
  <Step title="Implementar descubrimiento">
    Defina los filtros `requestDevice` y cualquier servicio opcional necesario para encontrar el dispositivo limpiamente en el selector del navegador.
  </Step>

  <Step title="preparar la sesión">
    Conéctese a GATT, resuelva características y realice las escrituras de inicio necesarias antes de que pueda comenzar la transmisión.
  </Step>

  <Step title="Decodificar paquetes en EEG filas">
    Convierta los paquetes de proveedores en `number[][]` donde cada fila es un paso de tiempo y el ancho de la fila coincide con `numEegChannels`.
  </Step>

  <Step title="Emitir metadatos estables">
    Exponga `samplingRate`, `eegNames`, `numEegChannels`y los metadatos del dispositivo relacionados con precisión.
  </Step>

  <Step title="Manejar el tope y soltar limpiamente">
    Cancele la suscripción, detenga la transmisión de forma segura y libere la sesión sin perder recursos.
  </Step>
</Steps>

<a id="minimal-adapter-skeleton" />

## Esqueleto adaptador mínimo

```ts theme={null}
import type { BleDeviceLike } from "@elata-biosciences/eeg-web-ble";

export class VendorBleDevice implements BleDeviceLike {
  isAthena = false;
  samplingRate = 250;
  eegNames = ["CH1", "CH2"];
  numEegChannels = 2;
  opticsChannelCount = 0;

  getBoardInfo() {
    return { device_name: "VENDOR_DEVICE" };
  }

  getCharacteristicInfo() {
    return { characteristics: [] };
  }

  async prepareSession() {
    // Connect to GATT, resolve characteristics, and initialize streaming state
  }

  async releaseSession() {
    // Tear down subscriptions and release the browser session
  }

  async startStream(eegCb, _ppgCb) {
    // Subscribe to notifications and emit decoded EEG rows
    eegCb([[0, 0]]);
  }

  async stopStream() {
    // Stop device streaming and unsubscribe
  }
}
```

<a id="what-the-adapter-must-own" />

## Lo que debe poseer el adaptador

| Responsabilidad | ¿El adaptador lo posee? |
| - | - |
| Descubrimiento de dispositivos | si |
| Conexión GATT y configuración de características. | si |
| decodificación de paquetes | si |
| Metadatos precisos | si |
| Ciclo de vida del transporte orientado a la aplicación | generalmente a través de `BleTransport` |
| Entrega de fotogramas normalizada a aplicaciones | a través del contrato de transporte compartido |

<a id="packet-decoding-rules" />

## Reglas de decodificación de paquetes

Mantenga el decodificador aburrido y determinista.

| regla | Por qué es importante |
| - | - |
| Rechazar paquetes mal formados temprano | Evita que las filas incorrectas lleguen a las aplicaciones |
| Preservar el orden de los canales | Mantiene las características y modelos posteriores consistentes |
| Hileras por lotes solo cuando sea necesario | Evita la latencia oculta y la confusión de marcas de tiempo. |
| Seguimiento de los contadores de paquetes cuando estén disponibles | Ayuda a detectar caídas o corrupción. |
| Separe EEG de la lógica auxiliar limpiamente | Facilita la depuración y las pruebas |

<a id="session-lifecycle-rules" />

## Reglas del ciclo de vida de la sesión

Su adaptador debería hacer que estas transiciones no sean sorprendentes:

| etapa | Buen comportamiento |
| - | - |
| Descubrir | sólo se muestran los dispositivos coincidentes |
| Conectar | los servicios y características requeridos se resuelven claramente |
| Empezar | La transmisión comienza una vez, sin suscripciones duplicadas. |
| Detener | las notificaciones se detienen limpiamente |
| Lanzamiento | la sesión se puede volver a iniciar más tarde |

<a id="reliability-notes" />

## Notas de confiabilidad

<Info>
  `startStreaming()` es el valor predeterminado más seguro para los consumidores de aplicaciones porque combina conectar e iniciar. Su adaptador aún debería hacer que los pasos subyacentes `connect()` y `start()` sean confiables por sí solos.
</Info>

Si el dispositivo expone señales auxiliares como PPG, óptica, IMU o batería, asócielas solo cuando la semántica sea clara. No fuerce suposiciones específicas de Muse en hardware que no sea de Muse.

<a id="related-docs" />

## Documentos relacionados

* [EEG Introducción a BLE](/es/sdk/eeg-web-ble/getting-started)
* [Contrato de Transporte](./transport-contract)
* [Pruebas y Validación](./testing-and-validation)
* [Dispositivo Muse](/es/sdk/eeg-web-ble/muse-device)

<a id="next" />

## Siguiente

<CardGroup cols={2}>
  <Card title="Validar la integración" icon="arrow-right" href="./testing-and-validation">
    Convierta el adaptador en un transporte confiable en condiciones reales de falla.
  </Card>

  <Card title="preparar el traspaso" icon="arrow-right" href="./submission-and-support">
    Empaquete la integración con los documentos y advertencias que otros equipos necesitan.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.