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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
#ifndef __UDS_COMMON_H
#define __UDS_COMMON_H
#include "TYW_stdint.h"
#include "RTE_CAN.h"
//#include "CAN_Signal_Tx.h"
#include "RTE_CAN_NM.h"
#include "UDS_DTC.h"
#include "EOL_Para.h"
#include "COM_CAN.h"
#include "Services_Mileage.h"
//#include "Services_ODO.h"
#include "Common_Interface.h"
#include "UDS_ISO14229_Server.h"
#include "DoCAN_ISO15765_Config.h"
#include "CAN_Lib.h"
#include "UDS_ISO14229_Server_Config.h"
#include "Emulated_EEPROM.h"
#include "Watchdog.h"
#include "System_Monitor.h"
#include "RTE_ADC.h"
#include "rh850_macros.h"
/**
*正负反馈
*/
#define POSITIVE_RSP (uint8_t) 0x00 /*正反馈*/
#define NEGATIVE_RSP (uint8_t) (!POSITIVE_RSP) /*负反馈*/
/**
*DFlash
*/
#define NoNeedWait 0x00u
#define NeedWait 0x01u
#define JumpToBoot02 0x58856336u
#define JumpToBoot82 0x85583663u
/**
*10服务和子服务
*诊断会话
*/
#define DiagnosticSessionControl 0x10u
#define DefaultSession 0x01u
#define ProgrammingSession 0x02u
#define ExtendedDiagnosticSession 0x03u
/**
*11服务和子服务
*ECU复位
*/
#define ECUReset 0x11u
#define HardReset 0x01u
#define SoftReset 0x03u
/**
*14服务和子服务
*清除故障信息
*/
#define ClearDiagnosticInformation 0x14u
/**
*19服务和子服务
*读取故障信息
*/
#define ReadDTCInformation 0x19u
#define ReportNumberOfDTCByStatusMask 0x01u
#define ReportDTCByStatusMask 0x02u
#define ReportDTCSnapshotRecordByDTCNumber 0x04u
#define ReportSupportedDTC 0x0Au
#define NoSupport 0x00u
#define NeedSupport 0x01u
#define NormalVottage 0x00u
#define LowVottage 0x01u
#define HightVottage 0x02u
#define AgeingCount 40u
#define OfflineLoopMultiple 30u
#define MaxDTCPendingCount 1u
#define MinimumVoltage 16000u
#define RestoreMinimumVoltage 16500u
#define MaximumVoltage 32000u
#define RestoreMaximumVoltage 31500u
#define LowVoltageTimer 5000u
#define HightVoltageTimer 5000u
#define DTCError 0x01u
#define DTCErrorThisCycle 0x02u
#define DTCPending 0x04u
#define DTCConfirmed 0x08u
#define DTCNoTestLastClear 0x10u
#define DTCErrorLastClear 0x20u
#define DTCNoError 0xFEu
#define DTCNoTestThisCycle 0x40u
#define DTCMask 0x09u
#define KL15DTCEnableTimer 3500u
#define H_LVoltageDTCEnableTimer 500u
#define BusOffDTCEnableTimer 1000u
/**
*22服务和子服务
*通过DID来读数据
*/
#define ReadDataByIdentifier 0x22u
/**
*27服务和子服务
*安全访问
*/
#define SecurityAccess 0x27u
#define requestSeed_LV1 0x01u
#define sendKey_LV1 0x02u
#define requestSeed_LV3 0x03u
#define sendKey_LV3 0x04u
#define requestSeed_LV7 0x07u
#define sendKey_LV7 0x08u
#define NormalKeyUnlock 0x01u
#define NormalKeyLock 0x00u
#define BootKeyUnlock 0x02u
#define BootKeyLock 0x00u
#define SER27_MAX_REQ_SEED_NUM 0x03u
#define SER27_MAX_INVAILD_KEY_NUM 0x03u
#define SER27_CLEAR_REQ_SEEDED 0x00u
#define SER27_REQ_SEEDED 0x01u
#define SER27_ERR_DELAY_TIMER_EN 0x01u
#define SER27_ERR_DELAY_SER_PERIOD 100u
#define SER27_ERR_DELAY_TIMEOUT 10000u
/**
*28服务和子服务
*通讯控制
*/
#define CommunicationControl 0x28u
#define enableRxAndTx 0x00u
#define enableRxAndDisableTx 0x01u
#define disableRxAndEnableTx 0x02u
#define disableRxAndTx 0x03u
#define normalMsg 0x01u
#define networkManagementMsg 0x02u
#define networkManagementMsgAndnormalMsg 0x03u
/**
*2E服务和子服务
*通过DID来写数据
*/
#define WriteDataByIdentifier 0x2Eu
#define WriteBootData 0x00u
#define Write2EData 0x01u
#define WriteEOLData 0x02u
/**
*2F服务和子服务
*通过DID来控制ECU
*/
#define InputOutputControlByIdentifier 0x2Fu
#define WhiteColor 0x01u
#define BlackColor 0x02u
#define RedColor 0x03u
#define GreenColor 0x04u
#define BlueColor 0x05u
#define GaugeSpeed 0x01u
#define GaugeTacho 0x02u
#define GaugeFuel 0x03u
#define GaugeEngCoolantTemp 0x04u
#define ZeroPosition 0x00u
#define HalfPosition 0x01u
#define FullPosition 0x02u
#define Contrl 0x03u
#define Resume 0x00u
/**
*31服务和子服务
*历程控制
*/
#define RoutineControl 0x31u
#define startRoutine 0x01u
#define stopRoutine 0x02u
#define requestRoutineResults 0x03u
#define MaintenanceReset 0X62F1u
#define CheckMemory 0x0202u
#define UpdateConditionCheck 0x0203u
#define ECU_selftest 0xDFF0u
#define EraseMemory 0xFF00u
#define CheckProgrammingDependencies 0xFF01u
#define RoutineCompletedSuccessfully 0x04u
#define RoutineCompletedUnsuccessfully 0x05u
/**
*3E服务和子服务
*维持当前会话
*/
#define TesterPresent 0x3Eu
#define ZeroSubFunction 0x00u
/**
*85服务和子服务
*故障检测控制
*/
#define ControlDTCSetting 0x85u
#define DTCSettingOn 0x01u
#define DTCSettingOff 0x02u
/**
*诊断支持的否定响应代码
*/
#define positiveResponse 0x00u
#define serviceNotSupported 0x11u
#define subFunctionNotSupported 0x12u
#define incorrectMessageLength 0x13u
#define responseTooLong 0x14u
#define conditionsNotCorrect 0x22u
#define requestSequenceError 0x24u
#define requestOutOfRange 0x31u
#define securityAccessDenied 0x33u
#define invalidKey 0x35u
#define exceedNumberOfAttempts 0x36u
#define requiredTimeDelayNotExpired 0x37u
#define uploadDownloadNotAccepted 0x70u
#define transferDataSuspended 0x71u
#define generalProgrammingFailure 0x72u
#define wrongBlockSequenceCounter 0x73u
#define requestCorrectlyReceivedResponsePending 0x78u
#define subfunctionNotSupportinActiveSession 0x7Eu
#define serviceNotSupportedInActiveSession 0x7Fu
#define engineIsRunning 0x83u
#define engineIsNotRunning 0x84u
#define engineRunTimeTooLow 0x85u
#define voltageTooHigh 0x92u
#define voltageTooLow 0x93u
#define getDID(DID_H, DID_L) ((uint16_t)(((uint16_t)(DID_H)) << 8u) | (uint16_t)(DID_L))
#define toUint16_t(data0, data1) ((uint16_t)(((uint16_t)(data0)) << 8u) | (uint16_t)(data1))
#define toUint32_t(data0, data1, data2, data3) ((uint32_t)(((uint32_t)(data0)) << 24u) | (uint32_t)(((uint32_t)(data1)) << 16u) | (uint32_t)(((uint32_t)(data2)) << 8u) | (uint32_t)(data3))
#define isBCD(data) ((((uint8_t)((data) & 0x0Fu)) < 0x0Au) && (((uint8_t)(((uint8_t)((data) & 0xF0u)) >> 4u )) < 0x0Au))
#define isBoolean(data) (((uint8_t)(data) == 0u) || ((uint8_t)(data) == 1u))
#define DIM( X ) (sizeof(X) / sizeof((X)[0]))
/**
* TYPEDEFS
*/
typedef union
{
uint8_t Data[500];
struct
{
uint8_t SubID :7;
uint8_t PositiveSuppression :1;
uint8_t Data[499];
} SidDetail;
struct
{
uint8_t DID_H;
uint8_t DID_L;
uint8_t Data[498];
} DidDetail;
struct
{
uint32_t Parameter :24;
uint8_t Data[497];
} S14Detail;
struct
{
uint8_t SubID;
uint8_t DID_H;
uint8_t DID_L;
uint8_t Data[497];
} S31Detail;
struct
{
uint8_t SubID :7;
uint8_t PositiveSuppression :1;
uint8_t ContrlType;
uint8_t Data[498];
}S28Detail;
} msgDataUnion;
typedef struct
{
uint32_t msgID;
uint16_t msgDLC;
msgDataUnion msgData;
} DiagMSGUnion;
typedef struct
{
uint8_t LV1Ctrl;
uint8_t LV1DelayCtrl;
uint16_t LV1DelayTimer;
uint8_t LV1SafetyStatus;
uint8_t LV1Seed[2];
uint8_t LV1Key[2];
uint8_t LV3Ctrl;
uint8_t LV3DelayCtrl;
uint16_t LV3DelayTimer;
uint8_t LV3SafetyStatus;
uint8_t LV3Seed[2];
uint8_t LV3Key[2];
uint16_t Counter_1000ms;
uint8_t AllowRequestSeedFlag;
} Ser27_FlowCtrlUnion;
typedef struct
{
uint32_t Flag;
uint32_t JumpToBootFlag;
uint32_t AppValidFlag;
uint32_t S11Flag;
} DiagFlagUnion;
typedef struct
{
uint32_t Flag;
uint32_t RandNum;
uint16_t fill;
uint8_t LV1ReqSeedCnt;
uint8_t LV1InvaidKyeCnt;
uint8_t LV3ReqSeedCnt;
uint8_t LV3InvaidKyeCnt;
uint8_t LV7_ReqSeedCnt;
uint8_t LV7_InvaidKyeCnt;
} Ser27_FlowCtrlCntUnion;
typedef struct
{
uint32_t Flag;
uint8_t DID_F180[7];
uint8_t DID_F181[7];
uint8_t DID_F182[7];
uint8_t DID_F187[13];
uint8_t DID_F18A[8];
uint8_t DID_F18B[4];
uint8_t DID_F18C[20];
uint8_t DID_F193[6];
uint8_t DID_F195[6];
uint8_t DID_6000;
uint8_t DID_6001;
uint8_t DID_6078;
uint8_t DID_6079;
uint8_t DID_607A;
uint8_t DID_607B;
uint8_t DID_607C;
uint8_t DID_607D;
uint8_t DID_60C8;
uint8_t DID_6005;
uint8_t DID_600B;
uint8_t DID_607E;
uint8_t DID_607F;
uint8_t DID_6080;
uint8_t DID_6002;
uint8_t DID_600F;
uint8_t DID_6011;
uint8_t DID_600E;
uint8_t DID_6081;
uint8_t DID_6009;
uint8_t DID_6010;
uint8_t DID_6082;
uint8_t DID_6083;
uint8_t DID_6084;
uint8_t DID_600A;
uint8_t DID_6085;
uint8_t DID_6086;
uint8_t DID_6087[2];
uint8_t DID_6088;
uint8_t DID_6089;
uint8_t DID_608A;
uint8_t DID_608B;
uint8_t DID_608C;
uint8_t DID_608D;
uint8_t DID_608E;
uint8_t DID_6029;
uint8_t DID_6090;
uint8_t DID_6013;
uint8_t DID_602A;
uint8_t DID_6023;
uint8_t DID_602C;
uint8_t DID_60A2;
uint8_t DID_60AB;
uint8_t DID_60AC;
uint8_t DID_6065;
uint8_t DID_6066;
uint8_t DID_6069;
uint8_t DID_6077;
} BootToDFlashInfoUnion;
typedef struct
{
uint32_t Flag;
uint8_t DID_F183[42];
uint8_t DID_F184[42];
uint8_t DID_F185[42];
uint8_t DID_F190[17];
uint8_t DID_F1F0[6];
uint8_t DID_F1F1[6];
uint8_t fill;
} Ser2EToDFlashInfoUnion;
/*typedef struct
{
uint8_t ECUPowerVoltage;
uint16_t VehicleSpeed;
uint8_t OccurrenceCounter;
uint32_t FirstMalfunction;
uint32_t LastMalfunction;
} SnapshotUnion;*/
typedef struct
{
uint8_t DTCStatus;
uint8_t DTCAgeing;
uint8_t DTCCount;
uint8_t DTCPendingCount;
//SnapshotUnion Snapshot;
} DTCUnion;
typedef struct
{
uint32_t Flag;
DTCUnion DTC[18u];
} DTCToDFlashInfoUnion;
typedef void (*InitFunction)(void);
extern uint8_t S31DID62F3RequestStatus;
extern DiagMSGUnion DiagMSG;
extern DiagFlagUnion DiagFlag;
extern Ser27_FlowCtrlUnion Ser27_FlowCtrl;
extern Ser27_FlowCtrlCntUnion Ser27_FlowCtrlCnt;
extern BootToDFlashInfoUnion BootToDFlashInfo;
extern Ser2EToDFlashInfoUnion Ser2EToDFlashInfo;
extern DTCToDFlashInfoUnion DTCToDFlashInfo;
extern uint8_t S31DIDC004RequestStatus ;
extern uint8_t S31DIDC005RequestStatus ;
extern uint8_t S31DIDC014RequestStatus ;
void setSessionType(uint8_t status);
uint8_t getSessionType(void);
void setDiagMSG(uint32_t Identifier, uint16_t dlc, uint8_t Data[]);
DiagMSGUnion getDiagMSG(void);
void clearDiagMSG(void);
uint16_t getSpeed(void);
uint16_t getESpeed(void);
uint32_t getKL30Voltage(void);
uint8_t getKL15Status(void);
uint8_t getSecurityLevel(uint8_t SecurityLevel);
void Ser27_ChangeSessionHandle(void);
void UDS_RESET(void);
void UDS_Delay(uint16_t count);
void UDS_S11_Sand(uint8_t subid);
void UDS_S11_Confirm(void);
void UDS_NRC78_Sand(uint8_t sid);
void UDS_SendNRCRsp(uint8_t sid,uint8_t status);
void UDS_14_SendRsp(uint8_t sid);
void UDS_50us_Service(void);
void UDS_10ms_Service(void);
void UDS_KL15_init(void);
void UDS_Slepp(void);
void MsgLostTimer(uint16_t timer);
void ReceivedMsg(uint32_t MsgID, uint8_t DLC);
void S3_Service(uint16_t timer);
void S3_ServiceClear(void);
void S3_ServiceWait(void);
void S3_ServiceTimeOut(void);
void Ser27_ErrDelayTimerService(uint16_t timer);
void Ser27_IgOnDelayTimerService(uint16_t timer);
uint8_t GetRequestSeedFlag(void);
void ControlMessageCommunication(uint8_t Type, uint8_t Status);
void enableDTCTimer(uint16_t Timer);
uint8_t isDTCEnable(void);
void setDTCEnableTimer(uint16_t Timer);
void OpenDTCTest(void);
void CloseDTCTest(void);
uint8_t DTCTestIsOpen(void);
void DTCAgeing(void);
void ReadAllDFlashData(void);
uint8_t ReadDFlashData(uint8_t u8BlockNum, uint32_t u32Data[], uint16_t u16Len, InitFunction initFunction);
uint8_t WriteDFlashData(uint8_t u8BlockNum, uint32_t u32Data[], uint16_t u16Len, uint8_t isWait);
void AllFlagInit(void);
void Ser27ToDFlashInfoInit(void);
void BootToDFlashInfoInit(void);
void Ser2EToDFlashInfoInit(void);
void DTCToDFlashInfoInit(void);
void DTCConfigurationInit(void);
#endif