-
Notifications
You must be signed in to change notification settings - Fork 7
/
mcp_can.h
155 lines (130 loc) · 7.65 KB
/
mcp_can.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
mcp_can.h
2012 Copyright (c) Seeed Technology Inc. All right reserved.
Author:Loovee
2014-1-16
Contributor:
Cory J. Fowler
Latonita
Woodward1
Mehtajaghvi
BykeBlast
TheRo0T
Tsipizic
ralfEdmund
Nathancheek
BlueAndi
Adlerweb
Btetz
Hurvajs
The MIT License (MIT)
Copyright (c) 2013 Seeed Technology Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef _MCP2515_H_
#define _MCP2515_H_
#include "mcp_can_dfs.h"
#define MAX_CHAR_IN_MESSAGE 8
#define HEADER_SIZE 4
class MCP_CAN
{
private:
INT8U m_nExtFlg; /* identifier xxxID */
/* either extended (the 29 LSB) */
/* or standard (the 11 LSB) */
INT32U m_nID; /* can id */
INT8U m_nDlc; /* data length: */
INT8U m_nDta[MAX_CHAR_IN_MESSAGE]; /* data */
INT8U m_nRtr; /* rtr */
INT8U m_nfilhit;
INT8U SPICS;
INT8U canHeader[HEADER_SIZE];
INT8U _prio;//priority
INT8U _minprio;//min priority
/*
* mcp2515 driver function
*/
// private:
private:
void mcp2515_reset(void); /* reset mcp2515 */
INT8U mcp2515_readRegister(const INT8U address); /* read mcp2515's register */
void mcp2515_readRegisterS(const INT8U address,
INT8U values[],
const INT8U n);
void mcp2515_setRegister(const INT8U address, /* set mcp2515's register */
const INT8U value);
void mcp2515_setRegisterS(const INT8U address, /* set mcp2515's registers */
const INT8U values[],
const INT8U n);
void mcp2515_initCANBuffers(void);
void mcp2515_modifyRegister(const INT8U address, /* set bit of one register */
const INT8U mask,
const INT8U data);
INT8U mcp2515_readStatus(void); /* read mcp2515's Status */
INT8U mcp2515_setCANCTRL_Mode(const INT8U newmode); /* set mode */
INT8U mcp2515_configRate(const INT8U canSpeed); /* set boadrate */
INT8U mcp2515_configRate(const INT8U canSpeed, const INT8U clock);
INT8U mcp2515_init(const INT8U canSpeed); /* mcp2515init */
INT8U mcp2515_init(const INT8U canSpeed, const INT8U clock);
void mcp2515_write_id( const INT8U mcp_addr, /* write can id */
const INT8U ext,
const INT32U id );
void mcp2515_read_id( const INT8U mcp_addr, /* read can id */
INT8U* ext,
INT32U* id );
void mcp2515_write_canMsg( const INT8U buffer_sidh_addr ); /* write can msg */
void mcp2515_read_canMsg( const INT8U buffer_sidh_addr); /* read can msg */
void mcp2515_start_transmit(const INT8U mcp_addr); /* start transmit */
INT8U mcp2515_getNextFreeTXBuf(INT8U *txbuf_n); /* get Next free txbuf */
void setRTMBit();/*set the bit in case need to send a Request Transfer Message*/
void unsetRTMBit(); /*set the bit in case need to send a Request Transfer Message */
/*
* can operator function
*/
INT8U setMsg(INT32U id, INT8U ext, INT8U len, INT8U rtr, INT8U *pData); /* set message */
INT8U setMsg(INT32U id, INT8U ext, INT8U len, INT8U *pData); /* set message */
INT8U clearMsg(); /* clear all message to zero */
INT8U readMsg(); /* read message */
INT8U readMsg(INT8U buf_num); /* read message from a specific buffer */
INT8U sendMsg(); /* send message */
public:
MCP_CAN(INT8U _CS);
MCP_CAN();/*simple constructor that don't initiate the spi*/
void set_cs(INT8U _CS);/*initiate the spi*/
INT8U begin(INT8U speedset, const INT8U clock); /* init can */
INT8U init_Mask(INT8U num, INT8U ext, INT32U ulData); /* init Masks */
INT8U init_Filt(INT8U num, INT8U ext, INT32U ulData); /* init filters */
INT8U sendMsgBuf(INT32U id, INT8U ext, INT8U rtr, INT8U len, INT8U *buf); /* send buf */
INT8U sendMsgBuf(INT32U id, INT8U ext, INT8U len, INT8U *buf); /* send buf */
INT8U readMsgBuf(INT8U *len, INT8U *buf); /* read buf */
INT8U readMsgBuf(INT8U *len, INT8U *buf,INT8U buf_num); /* read the bufnum */
INT8U readMsgBufID(INT32U *ID, INT8U *len, INT8U *buf); /* read buf with object ID */
INT8U checkReceive(void); /* if something received */
INT8U checkError(void); /* if something error */
INT32U getCanId(void); /* get can id when receive */
INT8U isRemoteRequest(void); /* get RR flag when receive */
INT8U isExtendedFrame(void); /* did we recieve 29bit frame? */
INT8U sendRTMMessage(INT32U id); /* send the request transfer message */
INT8U isRTMMessage(); /* check if received message is a request transfer message */
void getCanHeader(INT8U *buf);
void setPriority(INT8U prio,INT8U minprio); //set the first 2 bits of can header
//set the bits 8 and 7 of header
};
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/