feat():initial version

This commit is contained in:
2026-06-09 20:16:47 +08:00
commit 85fbb3188c
14809 changed files with 3044607 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
# coding=utf-8
import time
import tkinter as tk
from tkinter import Button, Checkbutton, Entry, Image, IntVar, Label, StringVar, scrolledtext, ttk, filedialog, messagebox
from datetime import datetime
from string import Template
import tkinter_ui as gui
import template as tmpl
# 获取当前时间
def Time(): #getCurrentTime
current_time = time.strftime('[%Y-%m-%d %H:%M:%S]',time.localtime(time.time()))
return current_time
if __name__ == "__main__":
# #全局风格类型变量
# entry_width = 30
# short_entry_width = 15
# font_pix = 15
# font_type = "微软雅黑"
# #window.geometry('1000x500+0+0')
# #window.resizable(0,0)
# #setWindowCenter(window, 700, 400) #窗口居中,传入窗口句柄和窗口宽高
#主窗口
#实例化一个窗体
window = gui.instantiate_the_window("Someip Service Code Generator") #窗口名
note = gui.instantiate_the_note(window)
#在窗体win中创建一个Notebook并承载以下两个选项卡
TabMain = gui.instantiate_the_tab(note, "Main") #选项卡1
Tab2 = gui.instantiate_the_tab(note, "Tab2")
## 以下为Main选项卡
# 第一组 Create/Modify
group_app = gui.instantiate_the_group(TabMain,"App") #创建Frame一组
#设置输入框控件使用textvariable参数来接收变量
# 定义输入框1
label1 = Label(group_app, text='Run Config File Path')
label1.grid(sticky="w", padx=15)
entry1 = Entry(group_app, width=tmpl.entry_width, textvariable=tmpl.runConfigFilename)
entry1.grid(row=0,column=1,sticky="w")
entry1.config(state='normal') #'readonly'
# Button(group_app, text='...', command=open_file).grid(row=0, column=2)
# 定义输入框2
label2 = Label(group_app, text='App name')
label2.grid(sticky="w", padx=15)
entry2 = Entry(group_app, width=tmpl.entry_width, textvariable=tmpl.appName)
entry2.grid(row=1,column=1,sticky="w")
# 定义输入框3
label3 = Label(group_app, text='Service ID')
label3.grid(sticky="w", padx=15)
entry3 = Entry(group_app, width=tmpl.entry_width, textvariable=tmpl.serviceID)
entry3.grid(row=2,column=1)
entry3.config(state='readonly')
# 定义输入框4
label4 = Label(group_app, text='Instance ID')
label4.grid(sticky="w", padx=15)
entry4 = Entry(group_app, width=tmpl.ntry_width, textvariable=tmpl.instanceID)
entry4.grid(row=3,column=1)
entry4.config(state='readonly')
# 设置复选框控件使用variable参数来接收变量
check0 = Checkbutton(window, text="use_tcp",variable = tmpl.use_tcp,onvalue=1,offvalue=0)
check1 = Checkbutton(window, text="offer_F-F_method",variable = tmpl.offer_F_F_method,onvalue=1,offvalue=0, command=tmpl.entryState)
check2 = Checkbutton(window, text="offer_R-R_method",variable = tmpl.offer_R_R_method,onvalue=1,offvalue=0, command=tmpl.entryState)
check3 = Checkbutton(window, text="offer_setter",variable = tmpl.offer_setter,onvalue=1,offvalue=0, command=tmpl.entryState)
check4 = Checkbutton(window, text="offer_getter",variable = tmpl.offer_getter,onvalue=1,offvalue=0, command=tmpl.entryState)
check56 = Checkbutton(window, text="offer_event",variable = tmpl.offer_event,onvalue=1,offvalue=0, command=tmpl.entryState)
check78 = Checkbutton(window, text="offer_field_notifier",variable = tmpl.offer_field_notifier,onvalue=1,offvalue=0, command=tmpl.entryState)
check0.grid(sticky="w")
check1.grid(sticky="w")
check2.grid(sticky="w")
check3.grid(sticky="w")
check4.grid(sticky="w")
check56.grid(sticky="w")
check78.grid(sticky="w")
# 设置各种服务类型的IDs使用textvariable参数来接收变量
idEntry1 = Entry(window, width=tmpl.entry_width, textvariable=tmpl.F_F_method_ids)
idEntry2 = Entry(window, width=tmpl.entry_width, textvariable=tmpl.R_R_method_ids)
idEntry3 = Entry(window, width=tmpl.entry_width, textvariable=tmpl.setter_ids)
idEntry4 = Entry(window, width=tmpl.entry_width, textvariable=tmpl.getter_ids)
idEntry5 = Entry(window, width=tmpl.short_entry_width, textvariable=tmpl.eventgroup_ids)
idEntry6 = Entry(window, width=tmpl.short_entry_width, textvariable=tmpl.event_ids)
idEntry7 = Entry(window, width=tmpl.short_entry_width, textvariable=tmpl.ield_eventgroup_ids)
idEntry8 = Entry(window, width=tmpl.short_entry_width, textvariable=tmpl.field_event_ids)
idEntry1.grid_forget()
idEntry2.grid_forget()
idEntry3.grid_forget()
idEntry4.grid_forget()
idEntry5.grid_forget()
idEntry6.grid_forget()
idEntry7.grid_forget()
idEntry8.grid_forget()
# 按钮
button1 = Button(window, text="Generate", command=tmpl.generate)
button1.grid(row=11, column=0, sticky="w", padx=15, pady=5)
button2 = Button(window, text='Exit',command=window.quit)
button2.grid(row=11, column=1, sticky="e", padx=15, pady=5)
window.mainloop()

