Subversion Repositories HomeAutomation

Rev

Rev 250 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 250 Rev 253
1
#ifndef CAN_H_
1
#ifndef CAN_H_
2
#define CAN_H_
2
#define CAN_H_
3
 
3
 
4
/*-----------------------------------------------------------------------------
4
/*-----------------------------------------------------------------------------
5
 * Includes
5
 * Includes
6
 *---------------------------------------------------------------------------*/
6
 *---------------------------------------------------------------------------*/
7
#include <inttypes.h>
7
#include <inttypes.h>
8
 
8
 
9
 
9
 
10
/*-----------------------------------------------------------------------------
10
/*-----------------------------------------------------------------------------
11
 * Type Definitions
11
 * Type Definitions
12
 *---------------------------------------------------------------------------*/
12
 *---------------------------------------------------------------------------*/
13
 
13
 
14
 
14
 
15
/**
15
/**
16
 * CAN Return Type. Most CAN functions return one of these.
16
 * CAN Return Type. Most CAN functions return one of these.
17
 */
17
 */
18
typedef enum {
18
typedef enum {
19
    CAN_FAIL = -1,                  /* The function failed */
19
    CAN_FAIL = -1,                  /* The function failed */
20
    CAN_OK = 1,                     /* The function succeeded */
20
    CAN_OK = 1,                     /* The function succeeded */
21
   
21
   
22
    CAN_MSG_AVAILABLE = 2,          /* Messsages are available */
22
    CAN_MSG_AVAILABLE = 2,          /* Messsages are available */
23
    CAN_NO_MSG_AVAILABLE = -2,      /* Messages are NOT available */
23
    CAN_NO_MSG_AVAILABLE = -2,      /* Messages are NOT available */
24
   
24
   
25
    //CAN_CTRLERROR = -4
25
    //CAN_CTRLERROR = -4
26
} Can_Return_t;
26
} Can_Return_t;
27
 
27
 
28
 
28
 
29
/**
29
/**
30
 * CAN Message Type. Stores a complete CAN frame.
30
 * CAN Message Type. Stores a complete CAN frame.
31
 */
31
 */
32
typedef struct {
32
typedef struct {
33
    /*
33
    /*
34
     * ID section. Contains either 29bit ID or 11bit ID (depending on ExtendedFlag).
34
     * ID section. Contains either 29bit ID or 11bit ID (depending on ExtendedFlag).
35
     */
35
     */
36
    uint32_t Id;
36
    uint32_t Id;
37
   
37
   
38
    /*
38
    /*
39
     * DLC section. Contains the data length expressed in number of bytes. Range [0,8].
39
     * DLC section. Contains the data length expressed in number of bytes. Range [0,8].
40
     */
40
     */
41
    uint8_t DataLength;
41
    uint8_t DataLength;
42
   
42
   
43
    /**
43
    /**
44
     * Extended frame flag. Set to 1 if the ID is 29bit, or 0 if it is 11bit.
44
     * Extended frame flag. Set to 1 if the ID is 29bit, or 0 if it is 11bit.
45
     */
45
     */
46
    uint8_t ExtendedFlag;
46
    uint8_t ExtendedFlag;
47
   
47
   
48
    /**
48
    /**
49
     * Remote frame flag. Set to 1 if the frame is a remote frame. 0 otherwise.
49
     * Remote frame flag. Set to 1 if the frame is a remote frame. 0 otherwise.
50
     */
50
     */
51
    uint8_t RemoteFlag;
51
    uint8_t RemoteFlag;
52
   
52
   
53
    /*
53
    /*
54
     * DATA section. Contains the 8 data bytes.
54
     * DATA section. Contains the 8 data bytes.
55
     */
55
     */
56
    union {
56
    union {
57
        /* read as 8bit unsigned data */
57
        /* read as 8bit unsigned data */
58
        uint8_t bytes[8];
58
        uint8_t bytes[8];
59
       
59
       
60
        /* read as 16bit unsigned data */
60
        /* read as 16bit unsigned data */
61
        uint16_t words[4];
61
        uint16_t words[4];
62
       
62
       
63
        /* read as 32bit unsigned data */
63
        /* read as 32bit unsigned data */
64
        uint32_t dwords[2];
64
        uint32_t dwords[2];
65
    } Data;
65
    } Data;
66
} Can_Message_t;
66
} Can_Message_t;
67
 
67
 
-
 
68
//---------------------------------------------------------------------------
-
 
69
// CAN ID definitions
68
 
70
 
-
 
71
#define CAN_MASK_CLASS      0x1E000000
-
 
72
#define CAN_SHIFT_CLASS     25
69
/*-----------------------------------------------------------------------------
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
70
 * Public Function Prototypes
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
71
 *---------------------------------------------------------------------------*/
93
//------------------------------------
72
 
-
 
-
 
94
#define CAN_SNS             0x02UL
-
 
95
#define CAN_MASK_SNS_FUNCC  0x01FF8000
73
//Can_Return_t Can_Init(void);
96
#define CAN_SHIFT_SNS_FUNCC 15
74
//Can_Return_t Can_Send(Can_Message_t* msg);
97
#define CAN_MASK_SNS_NID    0x00007E00
75
//void Can_Service(void);
98
#define CAN_SHIFT_SNS_NID   9
76
//Can_Return_t Can_Receive(Can_Message_t *msg);
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
//------------------------------------
77
 
108
 
78
#endif
109
#endif
79
 
110