diff --git a/.DS_Store b/.DS_Store index b51dd0f..258cca2 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/app/code_page/bsp_interface.py b/app/code_page/bsp_interface.py index 0a12798..8faacdc 100644 --- a/app/code_page/bsp_interface.py +++ b/app/code_page/bsp_interface.py @@ -235,7 +235,15 @@ class BspPeripheralBase(QWidget): return True def _generate_source_file(self, configs, template_dir): - template_path = os.path.join(template_dir, self.template_names['source']) + # 从子文件夹加载模板(与_generate_header_file保持一致) + periph_folder = self.peripheral_name.lower() + template_base_dir = CodeGenerator.get_assets_dir("User_code/bsp") + template_path = os.path.join(template_base_dir, periph_folder, self.template_names['source']) + + if not os.path.exists(template_path): + # 如果子文件夹不存在,尝试从根目录加载(向后兼容) + template_path = os.path.join(template_base_dir, self.template_names['source']) + template_content = CodeGenerator.load_template(template_path) if not template_content: return False @@ -398,7 +406,15 @@ class bsp_can(BspPeripheralBase): ) def _generate_source_file(self, configs, template_dir): - template_path = os.path.join(template_dir, self.template_names['source']) + # 从子文件夹加载模板(与_generate_header_file保持一致) + periph_folder = self.peripheral_name.lower() + template_base_dir = CodeGenerator.get_assets_dir("User_code/bsp") + template_path = os.path.join(template_base_dir, periph_folder, self.template_names['source']) + + if not os.path.exists(template_path): + # 如果子文件夹不存在,尝试从根目录加载(向后兼容) + template_path = os.path.join(template_base_dir, self.template_names['source']) + template_content = CodeGenerator.load_template(template_path) if not template_content: return False @@ -1048,7 +1064,14 @@ class bsp_gpio(QWidget): return True def _generate_header_file(self, configs, template_dir): - template_path = os.path.join(template_dir, "gpio.h") + # 从子文件夹加载模板 + template_base_dir = CodeGenerator.get_assets_dir("User_code/bsp") + template_path = os.path.join(template_base_dir, "gpio", "gpio.h") + + if not os.path.exists(template_path): + # 向后兼容:从根目录加载 + template_path = os.path.join(template_base_dir, "gpio.h") + template_content = CodeGenerator.load_template(template_path) if not template_content: return False @@ -1067,7 +1090,14 @@ class bsp_gpio(QWidget): return True def _generate_source_file(self, configs, template_dir): - template_path = os.path.join(template_dir, "gpio.c") + # 从子文件夹加载模板 + template_base_dir = CodeGenerator.get_assets_dir("User_code/bsp") + template_path = os.path.join(template_base_dir, "gpio", "gpio.c") + + if not os.path.exists(template_path): + # 向后兼容:从根目录加载 + template_path = os.path.join(template_base_dir, "gpio.c") + template_content = CodeGenerator.load_template(template_path) if not template_content: return False @@ -1305,7 +1335,14 @@ class bsp_pwm(QWidget): return True def _generate_header_file(self, configs, template_dir): - template_path = os.path.join(template_dir, "pwm.h") + # 从子文件夹加载模板 + template_base_dir = CodeGenerator.get_assets_dir("User_code/bsp") + template_path = os.path.join(template_base_dir, "pwm", "pwm.h") + + if not os.path.exists(template_path): + # 向后兼容:从根目录加载 + template_path = os.path.join(template_base_dir, "pwm.h") + template_content = CodeGenerator.load_template(template_path) if not template_content: return False @@ -1324,7 +1361,14 @@ class bsp_pwm(QWidget): return True def _generate_source_file(self, configs, template_dir): - template_path = os.path.join(template_dir, "pwm.c") + # 从子文件夹加载模板 + template_base_dir = CodeGenerator.get_assets_dir("User_code/bsp") + template_path = os.path.join(template_base_dir, "pwm", "pwm.c") + + if not os.path.exists(template_path): + # 向后兼容:从根目录加载 + template_path = os.path.join(template_base_dir, "pwm.c") + template_content = CodeGenerator.load_template(template_path) if not template_content: return False diff --git a/app/code_page/device_interface.py b/app/code_page/device_interface.py index af2f8b5..56d2fa3 100644 --- a/app/code_page/device_interface.py +++ b/app/code_page/device_interface.py @@ -243,8 +243,13 @@ class DeviceSimple(QWidget): # 使用设备名称作为子文件夹名(小写) device_folder = self.device_name.lower() template_base_dir = CodeGenerator.get_assets_dir("User_code/device") + device_template_dir = os.path.join(template_base_dir, device_folder) files = self.device_config.get('files', {}) + # 收集需要替换BSP配置的文件列表 + files_to_process = list(files.values()) + + # 处理配置中定义的主要文件(需要BSP替换) for file_type, filename in files.items(): # 先尝试从子文件夹加载 src_path = os.path.join(template_base_dir, device_folder, filename) @@ -273,6 +278,25 @@ class DeviceSimple(QWidget): with open(dst_path, 'w', encoding='utf-8') as f: f.write(content) + # 复制设备文件夹下的其他文件(如 lcd_lib.h) + if os.path.exists(device_template_dir): + import shutil + for item in os.listdir(device_template_dir): + # 跳过已处理的文件 + if item in files_to_process: + continue + + src_file = os.path.join(device_template_dir, item) + dst_file = os.path.join(self.project_path, f"User/device/{item}") + + # 只复制文件,不复制子目录 + if os.path.isfile(src_file): + # 检查文件是否已存在,避免覆盖 + if not os.path.exists(dst_file): + os.makedirs(os.path.dirname(dst_file), exist_ok=True) + shutil.copy2(src_file, dst_file) + print(f"复制额外文件: {dst_file}") + self._save_config() return True diff --git a/app/code_page/module_interface.py b/app/code_page/module_interface.py index 3bd26cf..a186557 100644 --- a/app/code_page/module_interface.py +++ b/app/code_page/module_interface.py @@ -28,7 +28,7 @@ class ModulePage(QWidget): module_dir = CodeGenerator.get_assets_dir("User_code/module") if subtype: self.module_path = os.path.join(module_dir, module_type, subtype) - self.module_key = subtype + self.module_key = module_type # 使用类型名作为目标文件夹 else: self.module_path = os.path.join(module_dir, module_type) self.module_key = module_type @@ -139,10 +139,7 @@ class ModulePage(QWidget): def _check_generated_status(self): """检查模块是否已生成""" - if self.subtype: - dst_dir = os.path.join(self.project_path, "User/module", self.module_type, self.subtype) - else: - dst_dir = os.path.join(self.project_path, "User/module", self.module_type) + dst_dir = os.path.join(self.project_path, "User/module", self.module_key) if os.path.exists(dst_dir): has_code = any( @@ -165,11 +162,8 @@ class ModulePage(QWidget): # 首先生成 config(如果不存在) self._generate_config() - # 目标目录 - if self.subtype: - dst_dir = os.path.join(self.project_path, "User/module", self.module_type, self.subtype) - else: - dst_dir = os.path.join(self.project_path, "User/module", self.module_type) + # 目标目录:展平到 User/module/{module_key} + dst_dir = os.path.join(self.project_path, "User/module", self.module_key) # 检查是否已存在 if os.path.exists(dst_dir): diff --git a/assets/User_code/device/config.yaml b/assets/User_code/device/config.yaml index e240946..f02ad18 100644 --- a/assets/User_code/device/config.yaml +++ b/assets/User_code/device/config.yaml @@ -240,6 +240,22 @@ devices: description: "lcd驱动(SPI)" dependencies: bsp: ["gpio", "spi"] + bsp_requirements: + - type: "spi" + var_name: "BSP_SPI_LCD" + description: "用于LCD通信的SPI总线" + - type: "gpio" + var_name: "BSP_GPIO_LCD_CS" + description: "LCD片选引脚" + gpio_type: "output" + - type: "gpio" + var_name: "BSP_GPIO_LCD_DC" + description: "LCD数据/命令控制引脚" + gpio_type: "output" + - type: "gpio" + var_name: "BSP_GPIO_LCD_RST" + description: "LCD复位引脚" + gpio_type: "output" thread_signals: [] files: header: "lcd.h"