]> 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
 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).
 
 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
 -----------------
 
 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:
 
 --------
 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).
 
 
 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.
 
        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
        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).
 
        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
 -----
 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
 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
 
 
 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).
 
 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:
 
 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.
 
 
 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.