基于UDS的DoIp实现(四) -- Config实现

发布时间 2023-04-19 09:20:21作者: 一条名叫西西的狗

  无论是单独的UDS,还是AUTOSAR,config文件至关重要。因为,这些配置文件,是按照客户需求,进行特殊客制化的文件,是可以随项目变动的文件。

  配置文件的优劣、多寡,直接关系后面的项目维护,以及其他项目的移植。

  本Demo有两个配置性文件,一个是UDS结构体的配置文件,一个是回调函数(CallBack)的配置文件。

一、UDS结构体Config

二、回调函数(CallBack)Config

 

一、UDS结构体Config

//uds server struct
typedef struct
{
   u_uint8_t sID;
   u_uint8_t supportedSession;
   s_boolean securityProtect;
} UDS_Server_Physical_T;


//0x22 struct
typedef struct
{
   u_uint16_t identifier;
   u_uint16_t len;
   u_uint8_t supportedSession;
   s_boolean securityProtect;
   Function_0x22 func;
}Read_0x22_T;

  这里以Server结构体与0x22服务结构体举例,其他的服务,与0x22类似,也有肯能不需要定义结构体。

解释:(UDS_Server_Physical_T)

  sID:服务ID,比如0x22、0x19;

  supportedSession:该服务支持的session;

  securityProtect:该服务是否支持安全保护。

session:默认、可编程、扩展等。

举例:

const UDS_Server_Physical_T UDS_Server_Physical[] = {
    /*sID,     supportedSession,    securityProtect*/
    {0x19, UDS_NON_PROGRAMMING_SESSION, FALSE},
    {0x22, UDS_ALL_SESSIONS, FALSE},
};

二、回调函数(CallBack)Config

  这是为了在执行服务的时候,需要按照客户需求实现的功能。

举例:(0x19)

// 0x19 begin
#ifdef SEVER_READ_DTC_INFORMATION

#ifdef REPORT_NO_OF_DTC_BY_STATUS_MASK
u_uint8_t CallBack_ReportNumberOfDTCByStatusMask(u_uint8_t DTCStatusMask, u_uint8_t* ptr) {
    printf("0x19\r\n");
    return S_OK;
}
#endif

//其它服务
#endif
// 0x19 end

  在《基于UDS的DoIp实现(二) -- DCM实现》中,0x19服务sub-function调用CallBack_ReportNumberOfDTCByStatusMask,就是通过这个API实现。

  其它有需要按照客户配置的服务,都需要按照CallBack的方式进行客制化,不能将业务与协议逻辑放在一起。