Cleanup of parse.

This commit is contained in:
Bob McWhirter 2021-06-24 10:06:10 -04:00
parent fa14144963
commit ed248082b8

View File

@ -838,7 +838,7 @@ def parse_dma():
ff = removeprefix(f, 'sources/cubedb/mcu/IP/DMA-') ff = removeprefix(f, 'sources/cubedb/mcu/IP/DMA-')
ff = removesuffix(ff, '_Modes.xml') ff = removesuffix(ff, '_Modes.xml')
r = xmltodict.parse(open(f, 'rb'), force_list={'Mode'}) r = xmltodict.parse(open(f, 'rb'), force_list={'Mode', 'RefMode'})
chip_dma = { chip_dma = {
'channels': {}, 'channels': {},
@ -886,6 +886,18 @@ def parse_dma():
'channel': i, 'channel': i,
}) })
else: else:
# see if we can scrape out requests
requests = {}
request_blocks = filter(lambda x: x['@BaseMode'] == 'DMA_Request', r['IP']['RefMode'])
for block in request_blocks:
name = block['@Name']
request_num = next(filter(lambda x: x['@Name'] == 'Channel', block['Parameter']), None)
if request_num is not None:
request_num = request_num['PossibleValue']
request_num = removeprefix(request_num, "DMA_CHANNEL_")
requests[name] = int(request_num)
for channel in channels: for channel in channels:
channel_name = channel['@Name'] channel_name = channel['@Name']
channel_name = removeprefix(channel_name, dma_peri_name + '_') channel_name = removeprefix(channel_name, dma_peri_name + '_')
@ -897,6 +909,7 @@ def parse_dma():
}) })
for target in channel['ModeLogicOperator']['Mode']: for target in channel['ModeLogicOperator']['Mode']:
target_name = target['@Name'] target_name = target['@Name']
original_target_name = target_name
parts = target_name.split(':') parts = target_name.split(':')
target_name = parts[0] target_name = parts[0]
parts = target_name.split('_') parts = target_name.split('_')
@ -914,10 +927,15 @@ def parse_dma():
event = event.split(':')[0] event = event.split(':')[0]
if 'channels' not in peri_dma: if 'channels' not in peri_dma:
peri_dma['channels'] = {} peri_dma['channels'] = {}
if event not in peri_dma: if event not in peri_dma['channels']:
peri_dma['channels'][event] = [] peri_dma['channels'][event] = []
event_dma = peri_dma['channels'][event] event_dma = peri_dma['channels'][event]
event_dma.append(dma_peri_name + '_' + channel_name) entry = OrderedDict({
'channel': dma_peri_name + '_' + channel_name,
} )
if original_target_name in requests:
entry['request'] = requests[original_target_name]
event_dma.append( entry )
dma_channels[ff] = chip_dma dma_channels[ff] = chip_dma