mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-09-14 12:54:33 +08:00
146 lines
5.8 KiB
Python
146 lines
5.8 KiB
Python
class analyzing_ioc:
|
||
@staticmethod
|
||
def is_freertos_enabled_from_ioc(ioc_path):
|
||
"""
|
||
检查指定 .ioc 文件是否开启了 FreeRTOS
|
||
"""
|
||
config = {}
|
||
with open(ioc_path, encoding='utf-8') as f:
|
||
for line in f:
|
||
line = line.strip()
|
||
if not line or line.startswith('#'):
|
||
continue
|
||
if '=' in line:
|
||
key, value = line.split('=', 1)
|
||
config[key.strip()] = value.strip()
|
||
ip_keys = [k for k in config if k.startswith('Mcu.IP')]
|
||
for k in ip_keys:
|
||
if config[k] == 'FREERTOS':
|
||
return True
|
||
for k in config:
|
||
if k.startswith('FREERTOS.'):
|
||
return True
|
||
return False
|
||
|
||
@staticmethod
|
||
def get_enabled_i2c_from_ioc(ioc_path):
|
||
"""
|
||
从.ioc文件中获取已启用的I2C列表
|
||
返回格式: ['I2C1', 'I2C3'] 等
|
||
"""
|
||
enabled_i2c = []
|
||
with open(ioc_path, encoding='utf-8', errors='ignore') as f:
|
||
for line in f:
|
||
line = line.strip()
|
||
if not line or line.startswith('#'):
|
||
continue
|
||
if '=' in line:
|
||
key, value = line.split('=', 1)
|
||
key = key.strip()
|
||
value = value.strip()
|
||
# 检查是否启用了I2C
|
||
if key.startswith('Mcu.IP') and value.startswith('I2C'):
|
||
# 提取I2C编号,如I2C1, I2C2等
|
||
i2c_name = value.split('.')[0] if '.' in value else value
|
||
if i2c_name not in enabled_i2c:
|
||
enabled_i2c.append(i2c_name)
|
||
return sorted(enabled_i2c)
|
||
|
||
@staticmethod
|
||
def get_enabled_spi_from_ioc(ioc_path):
|
||
"""
|
||
获取已启用的SPI列表
|
||
返回格式: ['SPI1', 'SPI2'] 等
|
||
"""
|
||
enabled_spi = []
|
||
with open(ioc_path, encoding='utf-8', errors='ignore') as f:
|
||
for line in f:
|
||
line = line.strip()
|
||
if not line or line.startswith('#'):
|
||
continue
|
||
if '=' in line:
|
||
key, value = line.split('=', 1)
|
||
key = key.strip()
|
||
value = value.strip()
|
||
if key.startswith('Mcu.IP') and value.startswith('SPI'):
|
||
spi_name = value.split('.')[0] if '.' in value else value
|
||
if spi_name not in enabled_spi:
|
||
enabled_spi.append(spi_name)
|
||
return sorted(enabled_spi)
|
||
|
||
@staticmethod
|
||
def get_enabled_can_from_ioc(ioc_path):
|
||
"""
|
||
获取已启用的CAN列表
|
||
返回格式: ['CAN1', 'CAN2'] 等
|
||
"""
|
||
enabled_can = []
|
||
with open(ioc_path, encoding='utf-8', errors='ignore') as f:
|
||
for line in f:
|
||
line = line.strip()
|
||
if not line or line.startswith('#'):
|
||
continue
|
||
if '=' in line:
|
||
key, value = line.split('=', 1)
|
||
key = key.strip()
|
||
value = value.strip()
|
||
if key.startswith('Mcu.IP') and value.startswith('CAN'):
|
||
can_name = value.split('.')[0] if '.' in value else value
|
||
if can_name not in enabled_can:
|
||
enabled_can.append(can_name)
|
||
return sorted(enabled_can)
|
||
|
||
@staticmethod
|
||
def get_enabled_uart_from_ioc(ioc_path):
|
||
"""
|
||
获取已启用的UART/USART列表
|
||
返回格式: ['USART1', 'USART2', 'UART4'] 等
|
||
"""
|
||
enabled_uart = []
|
||
with open(ioc_path, encoding='utf-8', errors='ignore') as f:
|
||
for line in f:
|
||
line = line.strip()
|
||
if not line or line.startswith('#'):
|
||
continue
|
||
if '=' in line:
|
||
key, value = line.split('=', 1)
|
||
key = key.strip()
|
||
value = value.strip()
|
||
# 检查是否启用了UART或USART
|
||
if key.startswith('Mcu.IP') and (value.startswith('USART') or value.startswith('UART')):
|
||
uart_name = value.split('.')[0] if '.' in value else value
|
||
if uart_name not in enabled_uart:
|
||
enabled_uart.append(uart_name)
|
||
return sorted(enabled_uart)
|
||
|
||
@staticmethod
|
||
def get_enabled_gpio_from_ioc(ioc_path):
|
||
"""
|
||
获取所有带 EXTI 且有 Label 的 GPIO,返回 [{'pin': 'PC4', 'label': 'ACCL_INT'}, ...]
|
||
"""
|
||
gpio_list = []
|
||
gpio_params = {}
|
||
with open(ioc_path, encoding='utf-8', errors='ignore') as f:
|
||
for line in f:
|
||
line = line.strip()
|
||
if not line or line.startswith('#'):
|
||
continue
|
||
if '=' in line:
|
||
key, value = line.split('=', 1)
|
||
key = key.strip()
|
||
value = value.strip()
|
||
if '.GPIOParameters' in key:
|
||
gpio_params[key.split('.')[0]] = value
|
||
elif '.GPIO_Label' in key:
|
||
pin = key.split('.')[0]
|
||
gpio_params[f"{pin}_label"] = value
|
||
elif '.GPIO_ModeDefaultEXTI' in key:
|
||
pin = key.split('.')[0]
|
||
gpio_params[f"{pin}_exti"] = value
|
||
for pin in gpio_params:
|
||
if not pin.endswith('_label') and not pin.endswith('_exti'):
|
||
label = gpio_params.get(f"{pin}_label", None)
|
||
exti = gpio_params.get(f"{pin}_exti", None)
|
||
if label and exti:
|
||
gpio_list.append({'pin': pin, 'label': label})
|
||
return gpio_list |