首页 > 其他分享 >基于UDS的DoIp实现(二) -- DCM实现

基于UDS的DoIp实现(二) -- DCM实现

时间:2023-04-18 15:33:13浏览次数:41  
标签:UDS DCM 0x19 -- DTC buffer READ define

一、平台环境

二、代码实现

 

一、平台环境

Virtual Box 7.0
Ubuntu 18.04
cmake version 3.10.2
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

 

 

二、代码实现

  DCM的功能,主要是接收Tcp/IP传入的数据,从中提取服务ID,然后处理对应的服务,这里以0x19服务为例进行说明,sub-function:0x01

1、定义所需变量

定义服务:

//define SID
#define UDS_SESSION_CONTROL             0x10
#define UDS_ECU_RESET                    0x11
#define UDS_CLEAR_DIAGNOSTIC_INFOR        0x14
#define UDS_READ_DTC_INFOR                0x19
#define UDS_READ_DATA_BY_IDENTIFIER        0x22
#define UDS_READ_MEMORY_BY_ADDRESS        0x23
#define UDS_SECURITY_ACCESS                0x27
#define UDS_COMMUNICATION_CONTROL        0x28
#define UDS_WRITE_DATA_BY_IDENTIFIER    0x2E
#define UDS_ROUTINE_CONTROL                0x31
#define UDS_REQUEST_DOWNLOAD            0x34
#define UDS_TRANSFER_DATA                0x36
#define UDS_REQUEST_TRANSFER_EXIT        0x37
#define UDS_TESTER_PRESENT                0x3E
#define UDS_CONTROL_DTC_SETTING            0x85

定义sub-function:

//define 0x19 subfunction
typedef enum {
    R_NUMBER_DTC_BY_STATUS_MASK = 0x01,
    R_DTC_BY_STATUS_MASK = 0x02,
    R_DTC_SNAPSHOT_IDENTIFICATION = 0x03,
    R_DTC_SNAPSHOT_RECORD_BY_DTC_NEMUBER = 0x04,
    R_DTC_EXT_DATA_RECORD_BY_DTC_NEMUBER = 0x06,
    R_SUPPORTED_DTC = 0x0A,
}Sever_0x19_SubFunction;

 

2、实现API

SelectionSID实现:

void SelectionSID(u_uint8_t *buffer, u_uint16_t len) {
    u_uint8_t sid = buffer[0];
    printf("SelectionSID:0x%02X\r\n", sid);
    switch(sid) {
    //其它服务的实现 #ifdef SEVER_READ_DTC_INFORMATION case UDS_READ_DTC_INFOR: ReadDTCInformation_0x19(buffer, len); break; #endif
    //其它服务的实现
default: break; } }

ReadDTCInformation_0x19的实现:

#ifdef SEVER_READ_DTC_INFORMATION
void ReadDTCInformation_0x19(u_uint8_t *buffer, u_uint16_t len) {
    u_uint8_t DTCStatusMask;
    u_uint16_t dataLen = 0;
    u_uint32_t DTC = 0;
    UDS_State_Flag res;
    
    switch (buffer[1]) {
#ifdef REPORT_NO_OF_DTC_BY_STATUS_MASK
        case R_NUMBER_DTC_BY_STATUS_MASK:
            if (3 == len) {
                DTCStatusMask = buffer[2];
                res = CallBack_ReportNumberOfDTCByStatusMask(DTCStatusMask, &buffer[2]);
                dataLen = 6;
            } else {
                res = SE_LORF;
            }
            break;
#endif
     //其它sub-function的实现
        default:
            res = SE_FS;
            break;
    }
}
#endif

至于CallBack_ReportNumberOfDTCByStatusMask,在后面的配置文件中,有介绍。

 

标签:UDS,DCM,0x19,--,DTC,buffer,READ,define
From: https://www.cnblogs.com/liuqiongcn/p/17265618.html

