目录

1 安装Python和Cantools

1.1 查看Python已安装的Package包

1.2 在Python中安装Cantools插件包

1.3 获取更多Cantools工具的更新动态

2 CAN Matrix Arxml自动生成C语言代码

2.1 批处理文件CAN_Matrix_Arxml_To_C.bat内容说明

2.2 CAN Matrix Arxml文件要求

2.3 如何使用生成的C语言代码

3 附录:CAN Matrix Arxml文件

4 附录:生成的power_train.c文件

5 附录:生成的power_train.h文件

结尾

优质博文推荐阅读(单击下方链接,即可跳转):

Vector工具链

CAN Matrix DBC

CAN Matrix Arxml

【DBC专题】-11-使用Cantools将CAN/CANFD DBC自动生成C语言代码

1 安装Python和Cantools

在Python Releases for Windows | Python.org链接中,找到你需要的Python版本(建议使用3.7及以上版本)下载,并安装。

1.1 查看Python已安装的Package包

快捷键Win + R,打开运行对话框,在其中输入CMD,单击确定。

在弹出的“Windows 命令提示符”窗口,输入命令pip list,可以查看Python已安装的包,及其版本。

1.2 在Python中安装Cantools插件包

在弹出的“Windows 命令提示符”窗口,输入命令pip install cantools,安装Cantools插件包。

Cantools成功安装后提示:

Successfully installed argparse-addons-0.12.0 bitstruct-8.19.0 cantools-39.4.5 crccheck-1.3.0 diskcache-5.6.3 packaging-24.0 python-can-4.3.1 pywin32-306 textparser-0.24.0 typing-extensions-4.10.0 wrapt-1.16.0

使用命令pip list,可以获取Cantools的版本。

1.3 获取更多Cantools工具的更新动态

在GitHub - cantools/cantools: CAN bus tools.链接中,可以关注Cantools该插件最新的更新动态。

2 CAN Matrix Arxml自动生成C语言代码

双击运行批处理文件CAN_Matrix_Arxml_To_C.bat,自动生成两个power_train.c和power_train.h,将这两个文件添加到你的编译环境中,并调用生成的API接口即可。

2.1 批处理文件CAN_Matrix_Arxml_To_C.bat内容说明

CAN_Matrix_Arxml_To_C.bat内容摘录如下,使用该批处理文件需要注意以下四点:

CAN Matrix Arxml文件与批处理文件在同一个目录下;CAN Matrix Arxml文件不能数字,或特殊字符开头,否则生成的代码,不符合C语言语法;使用文本编辑工具,打开批处理文件,将PowerTrain替换成同目录下的Arxml文件名称;使用文本编辑工具,打开批处理文件,将Gateway替换成Arxml中你所使用的发送节点名称。

@echo off

::切换至当前目录

cd.

::CAN Matrix Arxml自动生成C语言代码

python -m cantools generate_c_source -e "gb18030" PowerTrain.arxml --node Gateway

2.2 CAN Matrix Arxml文件要求

这个很重要,决定了能否生成C代码文件,以及生成C代码文件的质量。

以使用的PowerTrain.arxml为例,该批处理文件自动生成的是节点Gateway所收/发的帧和信号的C语言代码。故没有在Tx Frames,Rx Frames出现的帧和信号,不会生成代码。

小结:

在编辑Message和Signal时,需要明确该帧的“发送节点”,以及帧内信号的“接收节点”;并不是所有的CAN Matrix Arxml都可以生成C语言代码,原因是XML的格式(属性标签,分支嵌套结构…)是多变的,Cantools工具无法识别各种Arxml变异,请使用专业工具生成的Arxml文件(AUTOSAR System Description Network Explorer生成的arxml文件有时都无法生成C文件),如PREEvision

如何准确的制作一个Arxml文件,参考博文【ARXML专题】-2-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件_新建arxml指令-CSDN博客https://blog.csdn.net/qfmzhu/article/details/111936806

2.3 如何使用生成的C语言代码

API接口****_pack(例如power_train_diag_request_motor_pack)表示将本节点发送的信号的结构体(传参const struct power_train_diag_request_motor_t *src_p)拼接/打包成“字节数组”;

API接口****_unpack (例如power_train_gear_box_info_unpack) 表示将本节点接收的信号的结构体(传参struct power_train_gear_box_info_t *dst_p,),由“字节数组”进行解包得到。

3 附录:CAN Matrix Arxml文件

VehicleProject

System

/NM/NmConfig

/TP/CAN00_CAN

/Cluster/PowerTrain

/ECU/Engine

/ECU/Gateway

/IPDUGroup/Engine_Rx

/IPDUGroup/Engine_Tx

/IPDUGroup/Gateway_Rx

/IPDUGroup/Gateway_Tx

/CanFrame/ABSdata

/CanFrame/Diag_Request

/CanFrame/Diag_Response

/CanFrame/DiagRequest_Motor

/CanFrame/DiagResponse_Motor

/CanFrame/EngineData

/CanFrame/EngineDataIEEE

/CanFrame/EngineStatus

/CanFrame/GearBoxInfo

/CanFrame/Ignition_Info

/CanFrame/NM_Engine

/CanFrame/NM_Gateway_PowerTrain

/PDU/ABSdata

/PDU/DiagRequest_Motor

/PDU/DiagResponse_Motor

/PDU/EngineData

/PDU/EngineDataIEEE

/PDU/EngineStatus

/PDU/GearBoxInfo

/PDU/Ignition_Info

/PDU/Diag_Request

/PDU/Diag_Response

/PDU/NM_Engine

/PDU/NM_Gateway_PowerTrain

/ISignal/AccelerationForce

/ISignal/CarSpeed

/ISignal/Diagnostics

/ISignal/DiagRequest

/ISignal/DiagResponse

/ISignal/EcoMode

/ISignal/EngForce

/ISignal/EngForceIEEE

/ISignal/EngPower

/ISignal/EngSpeed

/ISignal/EngSpeedIEEE

/ISignal/EngTemp

/ISignal/ErrorCode

/ISignal/Gear

/ISignal/GearLock

/ISignal/IdleRunning

/ISignal/PetrolLevel

/ISignal/ShiftRequest

/ISignal/StarterKey

/ISignal/Status

NM

NmConfig

CAN00_CAN

/Cluster/PowerTrain

0

Engine

/ECU/Engine/CT_CAN00

/NM/NmConfig/Engine_CAN

27

/PDU/NM_Engine

