141 lines
4.5 KiB
Python
141 lines
4.5 KiB
Python
from database import init_db, get_all_mcus, get_mcu, add_mcu, update_mcu, delete_mcu
|
||
|
||
# 定义所有 MCU 字段(除了 id)
|
||
MCU_FIELDS = [
|
||
"name", "core_num", "core_type", "instruction_set", "coremark", "coremark_per_mhz",
|
||
"frequency", "flash", "rom", "ram", "sram", "sram_in_rtc", "bus_width",
|
||
"cache_type", "l1_cache_size", "l2_cache_size", "l3_cache_size",
|
||
"pipeline_depth", "simd_support", "fpu", "package", "gpios", "uarts",
|
||
"i2cs", "i2ses", "spis", "spi_protocols", "systems", "manufacturer", "link"
|
||
]
|
||
|
||
FIELD_LABELS = {
|
||
"name": "Name",
|
||
"core_num": "# of Cores",
|
||
"core_type": "Core Architecture",
|
||
"instruction_set": "Instruction Set",
|
||
"coremark": "CoreMark Score",
|
||
"coremark_per_mhz": "CoreMark/MHz",
|
||
"frequency": "Frequency (MHz)",
|
||
"flash": "Flash (KB)",
|
||
"rom": "ROM (KB)",
|
||
"ram": "RAM (KB)",
|
||
"sram": "SRAM (KB)",
|
||
"sram_in_rtc": "RTC SRAM (KB)",
|
||
"bus_width": "Bus Width (bit)",
|
||
"cache_type": "Cache Type",
|
||
"l1_cache_size": "L1 Cache (KB)",
|
||
"l2_cache_size": "L2 Cache (KB)",
|
||
"l3_cache_size": "L3 Cache (KB)",
|
||
"pipeline_depth": "Pipeline Depth",
|
||
"simd_support": "SIMD support (y=1, n=0)",
|
||
"fpu": "FPU support (Single/Double Precision)",
|
||
"package": "Package",
|
||
"gpios": "Number of GPIO ",
|
||
"uarts": "Number of UARTs",
|
||
"i2cs": "Number of I2C",
|
||
"i2ses": "Number of I2S",
|
||
"spis": "Number of SPI",
|
||
"spi_protocols": "SPI Protocols",
|
||
"systems": "Systems",
|
||
"manufacturer": "Manufacturer",
|
||
"link": "Link"
|
||
}
|
||
|
||
def list_mcus():
|
||
mcus = get_all_mcus()
|
||
if not mcus:
|
||
print("⚠️ MCU 数据库为空。")
|
||
else:
|
||
print("\n=== MCU 列表 ===")
|
||
for m in mcus:
|
||
print(f"ID: {m['id']} | 名称: {m['name']} | 核心: {m['core_num']} x {m['core_type']} | "
|
||
f"频率: {m['frequency']} MHz | 厂商: {m.get('manufacturer','')}")
|
||
print("=================\n")
|
||
|
||
def input_fields(existing=None):
|
||
"""动态输入所有字段(友好名称提示),existing 用于编辑时提供默认值"""
|
||
data = {}
|
||
for field in MCU_FIELDS:
|
||
old_val = existing.get(field) if existing else ""
|
||
display_name = FIELD_LABELS.get(field, field) # ✅ 使用中文提示
|
||
prompt = f"{display_name} ({old_val if old_val is not None else ''}): "
|
||
val = input(prompt).strip()
|
||
if val == "" and existing: # 编辑时保留原值
|
||
continue
|
||
if val == "": # 新增时空值存 None
|
||
data[field] = None
|
||
else:
|
||
# ✅ 类型转换
|
||
if field in ["pipeline_depth"]:
|
||
try:
|
||
data[field] = int(val)
|
||
except ValueError:
|
||
data[field] = None
|
||
elif field in ["coremark_per_mhz"]:
|
||
try:
|
||
data[field] = float(val)
|
||
except ValueError:
|
||
data[field] = None
|
||
elif field == "simd_support":
|
||
data[field] = val.lower() in ["1", "true", "yes", "y"]
|
||
else:
|
||
data[field] = val
|
||
return data
|
||
|
||
def create_mcu():
|
||
print("\n=== 添加 MCU ===")
|
||
fields = input_fields()
|
||
add_mcu(**fields)
|
||
print("✅ MCU 添加成功!")
|
||
|
||
def edit_mcu():
|
||
mcu_id = int(input("输入要修改的 MCU ID: "))
|
||
existing = get_mcu(mcu_id)
|
||
if not existing:
|
||
print("❌ MCU ID 不存在")
|
||
return
|
||
print("\n=== 编辑 MCU(直接回车保留原值) ===")
|
||
fields = input_fields(existing)
|
||
if fields:
|
||
update_mcu(mcu_id, **fields)
|
||
print("✅ MCU 更新成功!")
|
||
else:
|
||
print("⚠️ 未修改任何字段。")
|
||
|
||
def remove_mcu():
|
||
mcu_id = int(input("输入要删除的 MCU ID: "))
|
||
if not get_mcu(mcu_id):
|
||
print("❌ MCU ID 不存在")
|
||
return
|
||
delete_mcu(mcu_id)
|
||
print("✅ MCU 删除成功!")
|
||
|
||
def menu():
|
||
while True:
|
||
print("\n=== MCU 管理菜单 ===")
|
||
print("1. 查看所有 MCU")
|
||
print("2. 添加 MCU")
|
||
print("3. 修改 MCU")
|
||
print("4. 删除 MCU")
|
||
print("5. 退出")
|
||
choice = input("选择操作 (1-5): ")
|
||
|
||
if choice == "1":
|
||
list_mcus()
|
||
elif choice == "2":
|
||
create_mcu()
|
||
elif choice == "3":
|
||
edit_mcu()
|
||
elif choice == "4":
|
||
remove_mcu()
|
||
elif choice == "5":
|
||
print("👋 退出 MCU 管理工具")
|
||
break
|
||
else:
|
||
print("❌ 无效选择,请重新输入。")
|
||
|
||
if __name__ == "__main__":
|
||
init_db()
|
||
menu()
|