相关文章

  • 对于数据分析的方法,具体包含哪几种?
    对于数据的解读,每个人都有不同的方式。如果我们要简单的总结,数据分析的方法,具体有以下几种:1)确定数据的准确性这里包含了选择数据维度的合理性、数据统计的准确性。如果数据维度选择不合理、数据统计结果不精确,我们可能是无法得出正确的分析结果的。这是基础。2)明确影响数据的因素一......
  • 数据分析方法论,统计分析方法论与营销管理常用分析方法论的介绍
    数据分析方法论重点包括两块,一块是统计分析方法论:描述统计、假设检验、相关分析、方差分析、回归分析、聚类分析、判别分析、主成分与因子分析、时间序列分析、决策树等;一块是营销管理常用分析方法论:SWOT、4P、PEST、SMART、5W2H、Userbehavior等。一、统计分析方法论:1.描述统计(Des......
  • 企业运用大数据,需要以下三种人才?
    大数据的意思是,企业能汇集到庞大的资料量,也有能力分析这些资料,统计身为汇整说明资料意义的科学,因而成为当红的趋势。因此,为了善加运用大数据,经理人更需要具备统计的素养。大数据能够做到什么,可以从一个故事讲起。有一天,百货公司寄了一份婴儿用品型录给你未婚的女儿。你认为这是对你......
  • 华为云新一代iPaaS全域融合集成平台全新升级
    摘要:基于华为十多年的数字化转型实践,华为云通过组装式交付、数智驱动、DevOps、服务化架构、安全可信、韧性6大关键技术助力客户实现应用现代化和高质量增长,华为云新一代iPaaS全域融合集成平台ROMAConnect也应运而生。本文分享自华为云社区《华为云新一代iPaaS全域融合集成平台全......
  • 内网穿透frpc 本地项目外网访问。
    frpc.ini软件配置。------------------------------------------------------------------------------------------------------------------------------[common]server_addr=**.***.***.***需要自己配server_port=7000token= [frp-ftp]type=tcplocal_ip=127.0.0.......
  • 2023五一杯数学建模ABC思路分析
    0赛题思路(赛题出来以后第一时间分享)企鹅qun7144526211竞赛信息数学建模竞赛是一项模拟面对实际问题寻求解决方案的活动,是一次近似于“真刀真枪”的创新探索性实践训练。在丰富并活跃学生课外生活活动的同时,数学建模竞赛有助于训练学生的想象力、洞察力和创造力,有助于培养......
  • COIG:开源四类中文指令语料库
    CHINESEOPENINSTRUCTIONGENERALIST:APRELIMINARYRELEASE论文:https://arxiv.org/pdf/2304.07987v1.pdf数据地址:https://huggingface.co/datasets/BAAI/COIGPart1介绍COIG的特点:领域适应性:如表1所示。我们考虑了指令微调数据集的四个方面(验证,格式,文化,缩放)。对于每个领域......
  • 软件开发趋势:探讨软件开发的未来发展方向和机遇
    软件开发趋势:探讨软件开发的未来发展方向和机遇软件开发是当今社会的重要驱动力,它不仅为各行各业提供了高效、智能、创新的解决方案,也为人类的生活、学习、娱乐、沟通等方面带来了便利和乐趣。随着科技的进步和市场的变化,软件开发也面临着新的挑战和机遇,需要不断地适应和创新。本......
  • redis高级-day2——redis哈希类型、redis列表类型、redis集合类型、redis有序集合类型
    目录一、哈希类型二、列表类型三、集合类型四、有序集合(zset)五、慢查询六、pipeline与事务七、发布订阅八、Bitmap位图九、HyperLogLog十、作业1、http协议详情,http协议版本,http一些请求头2、如何实现服务器给客户端发送消息,websocket是什么?用过吗3、悲观锁和乐观锁,如何实现一、......
  • mvc5中使用autofac注册SignalR
    1.引用autofac.SignalR 2.Startup publicvoidConfiguration(IAppBuilderapp){DependencyConfig.RegisterDependencies(app);}3.RegisterDependencies//RegisteryourSignalRhubs.builder.RegisterHubs(Assembly.GetExecutingAssembly());var......