0.01

0.05

1280

1407

Gateway

/ECU/Gateway/CT_CAN00

/NM/NmConfig/Gateway_CAN

26

/PDU/NM_Gateway_PowerTrain

0.01

0.05

1280

1407

2

1

0.4

5

0.75

/NM/NmConfig/CAN00_CAN

Engine_CAN

/ECU/Engine

true

true

Gateway_CAN

/ECU/Gateway

true

true

TP

CAN00_CAN

/Cluster/PowerTrain

TPCH

0

FULL-DUPLEX-MODE

Cluster

PowerTrain

demopowertrain

CAN communication matrix for body electronics*******************************************************implemented: turn lights, warning lights, windows

Vector Legacy Database Converter

1.7.24.0

Daimler

500000

CHNL

/ECU/Engine/CN_CAN00

/ECU/Gateway/CN_CAN00

FT_ABSdata

/ECU/Engine/CN_CAN00/FP_ABSdata_Tx

/CanFrame/ABSdata

/Cluster/PowerTrain/CHNL/PT_ABSdata

STANDARD

CAN-20

201

FT_Diag_Request

/CanFrame/Diag_Request

/Cluster/PowerTrain/CHNL/PT_Diag_Request

STANDARD

512

FT_Diag_Response

/CanFrame/Diag_Response

/Cluster/PowerTrain/CHNL/PT_Diag_Response

STANDARD

1024

FT_DiagRequest_Motor

/ECU/Gateway/CN_CAN00/FP_DiagRequest_Motor_Tx

/CanFrame/DiagRequest_Motor

/Cluster/PowerTrain/CHNL/PT_DiagRequest_Motor

STANDARD

CAN-20

1537

FT_DiagResponse_Motor

/ECU/Engine/CN_CAN00/FP_DiagResponse_Motor_Tx

/CanFrame/DiagResponse_Motor

/Cluster/PowerTrain/CHNL/PT_DiagResponse_Motor

STANDARD

CAN-20

1544

FT_EngineData

/ECU/Engine/CN_CAN00/FP_EngineData_Tx

/CanFrame/EngineData

/Cluster/PowerTrain/CHNL/PT_EngineData

STANDARD

CAN-20

100

FT_EngineDataIEEE

/ECU/Engine/CN_CAN00/FP_EngineDataIEEE_Tx

/CanFrame/EngineDataIEEE

/Cluster/PowerTrain/CHNL/PT_EngineDataIEEE

STANDARD

CAN-20

102

FT_EngineStatus

/ECU/Engine/CN_CAN00/FP_EngineStatus_Tx

/CanFrame/EngineStatus

/Cluster/PowerTrain/CHNL/PT_EngineStatus

STANDARD

CAN-20

101

FT_GearBoxInfo

/ECU/Engine/CN_CAN00/FP_GearBoxInfo_Tx

/ECU/Gateway/CN_CAN00/FP_GearBoxInfo_Rx

/CanFrame/GearBoxInfo

/Cluster/PowerTrain/CHNL/PT_GearBoxInfo

STANDARD

CAN-20

1020

FT_Ignition_Info

/ECU/Engine/CN_CAN00/FP_Ignition_Info_Rx

/ECU/Gateway/CN_CAN00/FP_Ignition_Info_Tx

/CanFrame/Ignition_Info

/Cluster/PowerTrain/CHNL/PT_Ignition_Info

STANDARD

CAN-20

103

FT_NM_Engine

/ECU/Engine/CN_CAN00/FP_NM_Engine_Tx

/ECU/Gateway/CN_CAN00/framePort_59cca9c163392b49

/CanFrame/NM_Engine

/Cluster/PowerTrain/CHNL/PT_NM_Engine

STANDARD

CAN-20

1307

FT_NM_Gateway_PowerTrain

/ECU/Gateway/CN_CAN00/FP_NM_Gateway_PowerTrain_Tx

/ECU/Engine/CN_CAN00/framePort_710252725353a8d3

/CanFrame/NM_Gateway_PowerTrain

/Cluster/PowerTrain/CHNL/PT_NM_Gateway_PowerTrain

STANDARD

CAN-20

1306

ST_AccelerationForce_oABSdata

/ECU/Engine/CN_CAN00/SP_AccelerationForce_oABSdata_Tx

/ISignal/AccelerationForce

ST_CarSpeed_oABSdata

/ECU/Engine/CN_CAN00/SP_CarSpeed_oABSdata_Tx

/ISignal/CarSpeed

ST_Diagnostics_oABSdata

/ECU/Engine/CN_CAN00/SP_Diagnostics_oABSdata_Tx

/ISignal/Diagnostics

ST_DiagRequest_Motor_oDiagRequest_Motor

/ECU/Gateway/CN_CAN00/SP_DiagRequest_Motor_oDiagRequest_Motor_Tx

/ISignal/DiagRequest

ST_DiagResponse_Motor_oDiagResponse_Motor

/ECU/Engine/CN_CAN00/SP_DiagResponse_Motor_oDiagResponse_Motor_Tx

/ISignal/DiagResponse

ST_EcoMode_oGearBoxInfo

/ECU/Engine/CN_CAN00/SP_EcoMode_oGearBoxInfo_Tx

/ISignal/EcoMode

ST_EngForce_oEngineData

/ECU/Engine/CN_CAN00/SP_EngForce_oEngineData_Tx

/ISignal/EngForce

ST_EngForceIEEE_oEngineDataIEEE

/ECU/Engine/CN_CAN00/SP_EngForceIEEE_oEngineDataIEEE_Tx

/ISignal/EngForceIEEE

ST_EngPower_oEngineData

/ECU/Engine/CN_CAN00/SP_EngPower_oEngineData_Tx

/ISignal/EngPower

ST_EngSpeed_oEngineData

/ECU/Engine/CN_CAN00/SP_EngSpeed_oEngineData_Tx

/ISignal/EngSpeed

ST_EngSpeedIEEE_oEngineDataIEEE

/ECU/Engine/CN_CAN00/SP_EngSpeedIEEE_oEngineDataIEEE_Tx

/ISignal/EngSpeedIEEE

ST_EngTemp_oEngineData

/ECU/Engine/CN_CAN00/SP_EngTemp_oEngineData_Tx

/ISignal/EngTemp

ST_ErrorCode_oEngineStatus

/ECU/Engine/CN_CAN00/SP_ErrorCode_oEngineStatus_Tx

/ISignal/ErrorCode

