X-Git-Url: https://git.llucax.com/z.facultad/66.09/etherled.git/blobdiff_plain/f0f474d63aaf8201f50ad2903565ddae1a673298..0d363a090e396eafcc1235db7a085668ce50e290:/doc/protocolo.txt?ds=sidebyside diff --git a/doc/protocolo.txt b/doc/protocolo.txt index 016f27b..eebd42c 100644 --- a/doc/protocolo.txt +++ b/doc/protocolo.txt @@ -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.