Subversion Repositories HomeAutomation

Rev

Rev 378 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. #ifndef CAN_H_
  2. #define CAN_H_
  3.  
  4. /*-----------------------------------------------------------------------------
  5.  * Includes
  6.  *---------------------------------------------------------------------------*/
  7. #include <inttypes.h>
  8.  
  9.  
  10. /*-----------------------------------------------------------------------------
  11.  * Type Definitions
  12.  *---------------------------------------------------------------------------*/
  13.  
  14.  
  15. /**
  16.  * CAN Return Type. Most CAN functions return one of these.
  17.  */
  18. typedef enum {
  19.     CAN_FAIL = -1,                  /* The function failed */
  20.     CAN_OK = 1,                     /* The function succeeded */
  21.    
  22.     CAN_MSG_AVAILABLE = 2,          /* Messsages are available */
  23.     CAN_NO_MSG_AVAILABLE = -2,      /* Messages are NOT available */
  24.    
  25.     //CAN_CTRLERROR = -4
  26. } Can_Return_t;
  27.  
  28.  
  29. /**
  30.  * CAN Message Type. Stores a complete CAN frame.
  31.  */
  32. typedef struct {
  33.     /*
  34.      * ID section. Contains either 29bit ID or 11bit ID (depending on ExtendedFlag).
  35.      */
  36.     uint32_t Id;
  37.    
  38.     /*
  39.      * DLC section. Contains the data length expressed in number of bytes. Range [0,8].
  40.      */
  41.     uint8_t DataLength;
  42.    
  43.     /**
  44.      * Extended frame flag. Set to 1 if the ID is 29bit, or 0 if it is 11bit.
  45.      */
  46.     uint8_t ExtendedFlag;
  47.    
  48.     /**
  49.      * Remote frame flag. Set to 1 if the frame is a remote frame. 0 otherwise.
  50.      */
  51.     uint8_t RemoteFlag;
  52.    
  53.     /*
  54.      * DATA section. Contains the 8 data bytes.
  55.      */
  56.     union {
  57.         /* read as 8bit unsigned data */
  58.         uint8_t bytes[8];
  59.        
  60.         /* read as 16bit unsigned data */
  61.         uint16_t words[4];
  62.        
  63.         /* read as 32bit unsigned data */
  64.         uint32_t dwords[2];
  65.     } Data;
  66. } Can_Message_t;
  67.  
  68. //---------------------------------------------------------------------------
  69. // CAN ID definitions
  70.  
  71. #define CAN_MASK_CLASS      0x1E000000
  72. #define CAN_SHIFT_CLASS     25
  73. //------------------------------------
  74. #define CAN_NMT             0x00UL
  75. #define CAN_MASK_NMT_TYPE   0x00FF0000
  76. #define CAN_SHIFT_NMT_TYPE  16
  77. #define CAN_MASK_NMT_SID    0x0000FF00
  78. #define CAN_SHIFT_NMT_SID   8
  79. #define CAN_MASK_NMT_RID    0x000000FF
  80. #define CAN_SHIFT_NMT_RID   0
  81. #define CAN_NMT_TIME        0x00UL  //D0:3 UNIX_TIME, D4:7 {YY:6, MM:4, DD:5, hh:5, mm:6, ss:6}
  82. #define CAN_NMT_RESET       0x04UL
  83. #define CAN_NMT_BIOS_START  0x08UL  //D0: VER7:0, D1:VER15:8, D2: 0 if no app, >0 if app
  84. #define CAN_NMT_PGM_START   0x0CUL  //D0: ADR7:0, D1:ADR15:8, D2:ADR23:16, D3:ADR31:24
  85. #define CAN_NMT_PGM_DATA    0x10UL  //D0: OFS7:0, D1: OFS15:8, D(n+2): DATAn7:0 [n=0..x] [x=0..5]
  86. #define CAN_NMT_PGM_END     0x14UL  //D0: CRC7:0, D1: CRC15:8
  87. #define CAN_NMT_PGM_COPY    0x18UL  //D0: SRC7:0, D1:SRC15:8, D0: DST7:0, D1:DST15:8, D0: LEN7:0, D1:LEN15:8
  88. #define CAN_NMT_PGM_ACK     0x1CUL  //D0: OFS7:0, D1: OFS15:8
  89. #define CAN_NMT_PGM_NACK    0x20UL  //D0: OFS7:0, D1: OFS15:8
  90. #define CAN_NMT_START_APP   0x24UL
  91. #define CAN_NMT_APP_START   0x28UL  //D0: ID7:0, D1:ID15:8, D2: VER7:0, D3:VER15:8
  92. #define CAN_NMT_HEARTBEAT   0x2CUL
  93. //------------------------------------
  94. #define CAN_SNS             0x02UL
  95. #define CAN_MASK_SNS_FUNCC  0x01FF8000
  96. #define CAN_SHIFT_SNS_FUNCC 15
  97. #define CAN_MASK_SNS_NID    0x00007E00
  98. #define CAN_SHIFT_SNS_NID   9
  99. #define CAN_MASK_SNS_SID    0x000001FF
  100. #define CAN_SHIFT_SNS_SID   0
  101. //------------------------------------
  102. #define CAN_PKT             0x06UL
  103. //------------------------------------
  104. #define CAN_CON             0x08UL
  105. //------------------------------------
  106. #define CAN_TST             0x0FUL
  107. //------------------------------------
  108.  
  109. #endif
  110.