ST_Gear_oGearBoxInfo

/ECU/Engine/CN_CAN00/SP_Gear_oGearBoxInfo_Tx

/ECU/Gateway/CN_CAN00/SP_Gear_oGearBoxInfo_Rx

/ISignal/Gear

ST_GearLock_oABSdata

/ECU/Engine/CN_CAN00/SP_GearLock_oABSdata_Tx

/ISignal/GearLock

ST_IdleRunning_oEngineData

/ECU/Engine/CN_CAN00/SP_IdleRunning_oEngineData_Tx

/ISignal/IdleRunning

ST_PetrolLevel_oEngineData

/ECU/Engine/CN_CAN00/SP_PetrolLevel_oEngineData_Tx

/ISignal/PetrolLevel

ST_ShiftRequest_oGearBoxInfo

/ECU/Engine/CN_CAN00/SP_ShiftRequest_oGearBoxInfo_Tx

/ISignal/ShiftRequest

ST_StarterKey_oIgnition_Info

/ECU/Engine/CN_CAN00/SP_StarterKey_oIgnition_Info_Rx

/ECU/Gateway/CN_CAN00/SP_StarterKey_oIgnition_Info_Tx

/ISignal/StarterKey

ST_Status_oEngineStatus

/ECU/Engine/CN_CAN00/SP_Status_oEngineStatus_Tx

/ISignal/Status

PT_ABSdata

/ECU/Engine/CN_CAN00/PP_ABSdata_Tx

/PDU/ABSdata

/Cluster/PowerTrain/CHNL/ST_AccelerationForce_oABSdata

/Cluster/PowerTrain/CHNL/ST_CarSpeed_oABSdata

/Cluster/PowerTrain/CHNL/ST_Diagnostics_oABSdata

/Cluster/PowerTrain/CHNL/ST_GearLock_oABSdata

PT_Diag_Request

/PDU/Diag_Request

PT_Diag_Response

/PDU/Diag_Response

PT_DiagRequest_Motor

/ECU/Gateway/CN_CAN00/PP_DiagRequest_Motor_Tx

/PDU/DiagRequest_Motor

/Cluster/PowerTrain/CHNL/ST_DiagRequest_Motor_oDiagRequest_Motor

PT_DiagResponse_Motor

/ECU/Engine/CN_CAN00/PP_DiagResponse_Motor_Tx

/PDU/DiagResponse_Motor

/Cluster/PowerTrain/CHNL/ST_DiagResponse_Motor_oDiagResponse_Motor

PT_EngineData

/ECU/Engine/CN_CAN00/PP_EngineData_Tx

/PDU/EngineData

/Cluster/PowerTrain/CHNL/ST_EngForce_oEngineData

/Cluster/PowerTrain/CHNL/ST_EngPower_oEngineData

/Cluster/PowerTrain/CHNL/ST_EngSpeed_oEngineData

/Cluster/PowerTrain/CHNL/ST_EngTemp_oEngineData

/Cluster/PowerTrain/CHNL/ST_IdleRunning_oEngineData

/Cluster/PowerTrain/CHNL/ST_PetrolLevel_oEngineData

PT_EngineDataIEEE

/ECU/Engine/CN_CAN00/PP_EngineDataIEEE_Tx

/PDU/EngineDataIEEE

/Cluster/PowerTrain/CHNL/ST_EngForceIEEE_oEngineDataIEEE

/Cluster/PowerTrain/CHNL/ST_EngSpeedIEEE_oEngineDataIEEE

PT_EngineStatus

/ECU/Engine/CN_CAN00/PP_EngineStatus_Tx

/PDU/EngineStatus

/Cluster/PowerTrain/CHNL/ST_ErrorCode_oEngineStatus

/Cluster/PowerTrain/CHNL/ST_Status_oEngineStatus

PT_GearBoxInfo

/ECU/Engine/CN_CAN00/PP_GearBoxInfo_Tx

/ECU/Gateway/CN_CAN00/PP_GearBoxInfo_Rx

/PDU/GearBoxInfo

/Cluster/PowerTrain/CHNL/ST_EcoMode_oGearBoxInfo

/Cluster/PowerTrain/CHNL/ST_Gear_oGearBoxInfo

/Cluster/PowerTrain/CHNL/ST_ShiftRequest_oGearBoxInfo

PT_Ignition_Info

/ECU/Engine/CN_CAN00/PP_Ignition_Info_Rx

/ECU/Gateway/CN_CAN00/PP_Ignition_Info_Tx

/PDU/Ignition_Info

/Cluster/PowerTrain/CHNL/ST_StarterKey_oIgnition_Info

PT_NM_Engine

/ECU/Gateway/CN_CAN00/PP_4f3a86411c204ccc8dcc256ac8df7cc6_Rx

/ECU/Engine/CN_CAN00/PP_5178a6d008674c0794ffc57430efd233_Tx

/PDU/NM_Engine

PT_NM_Gateway_PowerTrain

/ECU/Engine/CN_CAN00/PP_b066c0a745e54ec29d3fcf031b09acac_Rx

/ECU/Gateway/CN_CAN00/PP_03fbc7cea9764bbb86773eb46c9b49f1_Tx

/PDU/NM_Gateway_PowerTrain

CAN

ECU

Engine

/IPDUGroup/Engine_Rx

/IPDUGroup/Engine_Tx

CT_CAN00

20

81.25

15

80

CN_CAN00

true

false

/ECU/Engine/CT_CAN00

FP_ABSdata_Tx

OUT

FP_DiagResponse_Motor_Tx

OUT

FP_EngineData_Tx

OUT

FP_EngineDataIEEE_Tx

OUT

FP_EngineStatus_Tx

OUT

FP_GearBoxInfo_Tx

OUT

FP_Ignition_Info_Rx

IN

FP_NM_Engine_Tx

OUT

PP_ABSdata_Tx

OUT

PP_DiagResponse_Motor_Tx

OUT

PP_EngineData_Tx

OUT

PP_EngineDataIEEE_Tx

OUT

PP_EngineStatus_Tx

OUT

PP_GearBoxInfo_Tx

OUT

PP_Ignition_Info_Rx

IN

SP_AccelerationForce_oABSdata_Tx

OUT

SP_CarSpeed_oABSdata_Tx

OUT

SP_Diagnostics_oABSdata_Tx

OUT

SP_DiagResponse_Motor_oDiagResponse_Motor_Tx

OUT

