% Tamanho das mensagens
USART_SEND_LENGTH = 5;
USART_RECV_LENGTH = 6;

% Pacotes standard
MESSAGE_REQ    = 255;   % Padrão utilizado no pacote Start Of Frame
MESSAGE_TEST   = 254;   % Padrão utilizado numa mensagem de calibração
MESSAGE_SUCESS = 253;   % Padrão utilizado numa mensagem sinalizadora de sucesso
MESSAGE_INVREQ = 252;   % Padrão utilizado numa mensagem sinalidora de parâmetros inválidos
MESSAGE_INVALID= 251;   % Mensagem de aviso de alguma situação anómala
MESSAGE_ERROR  = 250;   % Padrão utilizado numa mensagem sinalizadora de erro
MESSAGE_MINTYPE= MESSAGE_ERROR;

% Máscaras para leitura dos diversos campos do pacote de tipo
OPERATION_MASK = 192;   % 0b11XXXXXX: 2 bits indicando o tipo de msg
SCUID_MASK     = 60;    % 0bXX1111XX: 4 bits para a identificação do SCU
PARAM_MASK     = 3;     % 0bXXXXXX11: 2 bits para a identificação do parâmetro a ler/aplicar

% Localização dos vários campos no pacote de tipo
OPERATION_LOC = 6;      % 0b11XXXXXX
SCUID_LOC     = 2;      % 0bXX1111XX
PARAM_LOC     = 0;      % 0bXXXXXX11

% Tipos de operações (pacote de tipo)
OP_APPLY_JOINT   = 0;   % Aplicação de novas posições/velocidades/correntes a uma junta
OP_APPLY_CONTROL = 1;   % Aplicação de novos paramametros dos controladores
OP_READ_SENSORS  = 2;   % Leitura de um conjunto de sensores
OP_READ_EXTBUFF  = 3;   % Leitura do buffer externo - Estado do barramento CAN

% Tipos de parâmetros (pacote de tipo)
PARAM_POSITION = 0;     % Posição
PARAM_VELOCITY = 1;     % Velocidade
PARAM_CURRENT  = 2;     % Corrente
PARAM_SPECIAL  = 3;     % Sensores especiais

% Parâmetros do controlador a utilizar nas mensagens OP_APPLY_CONTROL
PARAM_KI        = 0;
PARAM_KP        = 1;
PARAM_KD        = 2;
PARAM_CONTROLON = 3;