View File

@@ -0,0 +1,54 @@
/// @author liuzhimin@huaxu.com
/// @generate date: ${GENE_DATE}
/// [注本文件为自动生成不需要人为编辑若有修改请通过配置py脚本来重新生成.]
#ifndef VSOMEIP_${APP_NAME}_CFG_IDS_HPP
#define VSOMEIP_${APP_NAME}_CFG_IDS_HPP
#define VSOMEIP_CONFIGURATION "${RUN_CONFIG_FILENAME}"
#define APP_NAME "${APP_NAME}"
#define ${APP_NAME}_SERVICE_ID ${SERVICE_ID}
#define ${APP_NAME}_INSTANCE_ID ${INSTANCE_ID}
#define USE_TCP ${USE_TCP}
#define OFFER_F_F_METHOD ${OFFER_F_F_METHOD}
#define OFFER_R_R_METHOD ${OFFER_R_R_METHOD}
#define OFFER_SETTER ${OFFER_SETTER}
#define OFFER_GETTER ${OFFER_GETTER}
#define OFFER_EVENT ${OFFER_EVENT}
#define OFFER_FIELD_EVENT ${OFFER_FIELD_EVENT}
#if OFFER_F_F_METHOD
#define ${APP_NAME}_${FF_METHOD_NAME}_F_F_METHOD_ID 0x0100 //0x0101,0x0102...
#endif
#if OFFER_R_R_METHOD
#define ${APP_NAME}_${RR_METHOD_NAME}_R_R_METHOD_ID 0x0200 //0x0201,0x0202...
#endif
#if OFFER_GETTER
#define ${APP_NAME}_${GET_METHOD_NAME}_GET_METHOD_ID 0x0300 //0x0301,0x0302...
#endif
#if OFFER_SETTER
#define ${APP_NAME}_${SET_METHOD_NAME}_SET_METHOD_ID 0x0400 //0x0401,0x0402...
#endif
#if OFFER_EVENT
#define ${APP_NAME}_${EVENTGROUP_NAME}_EVENTGROUP_ID 0x8100 //0x8200,0x8300...
#define ${APP_NAME}_${EVENT_NAME}_EVENT_ID 0x8101 //0x8102,0x8103...
#endif
#if OFFER_FIELD_EVENT
#define ${APP_NAME}_${FIELD_EVENTGROUP_NAME}_FIELD_EVENTGROUP_ID 0x8800 //0x8900,0x8a00...
#define ${APP_NAME}_${FIELD_EVENT_NAME}_FIELD_EVENT_ID 0x8801 //0x8802,0x8803...
#endif
#endif // VSOMEIP_EXAMPLES_SAMPLE_CFG_IDS_HPP

View File

