amiro-blt / Target / Source / xcp.h @ 69661903
History | View | Annotate | Download (9.42 KB)
1 |
/************************************************************************************//** |
---|---|
2 |
* \file Source\xcp.h
|
3 |
* \brief XCP 1.0 protocol core header file.
|
4 |
* \ingroup Core
|
5 |
* \internal
|
6 |
*----------------------------------------------------------------------------------------
|
7 |
* C O P Y R I G H T
|
8 |
*----------------------------------------------------------------------------------------
|
9 |
* Copyright (c) 2011 by Feaser http://www.feaser.com All rights reserved
|
10 |
*
|
11 |
*----------------------------------------------------------------------------------------
|
12 |
* L I C E N S E
|
13 |
*----------------------------------------------------------------------------------------
|
14 |
* This file is part of OpenBLT. OpenBLT is free software: you can redistribute it and/or
|
15 |
* modify it under the terms of the GNU General Public License as published by the Free
|
16 |
* Software Foundation, either version 3 of the License, or (at your option) any later
|
17 |
* version.
|
18 |
*
|
19 |
* OpenBLT is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
20 |
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
21 |
* PURPOSE. See the GNU General Public License for more details.
|
22 |
*
|
23 |
* You should have received a copy of the GNU General Public License along with OpenBLT.
|
24 |
* If not, see <http://www.gnu.org/licenses/>.
|
25 |
*
|
26 |
* A special exception to the GPL is included to allow you to distribute a combined work
|
27 |
* that includes OpenBLT without being obliged to provide the source code for any
|
28 |
* proprietary components. The exception text is included at the bottom of the license
|
29 |
* file <license.html>.
|
30 |
*
|
31 |
* \endinternal
|
32 |
****************************************************************************************/
|
33 |
#ifndef XCP_H
|
34 |
#define XCP_H
|
35 |
|
36 |
/****************************************************************************************
|
37 |
* Configuration
|
38 |
****************************************************************************************/
|
39 |
/** \brief Maximum length of the transport layer's command transmit object packet. */
|
40 |
#if defined(BOOT_XCP_CUSTOM_RX_MAX_DATA)
|
41 |
#define XCP_CTO_PACKET_LEN (BOOT_XCP_CUSTOM_RX_MAX_DATA)
|
42 |
#else
|
43 |
#define XCP_CTO_PACKET_LEN (ComGetActiveInterfaceMaxRxLen())
|
44 |
#endif
|
45 |
|
46 |
/** \brief Maximum length of the transport layer's data transmit object packet. */
|
47 |
#if defined(BOOT_XCP_CUSTOM_TX_MAX_DATA)
|
48 |
#define XCP_DTO_PACKET_LEN (BOOT_XCP_CUSTOM_TX_MAX_DATA)
|
49 |
#else
|
50 |
#define XCP_DTO_PACKET_LEN (ComGetActiveInterfaceMaxTxLen())
|
51 |
#endif
|
52 |
|
53 |
/** \brief Name in string format that is used to identify the ECU to the XCP master
|
54 |
* using the GET_ID command.
|
55 |
*/
|
56 |
#define XCP_STATION_ID_STRING "OpenBLT" |
57 |
|
58 |
#if (BOOT_CPU_BYTE_ORDER_MOTOROLA > 0) |
59 |
/** \brief XCP byte ordering according to the Motorola (little-endian). */
|
60 |
#define XCP_MOTOROLA_FORMAT (0x01) |
61 |
#else
|
62 |
/** \brief XCP byte ordering according to the Intel (big-endian). */
|
63 |
#define XCP_MOTOROLA_FORMAT (0x00) |
64 |
#endif
|
65 |
|
66 |
/** \brief Enable (=1) or disable (=0) support for the calibration resource. This is
|
67 |
* required when data is written to RAM during the XCP session.
|
68 |
*/
|
69 |
#define XCP_RES_CALIBRATION_EN (0) |
70 |
|
71 |
/** \brief Enable (=1) or disable (=0) support for the paging resource. This is
|
72 |
* required when switching between application specific calibration pages
|
73 |
* should be supported. In this case the application specific external
|
74 |
* functions AppCalSetPage and AppCalGetPage must be provided.
|
75 |
*/
|
76 |
#define XCP_RES_PAGING_EN (0) |
77 |
|
78 |
/** \brief Enable (=1) or disable (=0) support for the programming resource. This is
|
79 |
* required when non-volatile memory will be erased or programmed during an
|
80 |
* XCP session. In this case the following external hardware specific
|
81 |
* functions must be provided: HwNvmWriteMemory, HwNvmEraseMemory and
|
82 |
* HwCpuReset.
|
83 |
*/
|
84 |
#define XCP_RES_PROGRAMMING_EN (1) |
85 |
|
86 |
/** \brief Enable (=1) or disable (=0) support for the data acquisition resource. This
|
87 |
* note that this feature is currently not supported by the XCP driver.
|
88 |
*/
|
89 |
#define XCP_RES_DATA_ACQUISITION_EN (0) |
90 |
|
91 |
/** \brief Enable (=1) or disable (=0) support for the data stimulation resource. This
|
92 |
* note that this feature is currently not supported by the XCP driver.
|
93 |
*/
|
94 |
#define XCP_RES_DATA_STIMULATION_EN (0) |
95 |
|
96 |
/** \brief Enable (=1) or disable (=0) support for the seed/key protection feature.
|
97 |
* If enabled, the XCP master has to perform a GET_SEED/UNLOCK sequence to
|
98 |
* obtain access to a resource. The protection algorithm is implemented in
|
99 |
* XcpGetSeed and XcpVerifyKey.
|
100 |
*/
|
101 |
#if (BOOT_XCP_SEED_KEY_ENABLE > 0) |
102 |
#define XCP_SEED_KEY_PROTECTION_EN (1) |
103 |
#else
|
104 |
#define XCP_SEED_KEY_PROTECTION_EN (0) |
105 |
#endif
|
106 |
|
107 |
|
108 |
/****************************************************************************************
|
109 |
* Defines
|
110 |
****************************************************************************************/
|
111 |
/* xcp supported resources */
|
112 |
/** \brief ProGraMming resource. */
|
113 |
#define XCP_RES_PGM (0x10) |
114 |
/** \brief data STIMulation resource. */
|
115 |
#define XCP_RES_STIM (0x08) |
116 |
/** \brief Data AcQuisition resource. */
|
117 |
#define XCP_RES_DAQ (0x04) |
118 |
/** \brief CALibration and PAGing resource. */
|
119 |
#define XCP_RES_CALPAG (0x01) |
120 |
|
121 |
/* xcp checksum types */
|
122 |
/** \brief Add byte into byte checksum. */
|
123 |
#define XCP_CS_ADD11 (0x01) |
124 |
/** \brief Add byte into word checksum. */
|
125 |
#define XCP_CS_ADD12 (0x02) |
126 |
/** \brief Add byte into dword checksum. */
|
127 |
#define XCP_CS_ADD14 (0x03) |
128 |
/** \brief Add word into word checksum. */
|
129 |
#define XCP_CS_ADD22 (0x04) |
130 |
/** \brief Add word into dword checksum. */
|
131 |
#define XCP_CS_ADD24 (0x05) |
132 |
/** \brief Add dword into dword checksum. */
|
133 |
#define XCP_CS_ADD44 (0x06) |
134 |
/** \brief Use 16-bit CRC algorithm. */
|
135 |
#define XCP_CS_CRC16 (0x07) |
136 |
/** \brief Use 16-bit CRC CITT algorithm. */
|
137 |
#define XCP_CS_CRC16CITT (0x08) |
138 |
/** \brief Use 32-bit CRC algorithm. */
|
139 |
#define XCP_CS_CRC32 (0x09) |
140 |
/** \brief Use user defined algorithm. */
|
141 |
#define XCP_CS_USER (0xff) |
142 |
|
143 |
|
144 |
/****************************************************************************************
|
145 |
* Function prototypes
|
146 |
****************************************************************************************/
|
147 |
void XcpInit(void); |
148 |
blt_bool XcpIsConnected(void);
|
149 |
#if (BOOTLOADER_OF_MAIN_DEVICE > 0) |
150 |
blt_bool XcpWasConnectedToMain(void);
|
151 |
#endif
|
152 |
void XcpPacketTransmitted(void); |
153 |
#if (BOOT_GATE_ENABLE > 0) |
154 |
void XcpPacketReceived(blt_int8u *data, blt_int16s dataLength, blt_bool fromGate);
|
155 |
#else
|
156 |
void XcpPacketReceived(blt_int8u *data, blt_int16s dataLength);
|
157 |
#endif /* BOOT_GATE_ENABLE > 0 */ |
158 |
#if (BOOT_GATE_ENABLE > 0) |
159 |
void XcpPacketReceivedForwarding(blt_int8u *data, blt_int16s dataLength);
|
160 |
void XcpGatewayPacketReceived(blt_int8u *data, blt_int16s dataLength);
|
161 |
#endif
|
162 |
|
163 |
|
164 |
/****************************************************************************************
|
165 |
* Configuration check
|
166 |
****************************************************************************************/
|
167 |
#if (XCP_RES_DATA_ACQUISITION_EN == 1) |
168 |
#error "XCP.H, Current XCP driver does not support Data AcQuisition resource." |
169 |
#endif
|
170 |
|
171 |
|
172 |
#if (XCP_RES_DATA_STIMULATION_EN == 1) |
173 |
#error "XCP.H, Current XCP driver does not support Data StIMulation resource." |
174 |
#endif
|
175 |
|
176 |
|
177 |
#ifndef XCP_CTO_PACKET_LEN
|
178 |
#error "XCP.H, Configuration macro XCP_CTO_PACKET_LEN is missing." |
179 |
#endif
|
180 |
|
181 |
|
182 |
#ifndef XCP_DTO_PACKET_LEN
|
183 |
#error "XCP.H, Configuration macro XCP_DTO_PACKET_LEN is missing." |
184 |
#endif
|
185 |
|
186 |
|
187 |
#ifndef XCP_STATION_ID_STRING
|
188 |
#error "XCP.H, Configuration macro XCP_STATION_ID_STRING is missing." |
189 |
#endif
|
190 |
|
191 |
|
192 |
#ifndef XCP_RES_CALIBRATION_EN
|
193 |
#error "XCP.H, Configuration macro XCP_RES_CALIBRATION_EN is missing." |
194 |
#endif
|
195 |
|
196 |
#if (XCP_RES_CALIBRATION_EN < 0) || (XCP_RES_CALIBRATION_EN > 1) |
197 |
#error "XCP.H, XCP_RES_CALIBRATION_EN must be 0 or 1." |
198 |
#endif
|
199 |
|
200 |
|
201 |
#ifndef XCP_RES_PAGING_EN
|
202 |
#error "XCP.H, Configuration macro XCP_RES_PAGING_EN is missing." |
203 |
#endif
|
204 |
|
205 |
#if (XCP_RES_PAGING_EN < 0) || (XCP_RES_PAGING_EN > 1) |
206 |
#error "XCP.H, XCP_RES_PAGING_EN must be 0 or 1." |
207 |
#endif
|
208 |
|
209 |
|
210 |
#ifndef XCP_RES_PROGRAMMING_EN
|
211 |
#error "XCP.H, Configuration macro XCP_RES_PAGING_EN is missing." |
212 |
#endif
|
213 |
|
214 |
#if (XCP_RES_PROGRAMMING_EN < 0) || (XCP_RES_PROGRAMMING_EN > 1) |
215 |
#error "XCP.H, XCP_RES_PROGRAMMING_EN must be 0 or 1." |
216 |
#endif
|
217 |
|
218 |
|
219 |
#ifndef XCP_RES_DATA_ACQUISITION_EN
|
220 |
#error "XCP.H, Configuration macro XCP_RES_DATA_ACQUISITION_EN is missing." |
221 |
#endif
|
222 |
|
223 |
#if (XCP_RES_DATA_ACQUISITION_EN < 0) || (XCP_RES_DATA_ACQUISITION_EN > 1) |
224 |
#error "XCP.H, XCP_RES_DATA_ACQUISITION_EN must be 0 or 1." |
225 |
#endif
|
226 |
|
227 |
|
228 |
#ifndef XCP_RES_DATA_STIMULATION_EN
|
229 |
#error "XCP.H, Configuration macro XCP_RES_DATA_STIMULATION_EN is missing." |
230 |
#endif
|
231 |
|
232 |
#if (XCP_RES_DATA_STIMULATION_EN < 0) || (XCP_RES_DATA_STIMULATION_EN > 1) |
233 |
#error "XCP.H, XCP_RES_DATA_STIMULATION_EN must be 0 or 1." |
234 |
#endif
|
235 |
|
236 |
|
237 |
#ifndef XCP_SEED_KEY_PROTECTION_EN
|
238 |
#error "XCP.H, Configuration macro XCP_SEED_KEY_PROTECTION_EN is missing." |
239 |
#endif
|
240 |
|
241 |
#if (XCP_SEED_KEY_PROTECTION_EN < 0) || (XCP_SEED_KEY_PROTECTION_EN > 1) |
242 |
#error "XCP.H, XCP_SEED_KEY_PROTECTION_EN must be 0 or 1." |
243 |
#endif
|
244 |
|
245 |
|
246 |
#endif /* XCP_H */ |
247 |
/******************************** end of xcp.h *~~~~~***********************************/
|