From 23b54eb7c3e44840b2cd40f07ded90191e5164f2 Mon Sep 17 00:00:00 2001 From: Nav Date: Tue, 8 Jun 2021 00:31:15 +0100 Subject: [PATCH] Added PORT peripheral validation for AVR8 TDFs --- .../AVR8/Avr8TargetDescriptionFile.php | 12 ++++++++++++ .../TargetDescriptionFiles/ModuleInstance.php | 4 ++++ build/scripts/TargetDescriptionFiles/Signal.php | 9 +++++++++ .../TargetDescriptionFile.php | 13 +++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 build/scripts/TargetDescriptionFiles/Signal.php diff --git a/build/scripts/TargetDescriptionFiles/AVR8/Avr8TargetDescriptionFile.php b/build/scripts/TargetDescriptionFiles/AVR8/Avr8TargetDescriptionFile.php index 75a196d9..24352979 100644 --- a/build/scripts/TargetDescriptionFiles/AVR8/Avr8TargetDescriptionFile.php +++ b/build/scripts/TargetDescriptionFiles/AVR8/Avr8TargetDescriptionFile.php @@ -484,6 +484,18 @@ class Avr8TargetDescriptionFile extends TargetDescriptionFile } } + $portPeripheralModule = $this->peripheralModulesByName['port'] ?? null; + if (empty($portPeripheralModule)) { + $failures[] = 'PORT peripheral module not found.'; + + } else { + foreach ($portPeripheralModule->instancesMappedByName as $portInstance) { + if (empty($portInstance->signals)) { + $failures[] = 'No signals defined for port ' . $portInstance->name . ' in PORT peripheral module.'; + } + } + } + return $failures; } } diff --git a/build/scripts/TargetDescriptionFiles/ModuleInstance.php b/build/scripts/TargetDescriptionFiles/ModuleInstance.php index 66647ed6..f26c6d5c 100644 --- a/build/scripts/TargetDescriptionFiles/ModuleInstance.php +++ b/build/scripts/TargetDescriptionFiles/ModuleInstance.php @@ -2,6 +2,7 @@ namespace Bloom\BuildScripts\TargetDescriptionFiles; require_once __DIR__ . "/RegisterGroup.php"; +require_once __DIR__ . "/Signal.php"; class ModuleInstance { @@ -9,4 +10,7 @@ class ModuleInstance /** @var RegisterGroup[] */ public array $registerGroupsMappedByName = []; + + /** @var Signal[] */ + public array $signals = []; } diff --git a/build/scripts/TargetDescriptionFiles/Signal.php b/build/scripts/TargetDescriptionFiles/Signal.php new file mode 100644 index 00000000..241ed996 --- /dev/null +++ b/build/scripts/TargetDescriptionFiles/Signal.php @@ -0,0 +1,9 @@ +xpath('signals/signal'); + foreach ($signalElements as $signalElement) { + $signalAttrs = $signalElement->attributes(); + $signal = new Signal(); + + $signal->padName = isset($signalAttrs['pad']) ? $signalAttrs['pad'] : null; + $signal->function = isset($signalAttrs['function']) ? $signalAttrs['function'] : null; + $signal->index = isset($signalAttrs['index']) ? $this->rawValueToInt($signalAttrs['index']) : null; + + $moduleInstance->signals[] = $signal; + } + $module->instancesMappedByName[strtolower($moduleInstance->name)] = $moduleInstance; }