基于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的方式进行客制化,不能将业务与协议逻辑放在一起。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示