recibir_caracter esperar bit 0 en LSR retornar con el registro de datos recibir_paquete_crudo borrar bandera escape inicializer datos setear modo 'ocio' repetir recibir_caracter si estamos en modo 'ocio' si el caracter es FEnd (0xC0) cambiar a modo 'activo' sino seguir en modo 'ocio' si estamos en modo 'escape' si el caracter es TFend (0xDC) guardar FEnd (0xC0) en los datos cambiar a modo 'activo' si el caracter es TFEsc (0xDD) guardar FEsc (0xDB) en los datos cambiar a modo 'activo' si es otro caracter inválido: ignorar y cancelar paquete cambiar a modo 'ocio' si estamos en modo 'activo' si el caracter es FEnd (0xC0), si el tamaño de lo recibido es 0, marcar inicio de paquete sino (tamaño > 0) retornar con el paquete si es FEsc (0xDB) cambiar a modo 'escape' si es otro caracter guardar en datos recibir_paquete_controlado repetir recibir_paquete_crudo calcular suma de control si es valido, retornar el paquete y su tamaño
También será más facil de agregar funcionalidad nueva. Por ejemplo, si se decide agregar control de exceso de tiempo de espera, resulta lógico implementarlo en el nivel mas bajo.
(c) John Coppens ON6JC/LW3HAZ | correo |