SP_EcoMode_oGearBoxInfo_Tx

OUT

SP_EngForce_oEngineData_Tx

OUT

SP_EngForceIEEE_oEngineDataIEEE_Tx

OUT

SP_EngPower_oEngineData_Tx

OUT

SP_EngSpeed_oEngineData_Tx

OUT

SP_EngSpeedIEEE_oEngineDataIEEE_Tx

OUT

SP_EngTemp_oEngineData_Tx

OUT

SP_ErrorCode_oEngineStatus_Tx

OUT

SP_Gear_oGearBoxInfo_Tx

OUT

SP_GearLock_oABSdata_Tx

OUT

SP_IdleRunning_oEngineData_Tx

OUT

SP_PetrolLevel_oEngineData_Tx

OUT

SP_ShiftRequest_oGearBoxInfo_Tx

OUT

SP_StarterKey_oIgnition_Info_Rx

IN

SP_Status_oEngineStatus_Tx

OUT

framePort_710252725353a8d3

IN

PP_b066c0a745e54ec29d3fcf031b09acac_Rx

IN

PP_5178a6d008674c0794ffc57430efd233_Tx

OUT

Gateway

/IPDUGroup/Gateway_Rx

/IPDUGroup/Gateway_Tx

CT_CAN00

20

81.25

15

80

CN_CAN00

true

false

/ECU/Gateway/CT_CAN00

FP_DiagRequest_Motor_Tx

OUT

FP_GearBoxInfo_Rx

IN

FP_Ignition_Info_Tx

OUT

FP_NM_Gateway_PowerTrain_Tx

OUT

PP_DiagRequest_Motor_Tx

OUT

PP_GearBoxInfo_Rx

IN

PP_Ignition_Info_Tx

OUT

SP_DiagRequest_Motor_oDiagRequest_Motor_Tx

OUT

SP_Gear_oGearBoxInfo_Rx

IN

SP_StarterKey_oIgnition_Info_Tx

OUT

framePort_59cca9c163392b49

IN

PP_4f3a86411c204ccc8dcc256ac8df7cc6_Rx

IN

PP_03fbc7cea9764bbb86773eb46c9b49f1_Tx

OUT

Gateway

IPDUGroup

Engine_Rx

IN

/PDU/Ignition_Info

Engine_Tx

OUT

/PDU/ABSdata

/PDU/DiagResponse_Motor

/PDU/EngineData

/PDU/EngineDataIEEE

/PDU/EngineStatus

/PDU/GearBoxInfo

Gateway_Rx

IN

/PDU/GearBoxInfo

Gateway_Tx

OUT

/PDU/DiagRequest_Motor

/PDU/Ignition_Info

CanFrame

ABSdata

6

ABSdata

MOST-SIGNIFICANT-BYTE-LAST

/PDU/ABSdata

0

Diag_Request

8

Diag_Request

MOST-SIGNIFICANT-BYTE-LAST

/PDU/Diag_Request

0

Diag_Response

8

Diag_Response

MOST-SIGNIFICANT-BYTE-LAST

/PDU/Diag_Response

0

DiagRequest_Motor

8

DiagRequest_Motor

MOST-SIGNIFICANT-BYTE-LAST

/PDU/DiagRequest_Motor

0

DiagResponse_Motor

8

DiagResponse_Motor

MOST-SIGNIFICANT-BYTE-LAST

/PDU/DiagResponse_Motor

0

EngineData

8

EngineData

MOST-SIGNIFICANT-BYTE-LAST

/PDU/EngineData

0

EngineDataIEEE

8

EngineDataIEEE

MOST-SIGNIFICANT-BYTE-LAST

/PDU/EngineDataIEEE

0

EngineStatus

1

EngineStatus

MOST-SIGNIFICANT-BYTE-LAST

/PDU/EngineStatus

0

GearBoxInfo

1

GearBoxInfo

MOST-SIGNIFICANT-BYTE-LAST

/PDU/GearBoxInfo

0

Ignition_Info

2

Ignition_Info

MOST-SIGNIFICANT-BYTE-LAST

/PDU/Ignition_Info

0

NM_Engine

4

NM_Engine

MOST-SIGNIFICANT-BYTE-LAST

/PDU/NM_Engine

0

NM_Gateway_PowerTrain

4

NM_Gateway_PowerTrain

MOST-SIGNIFICANT-BYTE-LAST

/PDU/NM_Gateway_PowerTrain

0

LinFrame

FlexrayFrame

PDU

ABSdata

false

6

0.001

0.05

0.05

CarSpeed

/ISignal/CarSpeed

MOST-SIGNIFICANT-BYTE-LAST

0

PENDING

GearLock

/ISignal/GearLock

MOST-SIGNIFICANT-BYTE-LAST

15

PENDING

Diagnostics

/ISignal/Diagnostics

MOST-SIGNIFICANT-BYTE-LAST

16

PENDING

AccelerationForce

/ISignal/AccelerationForce

MOST-SIGNIFICANT-BYTE-LAST

32

PENDING

0

DiagRequest_Motor

false

8

0.001

DiagRequest_Motor

/ISignal/DiagRequest

OPAQUE

0

PENDING

0

DiagResponse_Motor

false

8

0.001

DiagResponse_Motor

/ISignal/DiagResponse

OPAQUE

0

PENDING

0

EngineData

false

8

0.001

MASKED-NEW-DIFFERS-X

1

1

/PDU/EngineData/IdleRunning

0.1

0.05

EngSpeed

/ISignal/EngSpeed

MOST-SIGNIFICANT-BYTE-LAST

0

PENDING

EngTemp

/ISignal/EngTemp

MOST-SIGNIFICANT-BYTE-LAST

16

PENDING

IdleRunning

/ISignal/IdleRunning

MOST-SIGNIFICANT-BYTE-LAST

23

PENDING

PetrolLevel

/ISignal/PetrolLevel

MOST-SIGNIFICANT-BYTE-LAST

24

PENDING

EngForce

/ISignal/EngForce

MOST-SIGNIFICANT-BYTE-LAST

32

PENDING

EngPower

/ISignal/EngPower

MOST-SIGNIFICANT-BYTE-LAST

48

PENDING

0

EngineDataIEEE

false

8

0.001

0.05

0.05

EngSpeedIEEE

/ISignal/EngSpeedIEEE

MOST-SIGNIFICANT-BYTE-LAST

0

PENDING

EngForceIEEE

/ISignal/EngForceIEEE