@@ -0,0 +1,54 @@
/// @author liuzhimin@huaxu.com
/// @generate date: 2022-07-20 16:22:40
/// [注本文件为自动生成不需要人为编辑若有修改请通过配置py脚本来重新生成.]
#ifndef VSOMEIP_TCU_CFG_IDS_HPP
#define VSOMEIP_TCU_CFG_IDS_HPP
#define VSOMEIP_CONFIGURATION "/etc/vsomeip"
#define APP_NAME "TCU"
#define TCU_SERVICE_ID 0x1000
#define TCU_INSTANCE_ID 0x2000
#define USE_TCP 1
#define OFFER_F_F_METHOD 1
#define OFFER_R_R_METHOD 1
#define OFFER_SETTER 1
#define OFFER_GETTER 1
#define OFFER_EVENT 0
#define OFFER_FIELD_EVENT 1
#if OFFER_F_F_METHOD
#define TCU_ADASOFF_F_F_METHOD_ID 0x0100 //0x0101,0x0102...
#endif
#if OFFER_R_R_METHOD
#define TCU_CAMSTATUS_R_R_METHOD_ID 0x0200 //0x0201,0x0202...
#endif
#if OFFER_GETTER
#define TCU_DISTANCE_GET_METHOD_ID 0x0300 //0x0301,0x0302...
#endif
#if OFFER_SETTER
#define TCU_LIMITEDSPEED_SET_METHOD_ID 0x0400 //0x0401,0x0402...
#endif
#if OFFER_EVENT
#define TCU_SIGNDETECTED_EVENTGROUP_ID 0x8100 //0x8200,0x8300...
#define TCU_SPEEDLIMITSIGNDETECTED_EVENT_ID 0x8101 //0x8102,0x8103...
#endif
#if OFFER_FIELD_EVENT
#define TCU_SIGNDETECTED_FIELD_EVENTGROUP_ID 0x8800 //0x8900,0x8a00...
#define TCU_SPEEDLIMITSIGNDETECTED_FIELD_EVENT_ID 0x8801 //0x8802,0x8803...
#endif
#endif // VSOMEIP_EXAMPLES_SAMPLE_CFG_IDS_HPP

View File

