UDS_Common.h 19.2 KB
Newer Older
时昊's avatar
时昊 committed
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 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521
#ifndef __UDS_COMMON_H
#define __UDS_COMMON_H
#include <string.h>
#include "RTE_CAN.h"
#include "TYW_stdint.h"
#include "RTE_CAN.h"
#include "CAN_APP.h"
#include "UDS_DTC.h"
#include "Internal_EEPROM.h"
#include "Watchdog.h"

#include "RTE_Memory.h"
#include "EOL_Para.h"
////#include "Radar_R3.h"
//#include "ODOReset.h"
//#include "MBD_Model.h"
//#include "Work_Flash.h"
//#include "Services_ODO.h"
//#include "Services_ODO_Backup.h"
//#include "RTE_WDT.h"
//#include "Sound_Player.h"
//#include "Services_TripA.h"
//#include "Common_Interface.h"
//#include "Services_Interval.h"
#include "UDS_ISO14229_Server.h"
#include "DoCAN_ISO15765_Config.h"
//#include "Services_ODO_Internal.h"
#include "CAN_CH0_CAN_Communication_Matrix.h"

#include "UDS_ISO14229_Server_Config.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 reportDTCExtendedDataRecordByDTCNumber                  0x06u
#define ReportSupportedDTC                                      0x0Au

#define NoSupport                                               0x00u
#define NeedSupport                                             0x01u
#define NormalVottage                                           0x00u
#define LowVottage                                              0x01u
#define HightVottage                                            0x02u
#define AgeingCount                                             100u
#define OfflineLoopMultiple                                     5u
#define MaxDTCPendingCount                                      1u
#define MinimumVoltage                                          8900u
#define RestoreMinimumVoltage                                   9200u
#define MaximumVoltage                                          16100u
#define RestoreMaximumVoltage                                   15800
#define LowVoltageTimer                                         2000u
#define HightVoltageTimer                                       2000u

#define DTCError                                                0x01u
#define DTCErrorThisCycle                                       0x02u
#define DTCPending                                              0x04u
#define DTCConfirmed                                            0x08u
#define DTCNoTestLastClear                                      0x10u
#define DTCErrorLastClear                                       0x20u
#define DTCNoTestThisCycle                                      0x40u
#define DTCNoError                                              0xFEu

#define DTCMask                                                 0x09u

#define KL15DTCEnableTimer                                      1500u
#define H_LVoltageDTCEnableTimer                                500
#define BusOffDTCEnableTimer                                    600u

/**
  *22服务和子服务
  *通过DID来读数据
  */
#define ReadDataByIdentifier                                    0x22u

/**
  *27服务和子服务
  *安全访问
  */
#define SecurityAccess                                          0x27u
#define requestSeed_LV1                                         0x01u
#define sendKey_LV1                                             0x02u
#define requestSeed_LV11                                        0x11u
#define sendKey_LV11                                            0x12u
#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 Check_BCD_Format(Char)  (((Char & 0x0Fu) < 0x0Au )&&((Char & 0xF0u) < 0xA0u))
#define Check_LeapYear_(YY)     (((YY%400)==0u)||(((YY%100)!=0x00)&&((YY%4)==0u)))
#define Check_MM_Format(MM)     (((((MM >> 4u) & 0x0F) * 10u + (MM & 0x0F)) <= 12u) )
#define Check_DD_Format(DD,max) (((((DD >> 4u) & 0x0F) * 10u + (DD & 0x0F)) <= max) )
#define UDSLib_TRUE    1
#define UDSLib_FALSE   0
#define CODING_BCD     1
#define CODING_ASC     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[4];
    uint8_t LV1Key[4];
} Ser27_FlowCtrlUnion;

typedef struct
{
    uint32_t Flag;
    uint32_t JumpToBootFlag;
    uint32_t AppValidFlag;
    uint32_t S11Flag;
} DiagFlagUnion;

typedef struct
{
    uint32_t Flag;
    uint8_t  LV1ReqSeedCnt;
    uint8_t  LV1InvaidKyeCnt;
    uint8_t  LV11_ReqSeedCnt;
    uint8_t  LV11_InvaidKyeCnt;
    uint32_t RandNum;
} Ser27_FlowCtrlCntUnion;

typedef struct
{
    uint32_t Flag;
    uint8_t DID_F15B[30];
    uint8_t Filling[2];
} BootToDFlashInfoUnion;

typedef struct
{
    uint32_t Flag;
    uint16_t WriteODOCnt;
    uint8_t  DID_F190[17];
    uint8_t  DID_F1B0[9];
    uint8_t  DID_F1B1[25];
    uint8_t  DID_F1B7[3];
    uint8_t  DID_F1B8[6];
    uint8_t  DID_F1BF[2];
    uint8_t  DID_F1C5[42];
    uint8_t  DID_F1C6[51];
    uint8_t  DID_CF03[4];
    uint8_t  DID_1E00[5];
    uint8_t  DID_1E01[16];
    uint8_t  DID_F18B[8];
    uint8_t  DID_F18C[14];
} Ser2EToDFlashInfoUnion;//240

typedef struct
{   
    uint32_t Flag;
    uint8_t  DID_F010 [ 8u ];
} EOLToDFlashInfoUnion;/*12*/
typedef struct
{
    uint8_t  EngineSpeed_H;
    uint8_t  EngineSpeed_L;
    uint8_t  VehicleSpeed_H;
    uint8_t  VehicleSpeed_L;
    uint8_t  BatteryVoltage_H;
    uint8_t  BatteryVoltage_L;
    uint8_t  FirstOccurOdometer_H;
    uint8_t  FirstOccurOdometer_H_M;
    uint8_t  FirstOccurOdometer_L_M;
    uint8_t  FirstOccurOdometer_L;
    uint8_t  Odometer_H;
    uint8_t  Odometer_H_M;
    uint8_t  Odometer_L_M;
    uint8_t  Odometer_L;
} SnapshotUnion;