MOST-SIGNIFICANT-BYTE-LAST

32

PENDING

0

EngineStatus

false

1

0.001

ALWAYS

/PDU/EngineStatus/ErrorCode

ALWAYS

/PDU/EngineStatus/Status

0

0

0

0

Status

/ISignal/Status

MOST-SIGNIFICANT-BYTE-LAST

0

PENDING

ErrorCode

/ISignal/ErrorCode

MOST-SIGNIFICANT-BYTE-LAST

2

PENDING

0

GearBoxInfo

false

1

0.001

0.05

0.05

Gear

/ISignal/Gear

MOST-SIGNIFICANT-BYTE-LAST

0

PENDING

ShiftRequest

/ISignal/ShiftRequest

MOST-SIGNIFICANT-BYTE-LAST

3

PENDING

EcoMode

/ISignal/EcoMode

MOST-SIGNIFICANT-BYTE-LAST

6

PENDING

0

Ignition_Info

false

2

0.001

0.02

0.02

StarterKey

/ISignal/StarterKey

MOST-SIGNIFICANT-BYTE-LAST

0

PENDING

0

Diag_Request

8

Diag_Response

8

NM_Engine

4

0

NM_Gateway_PowerTrain

4

0

ISignal

AccelerationForce

LEGACY

0

16

/DataType/uint16

/DataType/Semantics/CM_AccelerationForce

/Signal/AccelerationForce

CarSpeed

LEGACY

0

10

/DataType/uint16

/DataType/Semantics/CM_CarSpeed

/Signal/CarSpeed

Diagnostics

LEGACY

0

8

/DataType/uint8

/DataType/Semantics/CM_Diagnostics

/Signal/Diagnostics

DiagRequest

LEGACY

0

0

0

0

0

0

0

0

64

/DataType/uint8_8_iso_8859_1

/DataType/Semantics/CM_DiagRequest_Motor

/Signal/DiagRequest_Motor

DiagResponse

LEGACY

0

0

0

0

0

0

0

0

64

/DataType/uint8_8_iso_8859_1

/DataType/Semantics/CM_DiagResponse_Motor

/Signal/DiagResponse_Motor

EcoMode

LEGACY

0

2

/DataType/uint8

/DataType/Semantics/CM_EcoMode

/Signal/EcoMode

EngForce

LEGACY

0

16

/DataType/uint16

/DataType/Semantics/CM_EngForce

/Signal/EngForce

EngForceIEEE

LEGACY

0

32

/DataType/uint32

/DataType/Semantics/CM_EngForceIEEE

/Signal/EngForceIEEE

EngPower

LEGACY

0

16

/DataType/uint16

/DataType/Semantics/CM_EngPower

/Signal/EngPower

EngSpeed

LEGACY

0

16

/DataType/uint16

/DataType/Semantics/CM_EngSpeed

/Signal/EngSpeed

EngSpeedIEEE

LEGACY

0

32

/DataType/uint32

/DataType/Semantics/CM_EngSpeedIEEE

/Signal/EngSpeedIEEE

EngTemp

LEGACY

0

7

/DataType/uint8

/DataType/Semantics/CM_EngTemp

/Signal/EngTemp

ErrorCode

LEGACY

0

6

/DataType/uint8

/DataType/Semantics/CM_ErrorCode

/Signal/ErrorCode

Gear

LEGACY

0

3

/DataType/uint8

/DataType/Semantics/CM_Gear

/Signal/Gear

GearLock

LEGACY

0

1

/DataType/boolean

/DataType/Semantics/CM_GearLock

/Signal/GearLock

IdleRunning

LEGACY

0

1

/DataType/boolean

/DataType/Semantics/CM_IdleRunning

/Signal/IdleRunning

PetrolLevel

LEGACY

0

8

/DataType/uint8

/DataType/Semantics/CM_PetrolLevel

/Signal/PetrolLevel

ShiftRequest

LEGACY

0

1

/DataType/boolean

/DataType/Semantics/CM_ShiftRequest

/Signal/ShiftRequest

StarterKey

LEGACY

0

1

/DataType/boolean

/DataType/Semantics/CM_StarterKey

/Signal/StarterKey

Status

LEGACY

0

2

/DataType/uint8

/DataType/Semantics/CM_Status

/Signal/Status

DataType

boolean

FIXED_LENGTH

BOOLEAN

uint16

FIXED_LENGTH

16

NONE

uint32

FIXED_LENGTH

32

NONE

uint8

FIXED_LENGTH

8

NONE

uint8_8_iso_8859_1

FIXED_LENGTH

64

ISO-8859-1

Semantics

CM_AccelerationForce

LINEAR

/VectorAutosarExplorerGeneratedObjects/UNIT/U_N

0

65535

-10000

1

1

CM_CarSpeed

/VectorAutosarExplorerGeneratedObjects/UNIT/U_mph

0

1023

0

0.5

1

CM_Diagnostics

LINEAR

0

255

0

1

1

CM_DiagRequest_Motor

LINEAR

0

1.84467440737096E+19

0

1

1

CM_DiagResponse_Motor

LINEAR

0

1.84467440737096E+19

0

1

1

CM_EcoMode

LINEAR

0

3

0

1

1

CM_EngForce

LINEAR

/VectorAutosarExplorerGeneratedObjects/UNIT/U_N

0

65535

0

1

1

CM_EngForceIEEE

LINEAR

/VectorAutosarExplorerGeneratedObjects/UNIT/U_N

0

4294967295

0

1

1

CM_EngPower

LINEAR

/VectorAutosarExplorerGeneratedObjects/UNIT/U_kW

0

65535

0

0.01

1

CM_EngSpeed

LINEAR

/VectorAutosarExplorerGeneratedObjects/UNIT/U_rpm

0

65535

0

1

1

CM_EngSpeedIEEE

LINEAR

/VectorAutosarExplorerGeneratedObjects/UNIT/U_rpm

0

4294967295

0

1

1

CM_EngTemp

LINEAR

/VectorAutosarExplorerGeneratedObjects/UNIT/U_degC

0

127

0

1

1

CM_ErrorCode

LINEAR

0

63

0

1

1

CM_Gear

0

7

0

1

1

0

0

Idle

1

1

Gear_1

2

2

Gear_2

3

3

Gear_3

4

4

Gear_4

5

5

Gear_5

CM_GearLock

0

1

0

1

1

0

0

Gear_Lock_Off

1

1

Gear_Lock_On