@@ -0,0 +1,112 @@
# coding=utf-8
from datetime import datetime
from string import Template
from tkinter import Image, IntVar, StringVar,filedialog, messagebox
#以下是所有需获取的变量
runConfigFilename = StringVar("/etc/vsomeip")
appName = StringVar(None,"tcu")
serviceID = StringVar(None,"0x1000")
instanceID = StringVar(None,"0x2000")
use_tcp = IntVar()
offer_F_F_method = IntVar()
offer_R_R_method = IntVar()
offer_setter = IntVar()
offer_getter = IntVar()
offer_event = IntVar()
offer_field_notifier = IntVar()
F_F_method_ids = StringVar(None,"adasOFF")
R_R_method_ids = StringVar(None,"camStatus")
setter_ids = StringVar(None,"limitedSpeed")
getter_ids = StringVar(None,"distance")
eventgroup_ids = StringVar(None,"SignDetected")
event_ids = StringVar(None,"speedLimitSignDetected")
field_eventgroup_ids = StringVar(None,"SignDetected")
field_event_ids = StringVar(None,"speedLimitSignDetected")
def generate():
filePath = r'%s_cfg_ids.hpp' % appName.get().lower()
class_file = open(filePath,'w')
lines = []
#模版文件
template_file = open(r'sample_cfg_ids.hpp.template','r')
tmpl = Template(template_file.read())
#模版替换
lines.append(tmpl.substitute(
GENE_DATE = datetime.now().strftime('%Y-%m-%d %H:%M:%S'), #代码生成日期设置
RUN_CONFIG_FILENAME = runConfigFilename.get(),
APP_NAME = appName.get().upper(),
#MODULE_NAME = appName.get().upper(),
SERVICE_ID = serviceID.get(),
INSTANCE_ID = instanceID.get(),
USE_TCP = use_tcp.get(),
OFFER_F_F_METHOD = offer_F_F_method.get(),
OFFER_R_R_METHOD = offer_R_R_method.get(),
OFFER_SETTER = offer_setter.get(),
OFFER_GETTER = offer_getter.get(),
OFFER_EVENT = offer_event.get(),
OFFER_FIELD_EVENT = offer_field_notifier.get(),
FF_METHOD_NAME = F_F_method_ids.get().upper(),
RR_METHOD_NAME = R_R_method_ids.get().upper(),
GET_METHOD_NAME = getter_ids.get().upper(),
SET_METHOD_NAME = setter_ids.get().upper(),
EVENTGROUP_NAME = eventgroup_ids.get().upper(),
EVENT_NAME = event_ids.get().upper(),
FIELD_EVENTGROUP_NAME = field_eventgroup_ids.get().upper(),
FIELD_EVENT_NAME = field_event_ids.get().upper(),
))
# 0.将生成的代码写入文件
class_file.writelines(lines)
class_file.close()
print('generate "%s" success. ~_~' % filePath)
messagebox.showinfo("tips",'Generate "%s" success.' % filePath)
def open_file():
try:
global file
filepath = filedialog.askopenfilename() # 打开文件,返回该文件的完整路径
runConfigFilename.set(filepath)
file = Image.open(runConfigFilename.get())
except Exception as e:
print("您没有选择任何文件",e)
def entryState():
None
# if offer_F_F_method.get():
# idEntry1.grid(row=5,column=1)
# else:
# idEntry1.grid_forget() # the same as grid_remove()
# if offer_R_R_method.get():
# idEntry2.grid(row=6,column=1)
# else:
# idEntry2.grid_forget()
# if offer_setter.get():
# idEntry3.grid(row=7,column=1)
# else:
# idEntry3.grid_forget()
# if offer_getter.get():
# idEntry4.grid(row=8,column=1)
# else:
# idEntry4.grid_forget()
# if offer_event.get():
# idEntry5.grid(sticky="w",row=9,column=1)
# idEntry6.grid(sticky="e",row=9,column=1)
# else:
# idEntry5.grid_forget()
# idEntry6.grid_forget()
# if offer_field_notifier.get():
# idEntry7.grid(sticky="w",row=10,column=1)
# idEntry8.grid(sticky="e",row=10,column=1)
# else:
# idEntry7.grid_forget()
# idEntry8.grid_forget()
def modifyContent():
print("modifyContent")

View File

@@ -0,0 +1,52 @@
# coding=utf-8
from doctest import OutputChecker
import sys
import tkinter as tk
from tkinter import scrolledtext, ttk, messagebox
import time
# 获取当前时间
def Time(): #getCurrentTime
current_time = time.strftime('[%Y-%m-%d %H:%M:%S]',time.localtime(time.time()))
return current_time
#设置窗口宽高,以及窗口在屏幕居中显示
def setWindowCenter(root, width, height):
screenwidth = root.winfo_screenwidth() # 获取显示屏宽度
screenheight = root.winfo_screenheight() # 获取显示屏高度
size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2) # 设置窗口居中参数
root.geometry(size) # 让窗口居中显示
def instantiate_the_window(window_name):
#实例化一个窗体
window = tk.Tk()
window.title(window_name) #窗口名
#setWindowCenter(window, 800, 400) #窗口居中,传入窗口句柄和窗口宽高
return window
def instantiate_the_note(window):
#在窗体win中创建一个Notebook并承载以下两个选项卡
note = ttk.Notebook(window)
return note
def instantiate_the_tab(note, tab_name):
#在窗体win中创建一个Notebook并承载以下两个选项卡
tab = ttk.Frame(note,relief="solid",borderwidth=1)
note.add(tab, text = tab_name) #选项卡
note.pack()
return tab
def instantiate_the_group(tab, group_name, _row=0, _column=0, _padx=10, _pady=10):
group = tk.LabelFrame(tab, text=group_name) #创建Frame一组
group.grid(row = _row, column = _column, padx = _padx, pady = _pady)
return group
def instantiate_the_element(group,ele_type,ele_name,row,column,padx,pady):
#if ele_type
None
# 打印日志定向到滚动文本框
def direct_log_to_scrolledtext(tab):
log_data_Text = scrolledtext.ScrolledText(tab, width=100, height=10, relief="solid")
log_data_Text.pack()
sys.stdout = OutputChecker.StdoutRedirector(log_data_Text)