C:/Milton/UA/Humanoid/Lab/Fase3_Integration/v3/Slave_Stable1.02/can.c File Reference

#include "can.h"
#include "CanDrivers.h"

Defines

#define CAN_MESSAGE_LENGTH   8
#define CAN_TYPE   0
#define CAN_DATA1   1
#define xcuSRC(x)   (((unsigned int) (x) & XCUSRC_MASK ) >> XCUSRC_LOC )
#define xcuDST(x)   (((unsigned int) (x) & XCUDST_MASK ) >> XCUDST_LOC )
#define canIndex(x)   (((unsigned int) (x) & CANINDEX_MASK ) >> CANINDEX_LOC )
#define operation(x)   (((unsigned int) (x) & OPERATION_MASK) >> OPERATION_LOC)
#define xcuSRC_patt(y)   (((unsigned int) (y) << XCUSRC_LOC ) & XCUSRC_MASK )
#define xcuDST_patt(y)   (((unsigned int) (y) << XCUDST_LOC ) & XCUDST_MASK )
#define canIndex_patt(y)   (((unsigned int) (y) << CANINDEX_LOC ) & CANINDEX_MASK )
#define operation_patt(y)   (((unsigned int) (y) << OPERATION_LOC) & OPERATION_MASK)
#define filter(ind)   (xcuDST_patt(HOST_SCU) | canIndex_patt(ind))
#define identifierMSG(op, ind)   (xcuSRC_patt(HOST_SCU) | xcuDST_patt(HOST_MCU) | canIndex_patt(ind) | operation_patt(op))
#define scuSRC_patt(y)   (byte) (((unsigned int) (y) << SCUSRC_LOC ) & SCUSRC_MASK )
#define msgIndex_patt(y)   (byte) (((unsigned int) (y) << MSGINDEX_LOC) & MSGINDEX_MASK)
#define special_patt(y)   (byte) (((unsigned int) (y) << SPECIAL_LOC ) & SPECIAL_MASK )
#define sensors_patt(y)   (byte) (((unsigned int) (y) << SENSORS_LOC ) & SENSORS_MASK )
#define footID_patt(y)   (byte) (((unsigned int) (y) << FOOTID_LOC ) & FOOTID_MASK )
#define typePacket(pack_id, sp, sens, foot)   (scuSRC_patt(HOST_SCU) | msgIndex_patt(pack_id) | special_patt(sp) | sensors_patt(sens) | footID_patt(foot))
#define deadlineError_patt   (((byte) sensors.sysStatus.deadlineError << DEADLINEERROR_LOC) & DEADLINEERROR_MASK)
#define reset_patt   (((byte) sensors.sysStatus.reset << RESET_LOC) & RESET_MASK)
#define controlOn_patt(srv)   (((byte) sensors.sysStatus.controlOn[srv] & 1) << (CONTROLON_LOC+srv))
#define motionFin_patt(srv)   (((byte) sensors.sysStatus.motionFin[srv] & 1) << (MOTIONFIN_LOC+srv))
#define applyControlOn(x, srv)   (byte) ((x >> srv) & 1)

Enumerations

enum  MESSAGE_IDENTIFIER {
  XCUSRC_MASK = 0b11110000000, XCUDST_MASK = 0b00001111000, CANINDEX_MASK = 0b00000000100, OPERATION_MASK = 0b00000000011,
  CAN_MASK = XCUDST_MASK | CANINDEX_MASK, XCUSRC_LOC = 7, XCUDST_LOC = 3, CANINDEX_LOC = 2,
  OPERATION_LOC = 0, OP_UPDATE_SENSORS = 0b00, OP_UPDATE_ACTUATORS = 0b01, OP_SLAVECAN_STATUS = 0b10
}
enum  MESSAGE_UPDATE_SENSORS {
  SCUSRC_MASK = 0b11110000, MSGINDEX_MASK = 0b00001000, SPECIAL_MASK = 0b00000100, SENSORS_MASK = 0b00000010,
  FOOTID_MASK = 0b00000001, SCUSRC_LOC = 4, MSGINDEX_LOC = 3, SPECIAL_LOC = 2,
  SENSORS_LOC = 1, FOOTID_LOC = 0, MSGINDEX_1 = 0, MSGINDEX_2 = 1
}
enum  MESSAGE_SYSSTATUS_PACKET {
  DEADLINEERROR_MASK = 0b10000000, RESET_MASK = 0b01000000, CONTROLON_MASK = 0b00111000, MOTIONFIN_MASK = 0b00000111,
  DEADLINEERROR_LOC = 7, RESET_LOC = 6, CONTROLON_LOC = 3, MOTIONFIN_LOC = 0
}
enum  CAN_ERRORS {
  CAN_ERROR = 0b00000001, RX_INVALIDMSG_ERROR = 0b00000010, RX_OVERFLOW_ERROR = 0b00000100, RX_INVALID_LENGTH = 0b00001000,
  RX_INVALID_ID = 0b00010000, RX_INVALID_DATA = 0b00100000, TX_NOTPOSSIBLE = 0b01000000, TX_ERROR = 0b10000000,
  TX_BITS = 0b11000000, RX_BITS = 0b00111111
}

Functions

byte sysStatusPacket (void)
void update_applyControlOn (byte packet)
static void updateServoSensors (byte *message)
static void updateSpecialSensors (byte *message)
static void updateActuators (byte *can_message)
static void updateControllers (byte *can_message)
static void setError (enum CAN_ERRORS error)
void initCan (void)
bool sendCanMessage (byte index)
bool receiveCanMessage (byte buffer)

Variables