CM_IdleRunning

0

1

0

1

1

0

0

Running

1

1

Idle

CM_PetrolLevel

LINEAR

/VectorAutosarExplorerGeneratedObjects/UNIT/U_l

0

255

0

1

1

CM_ShiftRequest

0

1

0

1

1

0

0

Shift_Request_Off

1

1

Shift_Request_On

CM_StarterKey

LINEAR

0

1

0

1

1

CM_Status

0

3

0

1

1

0

0

WakeUp

1

1

Running

2

2

GoSleep

3

3

Error

Constant

Signal

AccelerationForce

false

/DataType/Semantics/CM_AccelerationForce

CarSpeed

false

/DataType/Semantics/CM_CarSpeed

Diagnostics

false

DiagRequest_Motor

false

DiagResponse_Motor

false

EcoMode

false

EngForce

false

/DataType/Semantics/CM_EngForce

EngForceIEEE

false

/DataType/Semantics/CM_EngForceIEEE

EngPower

false

/DataType/Semantics/CM_EngPower

EngSpeed

false

/DataType/Semantics/CM_EngSpeed

EngSpeedIEEE

false

/DataType/Semantics/CM_EngSpeedIEEE

EngTemp

false

/DataType/Semantics/CM_EngTemp

ErrorCode

false

Gear

false

/DataType/Semantics/CM_Gear

GearLock

false

/DataType/Semantics/CM_GearLock

IdleRunning

false

/DataType/Semantics/CM_IdleRunning

PetrolLevel

false

/DataType/Semantics/CM_PetrolLevel

ShiftRequest

false

/DataType/Semantics/CM_ShiftRequest

StarterKey

false

Status

false

/DataType/Semantics/CM_Status

VectorAutosarExplorerGeneratedObjects

PDUS

I_SIGNALS

BASE_TYPES

UNIT

U_degC

degC

U_kW

kW

U_l

l

U_mph

mph

U_N

N

U_rpm

rpm

4 附录:生成的power_train.c文件

/**

* The MIT License (MIT)

*

* Copyright (c) 2018-2019 Erik Moqvist

*

* Permission is hereby granted, free of charge, to any person

* obtaining a copy of this software and associated documentation

* files (the "Software"), to deal in the Software without

* restriction, including without limitation the rights to use, copy,

* modify, merge, publish, distribute, sublicense, and/or sell copies

* of the Software, and to permit persons to whom the Software is

* furnished to do so, subject to the following conditions:

*

* The above copyright notice and this permission notice shall be

* included in all copies or substantial portions of the Software.

*

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS

* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN

* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

* SOFTWARE.

*/

/**

* This file was generated by cantools version 39.4.5 Thu Mar 21 22:29:24 2024.

*/

#include

#include "power_train.h"

static inline uint8_t pack_left_shift_u8(

uint8_t value,

uint8_t shift,

uint8_t mask)

{

return (uint8_t)((uint8_t)(value << shift) & mask);

}

static inline uint8_t pack_left_shift_u16(

uint16_t value,

uint8_t shift,

uint8_t mask)

{

return (uint8_t)((uint8_t)(value << shift) & mask);

}

static inline uint8_t pack_left_shift_u32(

uint32_t value,

uint8_t shift,

uint8_t mask)

{

return (uint8_t)((uint8_t)(value << shift) & mask);

}

static inline uint8_t pack_left_shift_u64(

uint64_t value,

uint8_t shift,

uint8_t mask)

{

return (uint8_t)((uint8_t)(value << shift) & mask);

}

static inline uint8_t pack_right_shift_u16(

uint16_t value,

uint8_t shift,

uint8_t mask)

{

return (uint8_t)((uint8_t)(value >> shift) & mask);

}

static inline uint8_t pack_right_shift_u32(

uint32_t value,

uint8_t shift,

uint8_t mask)

{

return (uint8_t)((uint8_t)(value >> shift) & mask);

}

static inline uint8_t pack_right_shift_u64(

uint64_t value,

uint8_t shift,

uint8_t mask)

{

return (uint8_t)((uint8_t)(value >> shift) & mask);

}

static inline uint8_t unpack_right_shift_u8(

uint8_t value,

uint8_t shift,

uint8_t mask)

{

return (uint8_t)((uint8_t)(value & mask) >> shift);

}

int power_train_ab_sdata_init(struct power_train_ab_sdata_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_ab_sdata_t));

msg_p->acceleration_force = 0;

return 0;

}

int power_train_diag_request_init(struct power_train_diag_request_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_diag_request_t));

return 0;

}

int power_train_diag_response_init(struct power_train_diag_response_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_diag_response_t));

return 0;

}

int power_train_diag_request_motor_pack(

uint8_t *dst_p,

const struct power_train_diag_request_motor_t *src_p,

size_t size)

{

if (size < 8u) {

return (-EINVAL);

}

memset(&dst_p[0], 0, 8);

dst_p[0] |= pack_left_shift_u64(src_p->diag_request, 0u, 0xffu);

dst_p[1] |= pack_right_shift_u64(src_p->diag_request, 8u, 0xffu);

dst_p[2] |= pack_right_shift_u64(src_p->diag_request, 16u, 0xffu);

dst_p[3] |= pack_right_shift_u64(src_p->diag_request, 24u, 0xffu);

dst_p[4] |= pack_right_shift_u64(src_p->diag_request, 32u, 0xffu);

dst_p[5] |= pack_right_shift_u64(src_p->diag_request, 40u, 0xffu);

dst_p[6] |= pack_right_shift_u64(src_p->diag_request, 48u, 0xffu);

dst_p[7] |= pack_right_shift_u64(src_p->diag_request, 56u, 0xffu);

return (8);

}

int power_train_diag_request_motor_init(struct power_train_diag_request_motor_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_diag_request_motor_t));

return 0;

}

uint64_t power_train_diag_request_motor_diag_request_encode(double value)

{

return (uint64_t)(value);

}

bool power_train_diag_request_motor_diag_request_is_in_range(uint64_t value)

{

(void)value;

return (true);

}

int power_train_diag_response_motor_init(struct power_train_diag_response_motor_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_diag_response_motor_t));

return 0;

}

int power_train_engine_data_init(struct power_train_engine_data_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_engine_data_t));

return 0;

}

int power_train_engine_data_ieee_init(struct power_train_engine_data_ieee_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_engine_data_ieee_t));

return 0;

}

int power_train_engine_status_init(struct power_train_engine_status_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_engine_status_t));

