/***************************************************************************
 *   Copyright (C) 2007 by Daniel Baptista                                 *
 ***************************************************************************/
#ifndef _data_h_
#define _data_h_

/* Tamanho das mensagens */
#define USART_SEND_LENGTH  6
#define USART_RECV_LENGTH  7

/* Pacotes standard  */
#define MESSAGE_REQ     255   /* Padrao utilizado no pacote Start Of Frame */
#define MESSAGE_TEST    254   /* Padrao utilizado numa mensagem sinalizadora de erro */
#define MESSAGE_SUCESS  253   /* Mensagem de aviso de alguma situacao anomala */
#define MESSAGE_INVREQ  252   /* Padrao utilizado numa mensagem sinalidora de parametros invalidos */
#define MESSAGE_INVALID 251   /* Padrao utilizado numa mensagem sinalizadora de sucesso */
#define MESSAGE_ERROR   250   /* Padrao utilizado numa mensagem de calibracao */
#define MESSAGE_MINTYPE MESSAGE_ERROR

/* Mascaras para leitura dos diversos campos do pacote de tipo */
#define OPERATION_MASK  192   /* 0b11XXXXXX: 2 bits indicando o tipo de msg */
#define SCUID_MASK      60    /* 0bXX1111XX: 4 bits para a identificacao do SCU */
#define PARAM_MASK      3     /* 0bXXXXXX11: 2 bits para a identificacao do parametro a ler/aplicar */

/* Localizacao dos vaios campos no pacote de tipo */
#define OPERATION_LOC  6      /* 0b11XXXXXX */
#define SCUID_LOC      2      /* 0bXX1111XX */
#define PARAM_LOC      0      /* 0bXXXXXX11 */

/* Tipos de operacoes (pacote de tipo) */
#define OP_APPLY_JOINT    0   /* Aplicacao de novas posicoes/velocidades/correntes a uma junta */
#define OP_APPLY_CONTROL  1   /* Aplicacao de novos paramametros dos controladores */
#define OP_READ_SENSORS   2   /* Leitura de um conjunto de sensores */
#define OP_READ_EXTBUFF   3   /* Leitura do buffer externo - Estado do barramento CAN */

/* Tipos de parametros (pacote de tipo) */
#define PARAM_POSITION  0     /* Posicao */
#define PARAM_VELOCITY  1     /* Velocidade */
#define PARAM_CURRENT   2     /* Corrente */
#define PARAM_SPECIAL   3     /* Sensores especiais */

/* Parametros do controlador a utilizar nas mensagens OP_APPLY_CONTROL */
#define PARAM_KI         0
#define PARAM_KP         1
#define PARAM_KD         2
#define PARAM_CONTROLON  3

/* Codigos dos varios tipos de erros */
#define OK 0
#define ERROR_REQ 1
#define ERROR_SOF 2
#define ERROR_EMPTYMSG 3
#define ERROR_INV_RECV 4
#define ERROR_INV_SEND 5
#define ERROR_BCC_RECV 6
#define ERROR_BCC_SEND 7
#define ERROR_OPCODE 8
#define ERROR_INVREQ 9
#define ERROR_RESETCOM 10
#define ERROR_UNKNOWN -1

/* SCU_ID's*/
#define RIGHT_LEG 1
#define LEFT_LEG 2
#define RIGHT_HIP 3
#define LEFT_HIP 4
#define TORSO 5
#define RIGHT_ARM 6
#define LEFT_ARM 7
#define HEAD 4
//0- tilt; 1-pan; 2-torso



#endif // #ifndef _data_h_
