基于UDS的DoIp实现(四) -- Config实现
无论是单独的UDS,还是AUTOSAR,config文件至关重要。因为,这些配置文件,是按照客户需求,进行特殊客制化的文件,是可以随项目变动的文件。
配置文件的优劣、多寡,直接关系后面的项目维护,以及其他项目的移植。
本Demo有两个配置性文件,一个是UDS结构体的配置文件,一个是回调函数(CallBack)的配置文件。
//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}, };
这是为了在执行服务的时候,需要按照客户需求实现的功能。
举例:(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的方式进行客制化,不能将业务与协议逻辑放在一起。