struct {
   enum CAN_ERRORS   flags
   byte   tx_count
   byte   rx_count
   unsigned char   which
   struct {
      unsigned char   vpotImp
      unsigned int   vpotMin
      unsigned int   vpotMin_prev
   }   measure [N_SERVOS]
canErrors

Define Documentation

#define applyControlOn x,
srv   )     (byte) ((x >> srv) & 1)
 

#define CAN_DATA1   1
 

#define CAN_MESSAGE_LENGTH   8
 

#define CAN_TYPE   0
 

#define canIndex  )     (((unsigned int) (x) & CANINDEX_MASK ) >> CANINDEX_LOC )
 

#define canIndex_patt  )     (((unsigned int) (y) << CANINDEX_LOC ) & CANINDEX_MASK )
 

#define controlOn_patt srv   )     (((byte) sensors.sysStatus.controlOn[srv] & 1) << (CONTROLON_LOC+srv))
 

#define deadlineError_patt   (((byte) sensors.sysStatus.deadlineError << DEADLINEERROR_LOC) & DEADLINEERROR_MASK)
 

#define filter ind   )     (xcuDST_patt(HOST_SCU) | canIndex_patt(ind))
 

#define footID_patt  )     (byte) (((unsigned int) (y) << FOOTID_LOC ) & FOOTID_MASK )
 

#define identifierMSG op,
ind   )     (xcuSRC_patt(HOST_SCU) | xcuDST_patt(HOST_MCU) | canIndex_patt(ind) | operation_patt(op))
 

#define motionFin_patt srv   )     (((byte) sensors.sysStatus.motionFin[srv] & 1) << (MOTIONFIN_LOC+srv))
 

#define msgIndex_patt  )     (byte) (((unsigned int) (y) << MSGINDEX_LOC) & MSGINDEX_MASK)
 

#define operation  )     (((unsigned int) (x) & OPERATION_MASK) >> OPERATION_LOC)
 

#define operation_patt  )     (((unsigned int) (y) << OPERATION_LOC) & OPERATION_MASK)
 

#define reset_patt   (((byte) sensors.sysStatus.reset << RESET_LOC) & RESET_MASK)
 

#define scuSRC_patt  )     (byte) (((unsigned int) (y) << SCUSRC_LOC ) & SCUSRC_MASK )
 

#define sensors_patt  )     (byte) (((unsigned int) (y) << SENSORS_LOC ) & SENSORS_MASK )
 

#define special_patt  )     (byte) (((unsigned int) (y) << SPECIAL_LOC ) & SPECIAL_MASK )
 

#define typePacket pack_id,
sp,
sens,
foot   )     (scuSRC_patt(HOST_SCU) | msgIndex_patt(pack_id) | special_patt(sp) | sensors_patt(sens) | footID_patt(foot))
 

#define xcuDST  )     (((unsigned int) (x) & XCUDST_MASK ) >> XCUDST_LOC )
 

#define xcuDST_patt  )     (((unsigned int) (y) << XCUDST_LOC ) & XCUDST_MASK )
 

#define xcuSRC  )     (((unsigned int) (x) & XCUSRC_MASK ) >> XCUSRC_LOC )
 

#define xcuSRC_patt  )     (((unsigned int) (y) << XCUSRC_LOC ) & XCUSRC_MASK )
 


Enumeration Type Documentation

enum CAN_ERRORS
 

Enumerator:
CAN_ERROR 
RX_INVALIDMSG_ERROR 
RX_OVERFLOW_ERROR 
RX_INVALID_LENGTH 
RX_INVALID_ID 
RX_INVALID_DATA 
TX_NOTPOSSIBLE 
TX_ERROR 
TX_BITS 
RX_BITS 

enum MESSAGE_IDENTIFIER
 

Enumerator:
XCUSRC_MASK 
XCUDST_MASK 
CANINDEX_MASK 
OPERATION_MASK 
CAN_MASK 
XCUSRC_LOC 
XCUDST_LOC 
CANINDEX_LOC 
OPERATION_LOC 
OP_UPDATE_SENSORS 
OP_UPDATE_ACTUATORS 
OP_SLAVECAN_STATUS 

enum MESSAGE_SYSSTATUS_PACKET
 

Enumerator:
DEADLINEERROR_MASK 
RESET_MASK 
CONTROLON_MASK 
MOTIONFIN_MASK 
DEADLINEERROR_LOC 
RESET_LOC 
CONTROLON_LOC 
MOTIONFIN_LOC 

enum MESSAGE_UPDATE_SENSORS
 

Enumerator:
SCUSRC_MASK 
MSGINDEX_MASK 
SPECIAL_MASK 
SENSORS_MASK 
FOOTID_MASK 
SCUSRC_LOC 
MSGINDEX_LOC 
SPECIAL_LOC 
SENSORS_LOC 
FOOTID_LOC 
MSGINDEX_1 
MSGINDEX_2 


Function Documentation

void initCan void   ) 
 

bool receiveCanMessage byte  buffer  ) 
 

bool sendCanMessage byte  index  ) 
 

static void setError enum CAN_ERRORS  error  )  [static]
 

byte sysStatusPacket void   ) 
 

void update_applyControlOn byte  packet  ) 
 

static void updateActuators byte can_message  )  [static]
 

static void updateControllers byte can_message  )  [static]
 

static void updateServoSensors byte message  )  [static]
 

static void updateSpecialSensors byte message  )  [static]
 


Variable Documentation

struct { ... } canErrors
 

enum CAN_ERRORS flags
 

byte rx_count
 

byte tx_count
 


Generated on Fri Feb 24 16:43:46 2006 for Slave Unit by  doxygen 1.4.6-NO