44 lines
1.8 KiB
Python
44 lines
1.8 KiB
Python
import numpy as np
|
|
from pandas import DataFrame
|
|
|
|
|
|
def code_param_arm(sheet: DataFrame) -> str|None:
|
|
""" 生成所需代码内容 """
|
|
|
|
result = ""
|
|
result += "#include <stdint.h>\n"
|
|
result += "#include <stdbool.h>\n"
|
|
result += "\n"
|
|
object_list = []
|
|
|
|
serises_variable = sheet['变量名'].dropna()
|
|
serises_name = sheet['协议结构名称'].dropna()
|
|
serises_name[serises_variable.index[-1]+1] = 'endline'
|
|
for index in range(serises_name.shape[0]-1):
|
|
meta_object = {}
|
|
meta_object['name'] = serises_name.iloc[index]
|
|
meta_object['range'] = (serises_name.index[index], serises_name.index[index+1]-1)
|
|
meta_object['member'] = sheet.loc[serises_name.index[index]: serises_name.index[index+1]-1]
|
|
|
|
code_object = f"typedef struct tag_{meta_object['name']}" + "\n"
|
|
code_object += "{" + "\n"
|
|
list_codes = []
|
|
for id, item in meta_object['member'].iterrows():
|
|
if item['变量名'] is np.nan:
|
|
continue
|
|
code_veriable = f" uint16_t "
|
|
code_veriable += f"a" if item['数据长度'] > 1 else ""
|
|
code_veriable += f"{item['变量名']}"
|
|
code_veriable += f"[{item['数据长度']}];" if item['数据长度'] > 1 else ";"
|
|
code_comment = f"/*{item['地址']} {item['数据项名称']}*/"
|
|
list_codes.append((index, code_veriable, code_comment))
|
|
code_len_max = max((len(line[1]) for line in list_codes)) + 2
|
|
code_len_max = code_len_max if code_len_max > 65 else 65
|
|
for id, line_prefix, line_suffix in list_codes:
|
|
code_object += line_prefix + " " * (code_len_max - len(line_prefix)) + line_suffix + "\n"
|
|
code_object += "}" + f"{meta_object['name']};" + "\n"
|
|
|
|
result += code_object + "\n"
|
|
|
|
|
|
return result |