]> git.llucax.com Git - z.facultad/66.09/etherled.git/blobdiff - doc/protocolo.txt
Ejemplo completo del módulo de leds implementado en assembly y llamado desde un
[z.facultad/66.09/etherled.git] / doc / protocolo.txt
index 016f27bfb9fae2940da673095c4f1f21c071c871..eebd42c8ffdcff371bb7e876a6e1e00c34568a71 100644 (file)
@@ -17,9 +17,9 @@ Introducci
 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).
@@ -46,29 +46,29 @@ ACK al mismo paquete recibido (s
 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
@@ -76,22 +76,29 @@ Identificador:
        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
@@ -120,25 +127,23 @@ Suponemos una matriz chica, de 4x4 para simplificar el ejemplo. Para organizar
 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:
@@ -163,3 +168,10 @@ HIGH(col0), LOW(col0), HIGH(col1), LOW(col1), ... , HIGH(colN), LOW(colN)
 
 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.