Details | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 240 | andfri | 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 | |||
| 253 | andfri | 68 | //--------------------------------------------------------------------------- |
| 69 | // CAN ID definitions |
||
| 240 | andfri | 70 | |
| 253 | andfri | 71 | #define CAN_MASK_CLASS 0x1E000000 |
| 72 | #define CAN_SHIFT_CLASS 25 |
||
| 73 | //------------------------------------ |
||
| 74 | #define CAN_NMT 0x00UL |
||
| 75 | #define CAN_MASK_NMT_TYPE 0x01F00000 |
||
| 76 | #define CAN_SHIFT_NMT_TYPE 20 |
||
| 77 | #define CAN_MASK_NMT_NID 0x000F0000 |
||
| 78 | #define CAN_SHIFT_NMT_NID 16 |
||
| 79 | #define CAN_MASK_NMT_SID 0x0000FF00 |
||
| 80 | #define CAN_SHIFT_NMT_SID 8 |
||
| 81 | #define CAN_MASK_NMT_RID 0x000000FF |
||
| 82 | #define CAN_SHIFT_NMT_RID 0 |
||
| 83 | #define CAN_NMT_RESET 0x00UL |
||
| 84 | #define CAN_NMT_BIOS_START 0x01UL //D0: VER7:0, D1:VER15:8, D2: 0 if no app, >0 if app |
||
| 85 | #define CAN_NMT_PGM_START 0x02UL //D0: ADR7:0, D1:ADR15:8, D2:ADR23:16, D3:ADR31:24 |
||
| 86 | #define CAN_NMT_PGM_DATA 0x03UL //D0: OFS7:0, D1: OFS15:8, D(n+2): DATAn7:0 [n=0..x] [x=0..5] |
||
| 87 | #define CAN_NMT_PGM_END 0x04UL //D0: CRC7:0, D1: CRC15:8 |
||
| 88 | #define CAN_NMT_PGM_ACK 0x05UL //D0: OFS7:0, D1: OFS15:8 |
||
| 89 | #define CAN_NMT_PGM_NACK 0x06UL //D0: OFS7:0, D1: OFS15:8 |
||
| 90 | #define CAN_NMT_START_APP 0x07UL |
||
| 91 | #define CAN_NMT_APP_START 0x08UL //D0: ID7:0, D1:ID15:8, D2: VER7:0, D3:VER15:8 |
||
| 92 | #define CAN_NMT_HEARTBEAT 0x09UL |
||
| 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 0x0c000000 |
||
| 103 | //------------------------------------ |
||
| 104 | #define CAN_CON 0x10000000 |
||
| 105 | //------------------------------------ |
||
| 106 | #define CAN_TST 0x1E000000 |
||
| 107 | //------------------------------------ |
||
| 240 | andfri | 108 | |
| 109 | #endif |