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()