return 0;

}

int power_train_gear_box_info_unpack(

struct power_train_gear_box_info_t *dst_p,

const uint8_t *src_p,

size_t size)

{

if (size < 1u) {

return (-EINVAL);

}

dst_p->gear = unpack_right_shift_u8(src_p[0], 0u, 0x07u);

dst_p->shift_request = unpack_right_shift_u8(src_p[0], 3u, 0x08u);

dst_p->eco_mode = unpack_right_shift_u8(src_p[0], 6u, 0xc0u);

return (0);

}

int power_train_gear_box_info_init(struct power_train_gear_box_info_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_gear_box_info_t));

return 0;

}

double power_train_gear_box_info_gear_decode(uint8_t value)

{

return ((double)value);

}

bool power_train_gear_box_info_gear_is_in_range(uint8_t value)

{

return (value <= 7u);

}

double power_train_gear_box_info_shift_request_decode(uint8_t value)

{

return ((double)value);

}

bool power_train_gear_box_info_shift_request_is_in_range(uint8_t value)

{

return (value <= 1u);

}

double power_train_gear_box_info_eco_mode_decode(uint8_t value)

{

return ((double)value);

}

bool power_train_gear_box_info_eco_mode_is_in_range(uint8_t value)

{

return (value <= 3u);

}

int power_train_ignition_info_pack(

uint8_t *dst_p,

const struct power_train_ignition_info_t *src_p,

size_t size)

{

if (size < 2u) {

return (-EINVAL);

}

memset(&dst_p[0], 0, 2);

dst_p[0] |= pack_left_shift_u8(src_p->starter_key, 0u, 0x01u);

return (2);

}

int power_train_ignition_info_init(struct power_train_ignition_info_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_ignition_info_t));

return 0;

}

uint8_t power_train_ignition_info_starter_key_encode(double value)

{

return (uint8_t)(value);

}

bool power_train_ignition_info_starter_key_is_in_range(uint8_t value)

{

return (value <= 1u);

}

int power_train_nm_engine_init(struct power_train_nm_engine_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_nm_engine_t));

return 0;

}

int power_train_nm_gateway_power_train_pack(

uint8_t *dst_p,

const struct power_train_nm_gateway_power_train_t *src_p,

size_t size)

{

(void)src_p;

if (size < 4u) {

return (-EINVAL);

}

memset(&dst_p[0], 0, 4);

return (4);

}

int power_train_nm_gateway_power_train_init(struct power_train_nm_gateway_power_train_t *msg_p)

{

if (msg_p == NULL) return -1;

memset(msg_p, 0, sizeof(struct power_train_nm_gateway_power_train_t));

return 0;

}

5 附录:生成的power_train.h文件

/**

* The MIT License (MIT)

*

* Copyright (c) 2018-2019 Erik Moqvist

*

* Permission is hereby granted, free of charge, to any person

* obtaining a copy of this software and associated documentation

* files (the "Software"), to deal in the Software without

* restriction, including without limitation the rights to use, copy,

* modify, merge, publish, distribute, sublicense, and/or sell copies

* of the Software, and to permit persons to whom the Software is

* furnished to do so, subject to the following conditions:

*

* The above copyright notice and this permission notice shall be

* included in all copies or substantial portions of the Software.

*

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND

* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS

* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN

* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN

* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

* SOFTWARE.

*/

/**

* This file was generated by cantools version 39.4.5 Thu Mar 21 22:29:24 2024.

*/

#ifndef POWER_TRAIN_H

#define POWER_TRAIN_H

#ifdef __cplusplus

