Este protocolo está pensado para funcionar sobre UDP, es por esto que posee
algunos mecanismos básicos para control de errores y confirmación de entrega.
Para esto utiliza un identificador de paquete pequeño por cada tipo de
-operación y un CRC que abarca tanto a la cabecera como a los datos. El
-identificador de paquete se utiliza para saber a que paquete pertenece una
-respuesta.
+operación que se utiliza para saber a que paquete pertenece una respuesta (ACK).
+Para control de errores se utiliza por un lado un bit de paridad en la cabecera
+y por otro un CRC para los datos (de haber).
El protocolo, como se dijo anteriormente diferencia bien entre el dispositivo
etherled (servidor) y la PC u otro dispositivo que le envía comandos (cliente).
Paquete petherled
-----------------
-+----------------+--------------------------------+----------------+
-| Cabecera | Datos (opcional) | CRC |
-+----------------+--------------------------------+----------------+
-/---- 1 byte ----/---------- 0-64 bytes ----------/---- 1 byte ----/
++----------------+--------------------------------+
+| CABECERA | DATOS (opcional) |
++----------------+--------------------------------+
+/---- 1 byte ----/---------- 0-64 bytes ----------/
-Cabecera
+CABECERA
--------
La cabecera está compuesta por los siguientes campos:
-+-----+--------------------+---------------+
-| GS | Variable | Identificador |
-+-----+--------------------+---------------+
-/- 1 -/------ 4 bits ------/--- 3 bits ----/
++-----+---------------+---------------+-----+
+| GS | VAR | ID | PAR |
++-----+---------------+---------------+-----+
+/- 1 -/--- 3 bits ----/--- 3 bits ----/- 1 -/
GS:
Este bit indica si la operación es GET (0) o SET (1).
-Variable:
- Es un número de 0 a 15 que indica la variable sobre la cual se está
+VAR:
+ Es un número de 0 a 7 que indica la variable sobre la cual se está
operando. Ver sección Variables Definidas.
-Identificador:
+ID:
Es un número de 0 a 7 que indentifica al paquete. Para extender la
cantidad de identificadores efectivos disponibles, se utiliza un
contador por cada tupla (GS,Variable), por lo tanto, en el caso ideal de
variables y GET y SET, se tendría una cantidad de indentificadores
efectivos de 8 bits completo (256 posibilidades).
+PAR:
+ Es un bit que indica la paridad (par) de la cabecera, utilizado para
+ control de errores.
-Datos
+DATOS
-----
Los datos se envían para cada operación SET en sentido cliente->servidor y para
cada operación GET en sentido contrario (servidor->cliente). Pueden haber
-variables que no posean datos en absoluto (una variable booleana tipo switch).
-Los datos no son codificados de ninguna manera en particular, ya que la cantidad
-de datos enviados está predefinido para cada Variable (ver sección Variables
-Definidas).
-
+variables que no posean datos en absoluto (una variable booleana tipo switch,
+que active algo si estaba desactivado o a la inversa).
+Los datos no son codificados de ninguna manera en particular ni requiere (en
+términos generales) un campo de longitud, ya que la cantidad de datos enviados
+está predefinido para cada VARiable (ver sección Variables Definidas).
+Para control de errores los datos finalizan con un CRC.
+
++--------------------------------+----------------+
+| DATOS | CRC |
++--------------------------------+----------------+
+/---------- 0-63 bytes ----------/---- 1 byte ----/
-CRC
----
El CRC es de un byte y se utiliza el mismo CRC que utiliza IP y UDP (complemento
-a 1 de la suma). Se aplica tanto a las cabeceras como a los datos (de existir) y
-al mismo CRC. A efectos de calcular el CRC, se toma el CRC como todo en 0.
+a 1 de la suma). Se aplica sólo en los datos (no en las cabeceras, que utilizan
+el bit de paridad). A efectos de calcular el CRC, se toma el CRC como todo en 0.
Variables Definidas
dicha matriz como un array de bits, simplemente hay que rotarla en sentido
antihorario y recorrer por filas de arriba hacia abajo (agrupando por bytes).
- 7 6 5 4 3 2 1 0 cols filas 7 6 5 4 3 2 1 0
- +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
-7 | | | | | | | | | 0 | | | | | | | | |
- +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
-6 | | | | | | | | | 1 | | | | | | | | |
- +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
-5 | | | | | | | | | 2 | | | | | | | | |
- +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
-4 | | | | | | | | | 3 | | | | | | | | |
- +---+---+---+---+---+---+---+---+ ======> +---+---+---+---+---+---+---+---+
-3 | | | | | | | | | 4 | | | | | | | | |
- +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
-2 | | | | | | | | | 5 | | | | | | | | |
- +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
-1 | | | | | | | | | 6 | | | | | | | | |
- +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
-0 | | | | | | | | | 7 | | | | | | | | |
- +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+
-filas cols
+ 7 6 5 4 3 2 1 0 cols 7 6 5 4 3 2 1 0 filas
+7 o---o---o---o---o---o---o---o 0 o---o---o---o---o---o---o---o
+ | | | | | | | | | | | | | | | |
+6 o---o---o---o---o---o---o---o 1 o---o---o---o---o---o---o---o
+ | | | | | | | | | | | | | | | |
+5 o---o---o---o---o---o---o---o 2 o---o---o---o---o---o---o---o
+ | | | | | | | | | | | | | | | |
+4 o---o---o---o---o---o---o---o 3 o---o---o---o---o---o---o---o
+ | | | | | | | | =====> | | | | | | | |
+3 o---o---o---o---o---o---o---o 4 o---o---o---o---o---o---o---o
+ | | | | | | | | | | | | | | | |
+2 o---o---o---o---o---o---o---o 5 o---o---o---o---o---o---o---o
+ | | | | | | | | | | | | | | | |
+1 o---o---o---o---o---o---o---o 6 o---o---o---o---o---o---o---o
+ | | | | | | | | | | | | | | | |
+0 o---o---o---o---o---o---o---o 7 o---o---o---o---o---o---o---o
+filas cols
Quedando por resultado las columnas desde la 0 a la 7 en cada byte del stream de
bits:
Siendo HIGH(colI) la parte alta de la columan I y LOW(colI) su parte baja.
+Finalmente, los DATOS de una matriz tienen la siguiente estructura:
++----------------+--------------------------------+----------------+
+| LEN | H(col0)L(col0)..H(colN)L(colN) | CRC |
++----------------+--------------------------------+----------------+
+/---- 1 byte ----/---------- 0-62 bytes ----------/---- 1 byte ----/
+
+Siendo LEN la cantidad columnas de la matriz.