加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
dbcParse_MessageUnpack.py 3.70 KB
一键复制 编辑 原始数据 按行查看 历史
import cantools
import os
class dbcParse_MessageUnpackFileGenerate:
def __init__(self):
pass
# 创建CAN报文解析函数.c文件
def __create_messageunpack_c_file(self, dbc_file_pathname, dbc_ecu_name):
dbc_info = cantools.db.load_file(dbc_file_pathname)
dbc_c_file_name = dbc_file_pathname.replace('.dbc', '_MessageUnpack.c')
dbc_name = dbc_file_pathname.replace('.dbc', '')
file_folder = 'src_generate'
if not os.path.exists(file_folder):
os.mkdir(file_folder)
dbc_c_file_pathname = os.path.join(file_folder, dbc_c_file_name)
with open(dbc_c_file_pathname, 'w', encoding='utf-8') as file_c:
line_chars = '#include \"' + dbc_file_pathname.replace('.dbc', '_MessageUnpack.h') + '\"'
file_c.write(line_chars + '\n\n')
for message in dbc_info.messages:
if(dbc_ecu_name in message.senders):
continue
else:
# # 定义全局结构体,存放解析后的报文内容
# line_chars = dbc_name + '_' + message.name.upper() + '_STRUCT t' + message.name + ';'
# file_c.write(line_chars + '\n')
# 写入函数名
line_chars = 'void ' + dbc_file_pathname.replace('.dbc', '_') + message.name + '_Unpack(const uint8 const * pData, ' + dbc_name + '_' + message.name.upper() + '_STRUCT *p' + message.name + ')\n{'
file_c.write(line_chars + '\n')
for signal in message.signals:
sigPbcfgName = dbc_file_pathname.replace('.dbc', '') + '_' + message.name + '_' + signal.name + '_PbCfg'
sigValName = '(void *)(&(p' + message.name + '->' + 'sig_' + signal.name + '_Val)' + ')'
line_chars = ' dbcParse_CanSignalDecode(&' + sigPbcfgName + ', pData, ' + sigValName + ');'
file_c.write(line_chars + '\n')
line_chars = '}\n'
file_c.write(line_chars + '\n')
# 创建CAN报文解析函数.h文件
def __create_messageunpack_h_file(self, dbc_file_pathname, dbc_ecu_name):
dbc_info = cantools.db.load_file(dbc_file_pathname)
dbc_h_file_name = dbc_file_pathname.replace('.dbc', '_MessageUnpack.h')
dbc_name = dbc_file_pathname.replace('.dbc', '')
file_folder = 'src_generate'
if not os.path.exists(file_folder):
os.mkdir(file_folder)
dbc_h_file_pathname = os.path.join(file_folder, dbc_h_file_name)
with open(dbc_h_file_pathname, 'w', encoding='utf-8') as file_h:
line_chars = '#include \"' + dbc_file_pathname.replace('.dbc', '_SignalsPbconfig.h') + '\"'
file_h.write(line_chars + '\n\n')
for message in dbc_info.messages:
if(dbc_ecu_name in message.senders):
continue
else:
# # 声明全局结构体,存放解析后的报文内容
# line_chars = 'extern ' + dbc_name + '_' + message.name.upper() + '_STRUCT t' + message.name + ';'
# file_h.write(line_chars + '\n')
# 声明函数
line_chars = 'extern void ' + dbc_file_pathname.replace('.dbc', '_') + message.name + '_Unpack(const uint8 const * pData, ' + dbc_name + '_' + message.name.upper() + '_STRUCT *p' + message.name + ');\n'
file_h.write(line_chars + '\n')
def create_messageunpack_files(self, dbc_file_pathname, dbc_ecu_name):
self.__create_messageunpack_c_file(dbc_file_pathname, dbc_ecu_name)
self.__create_messageunpack_h_file(dbc_file_pathname, dbc_ecu_name)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化