extern "C" {

#endif

#include

#include

#include

#ifndef EINVAL

# define EINVAL 22

#endif

/* Frame ids. */

#define POWER_TRAIN_DIAG_REQUEST_MOTOR_FRAME_ID (0x601u)

#define POWER_TRAIN_GEAR_BOX_INFO_FRAME_ID (0x3fcu)

#define POWER_TRAIN_IGNITION_INFO_FRAME_ID (0x67u)

#define POWER_TRAIN_NM_GATEWAY_POWER_TRAIN_FRAME_ID (0x51au)

/* Frame lengths in bytes. */

#define POWER_TRAIN_DIAG_REQUEST_MOTOR_LENGTH (8u)

#define POWER_TRAIN_GEAR_BOX_INFO_LENGTH (1u)

#define POWER_TRAIN_IGNITION_INFO_LENGTH (2u)

#define POWER_TRAIN_NM_GATEWAY_POWER_TRAIN_LENGTH (4u)

/* Extended or standard frame types. */

#define POWER_TRAIN_DIAG_REQUEST_MOTOR_IS_EXTENDED (0)

#define POWER_TRAIN_GEAR_BOX_INFO_IS_EXTENDED (0)

#define POWER_TRAIN_IGNITION_INFO_IS_EXTENDED (0)

#define POWER_TRAIN_NM_GATEWAY_POWER_TRAIN_IS_EXTENDED (0)

/* Frame cycle times in milliseconds. */

#define POWER_TRAIN_GEAR_BOX_INFO_CYCLE_TIME_MS (50u)

#define POWER_TRAIN_IGNITION_INFO_CYCLE_TIME_MS (20u)

/* Signal choices. */

/* Frame Names. */

#define POWER_TRAIN_DIAG_REQUEST_MOTOR_NAME "DiagRequest_Motor"

#define POWER_TRAIN_GEAR_BOX_INFO_NAME "GearBoxInfo"

#define POWER_TRAIN_IGNITION_INFO_NAME "Ignition_Info"

#define POWER_TRAIN_NM_GATEWAY_POWER_TRAIN_NAME "NM_Gateway_PowerTrain"

/* Signal Names. */

#define POWER_TRAIN_DIAG_REQUEST_MOTOR_DIAG_REQUEST_NAME "DiagRequest"

#define POWER_TRAIN_GEAR_BOX_INFO_GEAR_NAME "Gear"

#define POWER_TRAIN_GEAR_BOX_INFO_SHIFT_REQUEST_NAME "ShiftRequest"

#define POWER_TRAIN_GEAR_BOX_INFO_ECO_MODE_NAME "EcoMode"

#define POWER_TRAIN_IGNITION_INFO_STARTER_KEY_NAME "StarterKey"

/**

* Signals in message DiagRequest_Motor.

*

* All signal values are as on the CAN bus.

*/

struct power_train_diag_request_motor_t {

/**

* Range: -

* Scale: 1

* Offset: 0

*/

uint64_t diag_request;

};

/**

* Signals in message GearBoxInfo.

*

* All signal values are as on the CAN bus.

*/

struct power_train_gear_box_info_t {

/**

* Range: -

* Scale: 1

* Offset: 0

*/

uint8_t gear;

/**

* Range: -

* Scale: 1

* Offset: 0

*/

uint8_t shift_request;

/**

* Range: -

* Scale: 1

* Offset: 0

*/

uint8_t eco_mode;

};

/**

* Signals in message Ignition_Info.

*

* All signal values are as on the CAN bus.

*/

struct power_train_ignition_info_t {

/**

* Range: -

* Scale: 1

* Offset: 0

*/

uint8_t starter_key;

};

/**

* Signals in message NM_Gateway_PowerTrain.

*

* All signal values are as on the CAN bus.

*/

struct power_train_nm_gateway_power_train_t {

/**

* Dummy signal in empty message.

*/

uint8_t dummy;

};

/**

* Init message fields to default values from ABSdata.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_ab_sdata_init(struct power_train_ab_sdata_t *msg_p);

/**

* Init message fields to default values from Diag_Request.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_diag_request_init(struct power_train_diag_request_t *msg_p);

/**

* Init message fields to default values from Diag_Response.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_diag_response_init(struct power_train_diag_response_t *msg_p);

/**

* Pack message DiagRequest_Motor.

*

* @param[out] dst_p Buffer to pack the message into.

* @param[in] src_p Data to pack.

* @param[in] size Size of dst_p.

*

* @return Size of packed data, or negative error code.

*/

int power_train_diag_request_motor_pack(

uint8_t *dst_p,

const struct power_train_diag_request_motor_t *src_p,

size_t size);

/**

* Init message fields to default values from DiagRequest_Motor.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_diag_request_motor_init(struct power_train_diag_request_motor_t *msg_p);

/**

* Encode given signal by applying scaling and offset.

*

* @param[in] value Signal to encode.

*

* @return Encoded signal.

*/

uint64_t power_train_diag_request_motor_diag_request_encode(double value);

/**

* Check that given signal is in allowed range.

*

* @param[in] value Signal to check.

*

* @return true if in range, false otherwise.

*/

bool power_train_diag_request_motor_diag_request_is_in_range(uint64_t value);

/**

* Init message fields to default values from DiagResponse_Motor.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_diag_response_motor_init(struct power_train_diag_response_motor_t *msg_p);

/**

* Init message fields to default values from EngineData.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_engine_data_init(struct power_train_engine_data_t *msg_p);

/**

* Init message fields to default values from EngineDataIEEE.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_engine_data_ieee_init(struct power_train_engine_data_ieee_t *msg_p);

/**

* Init message fields to default values from EngineStatus.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_engine_status_init(struct power_train_engine_status_t *msg_p);

/**

* Unpack message GearBoxInfo.

*

* @param[out] dst_p Object to unpack the message into.

* @param[in] src_p Message to unpack.

* @param[in] size Size of src_p.

*

* @return zero(0) or negative error code.

*/

int power_train_gear_box_info_unpack(

struct power_train_gear_box_info_t *dst_p,

const uint8_t *src_p,

size_t size);

/**

* Init message fields to default values from GearBoxInfo.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_gear_box_info_init(struct power_train_gear_box_info_t *msg_p);

/**

* Decode given signal by applying scaling and offset.

*

* @param[in] value Signal to decode.

*

* @return Decoded signal.

*/

double power_train_gear_box_info_gear_decode(uint8_t value);

/**

* Check that given signal is in allowed range.

*

* @param[in] value Signal to check.

*

* @return true if in range, false otherwise.

*/

bool power_train_gear_box_info_gear_is_in_range(uint8_t value);

/**

* Decode given signal by applying scaling and offset.

*

* @param[in] value Signal to decode.

*

* @return Decoded signal.

*/

double power_train_gear_box_info_shift_request_decode(uint8_t value);

/**

* Check that given signal is in allowed range.

*

* @param[in] value Signal to check.

*

* @return true if in range, false otherwise.

*/

bool power_train_gear_box_info_shift_request_is_in_range(uint8_t value);

/**

* Decode given signal by applying scaling and offset.

*

* @param[in] value Signal to decode.

*

* @return Decoded signal.

*/

double power_train_gear_box_info_eco_mode_decode(uint8_t value);

/**

* Check that given signal is in allowed range.

*

* @param[in] value Signal to check.

*

* @return true if in range, false otherwise.

*/

bool power_train_gear_box_info_eco_mode_is_in_range(uint8_t value);

/**

* Pack message Ignition_Info.

*

* @param[out] dst_p Buffer to pack the message into.

* @param[in] src_p Data to pack.

* @param[in] size Size of dst_p.

*

* @return Size of packed data, or negative error code.

*/

int power_train_ignition_info_pack(

uint8_t *dst_p,

const struct power_train_ignition_info_t *src_p,

size_t size);

/**

* Init message fields to default values from Ignition_Info.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_ignition_info_init(struct power_train_ignition_info_t *msg_p);

/**

* Encode given signal by applying scaling and offset.

*

* @param[in] value Signal to encode.

*

* @return Encoded signal.

*/

uint8_t power_train_ignition_info_starter_key_encode(double value);

/**

* Check that given signal is in allowed range.

*

* @param[in] value Signal to check.

*

* @return true if in range, false otherwise.

*/

bool power_train_ignition_info_starter_key_is_in_range(uint8_t value);

/**

* Init message fields to default values from NM_Engine.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_nm_engine_init(struct power_train_nm_engine_t *msg_p);

/**

* Pack message NM_Gateway_PowerTrain.

*

* @param[out] dst_p Buffer to pack the message into.

* @param[in] src_p Data to pack.

* @param[in] size Size of dst_p.

*

* @return Size of packed data, or negative error code.

*/

int power_train_nm_gateway_power_train_pack(

uint8_t *dst_p,

const struct power_train_nm_gateway_power_train_t *src_p,

size_t size);

/**

* Init message fields to default values from NM_Gateway_PowerTrain.

*

* @param[in] msg_p Message to init.

*

* @return zero(0) on success or (-1) in case of nullptr argument.

*/

int power_train_nm_gateway_power_train_init(struct power_train_nm_gateway_power_train_t *msg_p);

#ifdef __cplusplus

}

#endif

#endif

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: