EMI (protocolo)
# EMI (protocolo)

External Machine Interface (EMI), una extensión del Universal Computer Protocol (UCP), es un protocolo de comunicaciones usado principalmente para la interacción con las SMSCs (Short Message Service Center). El protocol es propietario de la empresa LogicaCMG.

## Sintaxis

Una trama EMI/UCP suele ser de esta manera:

El inicio del paquete se indica con ^B (STX, hex 02) y el final con ^C (ETX, hex 03). Los diferentes campos que conforman el paquete se separan con /.

### Cabecera

Los primeros cuatro campos constituyen la cabecera, los cuales son obligatorios. El primero de ellos es el número de referencia de la transacción (01), el segundo es la longitud del paquete, el tercero es el tipo de operación (O para operación, R para resultado), y el cuarto es la operación (en nuestro ejemplo es 30, "transferencia de mensaje").

### Operación

Los siguientes campos dependen de la operación a realizar. Tomando nuestro ejemplo como referencia, '66677789' es el destinatario (número de teléfono) y '68656C6C6F' corresponde al contenido del mensaje enviado, en este caso en ASCII la palabra "hello". La segunda línea es la respuesta con el número de referencia de la transacción correspondiente, 'A' indica que el mensaje ha sido reconocido (ack) exitosamente por la SMSC. Destacar que el tiempo en que el mensaje ha sido entregado aparece añadido al número de teléfono.

### Checksum

El último campo corresponde al checksum, que se calcula simplemente sumando todos los bytes del paquete (incluidos los slashes) y quitando el octavo (bit con menos peso) del resultado.

## Limitaciones técnicas

* El número de referencia de la transacción, representado con dos dígitos, limita el número de mensajes pendientes de procesar a 100.
* El número de destino, AdC, no puede contener los caracteres * o #, mientras que el de origen, OAdC sí que puede, en tal caso no se puede hacer un 'reply' del mensaje recibido.
* El alfabeto utilizado no es compatible con ASCII y ciertos caracteres no están presentes: apóstrofo, Acento grave(`), Underscore y Tab.
* Puesto que el protocolo son tramas de texto, los SMS deben ser codificados dos veces: primero a 7 bits, y posteriormente en hexadecimal.
