180 lines
10 KiB
C
180 lines
10 KiB
C
/*
|
|
* Copyright (c) 2022, Shenzhen CVA Innovation CO.,LTD
|
|
* All rights reserved.
|
|
*
|
|
* Shenzhen CVA Innovation CO.,LTD (CVA chip) is supplying this file for use
|
|
* exclusively with CVA's microcontroller products. This file can be freely
|
|
* distributed within development tools that are supporting such microcontroller
|
|
* products.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
|
|
* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
|
|
* CVA SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL,
|
|
* OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
|
|
*/
|
|
|
|
/*******************************************************************************
|
|
* the includes
|
|
******************************************************************************/
|
|
|
|
#include "uds_user.h"
|
|
|
|
/*******************************************************************************
|
|
* the defines
|
|
******************************************************************************/
|
|
|
|
/*******************************************************************************
|
|
* the typedefs
|
|
******************************************************************************/
|
|
|
|
/*! \brief The Data-by-ID definition of UDS
|
|
*/
|
|
typedef struct _Uds_DidBuffer_
|
|
{
|
|
uint8_t buffer_F113[4];
|
|
uint8_t buffer_F180[16];
|
|
uint8_t buffer_F186[1];
|
|
uint8_t buffer_F18A[6];
|
|
uint8_t buffer_F195[16];
|
|
uint8_t buffer_F1A0[8];
|
|
uint8_t buffer_F1A1[8];
|
|
uint8_t buffer_F1A2[8];
|
|
uint8_t buffer_F1A5[8];
|
|
uint8_t buffer_F1AE[16];
|
|
uint8_t buffer_4F53[1];
|
|
uint8_t buffer_4F80[2];
|
|
uint8_t buffer_4F65[1];
|
|
uint8_t buffer_4F66[1];
|
|
uint8_t buffer_4F67[2];
|
|
uint8_t buffer_F19E[32];
|
|
uint8_t buffer_F1AA[8];
|
|
uint8_t buffer_F1AB[8];
|
|
uint8_t buffer_F112[8];
|
|
uint8_t buffer_F190[17];
|
|
uint8_t buffer_F191[16];
|
|
uint8_t buffer_F193[16];
|
|
uint8_t buffer_F197[8];
|
|
uint8_t buffer_F198[16];
|
|
uint8_t buffer_F199[4];
|
|
uint8_t buffer_F19D[4];
|
|
uint8_t buffer_DFEF[64];
|
|
uint8_t buffer_F101[4];
|
|
uint8_t buffer_F110[8];
|
|
uint8_t buffer_4F51[16];
|
|
uint8_t buffer_4F54[16];
|
|
uint8_t buffer_F18C[24];
|
|
uint8_t buffer_F18B[4];
|
|
uint8_t buffer_0200[1];
|
|
uint8_t buffer_0201[1];
|
|
uint8_t buffer_F187[10];
|
|
uint8_t buffer_F189[16];
|
|
uint8_t buffer_FD01[1];
|
|
uint8_t buffer_FD02[1];
|
|
uint8_t buffer_FD03[1];
|
|
} Uds_DidBuffer;
|
|
|
|
/*******************************************************************************
|
|
* the globals
|
|
******************************************************************************/
|
|
|
|
Uds_DidBuffer udsDidBuf;
|
|
|
|
/*******************************************************************************
|
|
* the constants
|
|
******************************************************************************/
|
|
|
|
static const Uds_ServiceType udsServiceTable[UDS_SERVICE_NUM] = {
|
|
{0x10, 2, true, UdsService10_SessionControl },
|
|
{0x11, 2, true, UdsService11_ResetEcu },
|
|
{0x27, 2, true, UdsService27_SecurityAccess },
|
|
{0x28, 3, true, UdsService28_CommunicationControl },
|
|
{0x3E, 2, true, UdsService3E_TesterPresent },
|
|
{0x85, 2, true, UdsService85_ControlDtcSetting },
|
|
{0x22, 3, false, UdsService22_ReadDataByIdentifier },
|
|
{0x2E, 4, false, UdsService2E_WriteDataByIdentifier},
|
|
{0x14, 4, false, UdsService14_ClearDiagInfo },
|
|
{0x19, 3, true, UdsService19_ReadDtcInformation },
|
|
{0x2F, 3, false, UdsService2F_InputOutputCtrlById },
|
|
{0x31, 4, true, UdsService31_RoutineControl },
|
|
{0x34, 5, false, UdsService34_RequestDownload },
|
|
{0x36, 2, false, UdsService36_TransferData },
|
|
{0x37, 1, false, UdsService37_RequestTransferExit },
|
|
};
|
|
|
|
static const bool udsSecurityTable[UDS_SERVICE_NUM][UDS_SA_LEVEL_NUM] = {
|
|
{false, false, false}, /* 0x10 */
|
|
{false, false, false}, /* 0x11 */
|
|
{false, false, false}, /* 0x27 */
|
|
{false, false, false}, /* 0x28 */
|
|
{false, false, false}, /* 0x3E */
|
|
{false, false, false}, /* 0x85 */
|
|
{false, false, false}, /* 0x22 */
|
|
{false, false, false}, /* 0x2E */
|
|
{false, false, false}, /* 0x14 */
|
|
{false, false, false}, /* 0x19 */
|
|
{false, false, false}, /* 0x2F */
|
|
{false, false, false}, /* 0x31 */
|
|
{false, false, false}, /* 0x34 */
|
|
{false, false, false}, /* 0x36 */
|
|
{false, false, false}, /* 0x37 */
|
|
};
|
|
|
|
Uds_DidType udsDidTable[] = {
|
|
{0xF113, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F113, BYTES_OF(udsDidBuf.buffer_F113)},
|
|
{0xF180, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F180, BYTES_OF(udsDidBuf.buffer_F180)},
|
|
{0xF186, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F186, BYTES_OF(udsDidBuf.buffer_F186)},
|
|
{0xF18A, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F18A, BYTES_OF(udsDidBuf.buffer_F18A)},
|
|
{0xF195, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F195, BYTES_OF(udsDidBuf.buffer_F195)},
|
|
{0xF1A0, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F1A0, BYTES_OF(udsDidBuf.buffer_F1A0)},
|
|
{0xF1A1, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F1A1, BYTES_OF(udsDidBuf.buffer_F1A1)},
|
|
{0xF1A2, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F1A2, BYTES_OF(udsDidBuf.buffer_F1A2)},
|
|
{0xF1A5, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F1A5, BYTES_OF(udsDidBuf.buffer_F1A5)},
|
|
{0xF1AE, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F1AE, BYTES_OF(udsDidBuf.buffer_F1AE)},
|
|
{0x4F53, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_4F53, BYTES_OF(udsDidBuf.buffer_4F53)},
|
|
{0x4F80, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_4F80, BYTES_OF(udsDidBuf.buffer_4F80)},
|
|
{0x4F65, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_4F65, BYTES_OF(udsDidBuf.buffer_4F65)},
|
|
{0x4F66, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_4F66, BYTES_OF(udsDidBuf.buffer_4F66)},
|
|
{0x4F67, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_4F67, BYTES_OF(udsDidBuf.buffer_4F67)},
|
|
{0xF19E, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F19E, BYTES_OF(udsDidBuf.buffer_F19E)},
|
|
{0xF1AA, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F1AA, BYTES_OF(udsDidBuf.buffer_F1AA)},
|
|
{0xF1AB, UDS_DID_TYPE_RAM_RW, UDS_SESSION_DEFAULT, UDS_SA_NONE, udsDidBuf.buffer_F1AB, BYTES_OF(udsDidBuf.buffer_F1AB)},
|
|
{0xF112, UDS_DID_TYPE_NVM_RW, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_F112, BYTES_OF(udsDidBuf.buffer_F112)},
|
|
{0xF190, UDS_DID_TYPE_NVM_RW, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_F190, BYTES_OF(udsDidBuf.buffer_F190)},
|
|
{0xF191, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_F191, BYTES_OF(udsDidBuf.buffer_F191)},
|
|
{0xF193, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_F193, BYTES_OF(udsDidBuf.buffer_F193)},
|
|
{0xF197, UDS_DID_TYPE_NVM_RW, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_F197, BYTES_OF(udsDidBuf.buffer_F197)},
|
|
{0xF198, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_F198, BYTES_OF(udsDidBuf.buffer_F198)},
|
|
{0xF199, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_F199, BYTES_OF(udsDidBuf.buffer_F199)},
|
|
{0xF19D, UDS_DID_TYPE_NVM_RW, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_F19D, BYTES_OF(udsDidBuf.buffer_F19D)},
|
|
{0xDFEF, UDS_DID_TYPE_NVM_RW, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_DFEF, BYTES_OF(udsDidBuf.buffer_DFEF)},
|
|
{0xF101, UDS_DID_TYPE_NVM_RW, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_F101, BYTES_OF(udsDidBuf.buffer_F101)},
|
|
{0xF110, UDS_DID_TYPE_NVM_RO, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_F110, BYTES_OF(udsDidBuf.buffer_F110)},
|
|
{0x4F51, UDS_DID_TYPE_NVM_WO, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_4F51, BYTES_OF(udsDidBuf.buffer_4F51)},
|
|
{0x4F54, UDS_DID_TYPE_NVM_WO, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_4F54, BYTES_OF(udsDidBuf.buffer_4F54)},
|
|
{0xF18C, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_F18C, BYTES_OF(udsDidBuf.buffer_F18C)},
|
|
{0xF18B, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_F18B, BYTES_OF(udsDidBuf.buffer_F18B)},
|
|
{0x0200, UDS_DID_TYPE_NVM_RO, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_0200, BYTES_OF(udsDidBuf.buffer_0200)},
|
|
{0x0201, UDS_DID_TYPE_NVM_RO, UDS_SESSION_EXTENDED, UDS_SA_LEVEL_1, udsDidBuf.buffer_0201, BYTES_OF(udsDidBuf.buffer_0201)},
|
|
{0xF187, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_F187, BYTES_OF(udsDidBuf.buffer_F187)},
|
|
{0xF189, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_F189, BYTES_OF(udsDidBuf.buffer_F189)},
|
|
{0xFD01, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_FD01, BYTES_OF(udsDidBuf.buffer_FD01)},
|
|
{0xFD02, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_FD02, BYTES_OF(udsDidBuf.buffer_FD02)},
|
|
{0xFD03, UDS_DID_TYPE_NVM_RO, UDS_SESSION_SUPPLIER, UDS_SA_LEVEL_63, udsDidBuf.buffer_FD03, BYTES_OF(udsDidBuf.buffer_FD03)},
|
|
};
|
|
|
|
/*******************************************************************************
|
|
* the functions
|
|
******************************************************************************/
|
|
|
|
void Uds_UserInit(UdsType *obj, const Uds_ParamsType *pParams)
|
|
{
|
|
Uds_Init(obj, pParams);
|
|
|
|
obj->seviceTable = udsServiceTable;
|
|
obj->securityTable = &udsSecurityTable[0][0];
|
|
obj->serviceNum = UDS_SERVICE_NUM;
|
|
obj->didTable = udsDidTable;
|
|
obj->didNum = sizeof(udsDidTable) / sizeof(Uds_DidType);
|
|
}
|