typedef struct
{
    uint8_t  F_OccurenceCounter;
    uint8_t  F_Second;
    uint8_t  F_Minute;
    uint8_t  F_Hour;
    uint8_t  F_Day;
    uint8_t  F_Month;
    uint8_t  F_Year;
    uint8_t  F_Distance_H;
    uint8_t  F_Distance_H_M;
    uint8_t  F_Distance_L_M;
    uint8_t  F_Distance_L;
    uint8_t  L_Second;
    uint8_t  L_Minute;
    uint8_t  L_Hour;
    uint8_t  L_Day;
    uint8_t  L_Month;
    uint8_t  L_Year;
    uint8_t  L_Distance_H;
    uint8_t  L_Distance_H_M;
    uint8_t  L_Distance_L_M;
    uint8_t  L_Distance_L;
    uint8_t  L_SPNType;
} ExtendedUnion;

typedef struct
{
    uint8_t  DTCStatus;
    uint8_t  DTCAgeing;
    uint8_t  DTCCount;
    uint8_t  DTCPendingCount;
    SnapshotUnion Snapshot;
    ExtendedUnion Extended;
} DTCUnion;

typedef struct
{
    uint32_t Flag;
    DTCUnion DTC[9u];
} DTCToDFlashInfoUnion;

typedef struct
{
    uint32_t Flag;
    uint32_t AddODO;  
    uint32_t AddCount;
} ServiceToDflashInfoUnion;


#define CalculateBlockSize(n)  ((n + 63) / 64)
/*每个结构占用的块数*/ 
#define WriteProgramValidFlagBlockSize      CalculateBlockSize(sizeof(DiagFlagUnion))
#define WriteSer27BlockSize                 CalculateBlockSize(sizeof(Ser27_FlowCtrlCntUnion))  
#define WriteBootDataBlockSize              CalculateBlockSize(sizeof(BootToDFlashInfoUnion))
#define WriteSer2EDataBlockSize             CalculateBlockSize(sizeof(Ser2EToDFlashInfoUnion))
#define WriteEOLDataBlockSize               CalculateBlockSize(sizeof(EOLToDFlashInfoUnion))
#define WriteIntervalDataBlockSize          CalculateBlockSize(32)

#define WriteODOClearDataBlockSize          CalculateBlockSize(12)

/*实际的存储位置*/
#define WriteProgramValidFlagAddr           (0)
#define WriteSer27Addr                      (WriteProgramValidFlagAddr + WriteProgramValidFlagBlockSize) 
#define WriteBootDataAddr                   (WriteSer27Addr + WriteSer27BlockSize)
#define WriteSer2EDataAddr                  (WriteBootDataAddr + WriteBootDataBlockSize)
#define WriteEOLDataAddr                    (WriteSer2EDataAddr + WriteSer2EDataBlockSize)
#define WriteIntervalAddr                   (WriteEOLDataAddr + WriteEOLDataBlockSize)
#define WriteODOClearAddr                   (WriteIntervalAddr + WriteIntervalDataBlockSize)

#define WriteDTCAddr              INTERNAL_EE_BLOCK_00
#define DIM(X)                    (sizeof(X) / sizeof((X) [ 0 ]))
typedef void (*InitFunction)(void);
extern uint8_t S31DID62F3RequestStatus;
extern uint8_t  S31DID0203RequestFlag;
extern DiagMSGUnion DiagMSG;
extern DiagFlagUnion DiagFlag;
extern Ser27_FlowCtrlUnion Ser27_FlowCtrl;
extern Ser27_FlowCtrlCntUnion Ser27_FlowCtrlCnt;
extern BootToDFlashInfoUnion BootToDFlashInfo;
extern Ser2EToDFlashInfoUnion Ser2EToDFlashInfo;
extern EOLToDFlashInfoUnion EOLToDFlashInfo;
extern DTCToDFlashInfoUnion DTCToDFlashInfo;
extern ServiceToDflashInfoUnion ServiceToDflashInfo;
void UDS_Para_KL30Init(void);
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);
uint16_t getKL30Voltage(void);
uint8_t getKL15Status(void);
uint8_t getSecurityLevel(void);
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 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_eel(uint16_t u16BlockNum, uint32_t u32Data[], uint16_t u16Len, InitFunction initFunction);
uint8_t WriteDFlashData_eel(uint16_t u16BlockNum, uint32_t u32Data[], uint16_t u16Len, uint8_t isWait);
uint8_t ReadDFlashData_fdl(uint16_t u16BlockNum, uint32_t u32Data[], uint16_t u16Len, InitFunction initFunction);
uint8_t WriteDFlashData_fdl(uint16_t u16BlockNum, uint32_t u32Data[], uint16_t u16Len, uint8_t isWait);
void AllFlagInit(void);
void Ser27ToDFlashInfoInit(void);
void BootToDFlashInfoInit(void);
void Ser2EToDFlashInfoInit(void);
void SerEOLToDFlashInfoInit(void);
void DTCToDFlashInfoInit(void);
void ODOClearInit(void);
void DTCConfigurationInit(void);
//shi 2022-11-08 
extern uint32_t Get_7101_Value(void);
extern uint32_t Get_7102_Value(void);

extern uint32_t Get_7101_Value(void);
extern uint32_t Get_7102_Value(void);
extern uint8_t Get_7103_Value(void);
extern void Clear7103_Cbk(void);
extern Ser2EToDFlashInfoUnion Ser2EToDFlashInfo;

#endif