diff --git a/.github/update_versions.sh b/.github/update_versions.sh new file mode 100755 index 0000000..edb7398 --- /dev/null +++ b/.github/update_versions.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +SCRIPT=$(realpath -P $0) +DIRNAME=$(dirname ${SCRIPT}) + +VERSIONS=($(find -maxdepth 1 -mindepth 1 -type d) $(find -maxdepth 1 -mindepth 1 -type l)) +declare -A versions +for folder in ${VERSIONS[*]#./}; do + if [ -f $folder/footer.js ]; then + version=$(grep "Version" $folder/footer.js | \ + sed -r "s/.*'Version ([^']+)'.*/\1/" | \ + sed -r "s/\+.*$//" | \ + sed -r "s/([^0-9])$/\10/") + versions["$version"]="$folder" + fi +done +fields=() +for version in $(IFS=$'\n'; sed -r 's/$/_/' <<< "${!versions[*]}" | sort -Vr | sed -r 's/_$//'); do + fields+=( "\"${versions[$version]}\": \"$version\"" ) +done + +echo "//--- list of versions ---" > version.js +echo "const versions = {" >> version.js +echo -n " " >> version.js +echo $(IFS=,; echo "${fields[*]}") | sed 's/,/,\n /g' >> version.js +echo "}" >> version.js +echo "//--- list of versions ---" >> version.js +cat ${DIRNAME}/version.js.in >> version.js + +exit 0 diff --git a/.github/version.js.in b/.github/version.js.in new file mode 100644 index 0000000..ebdd88c --- /dev/null +++ b/.github/version.js.in @@ -0,0 +1,56 @@ + +var script = document.currentScript +if (script && script.src) { + var scriptUrl = new URL(script.src); + var docUrl = new URL(document.URL); + var baseUrl = new URL(scriptUrl) + baseUrl.pathname = baseUrl.pathname.split('/').slice(0,-1).join("/") + + function urlForVersion(url, version) { + url = new URL(url); + pathname = url.pathname.replace(baseUrl.pathname, ""); + parts = pathname.split("/"); + parts[1] = version; + url.pathname = baseUrl.pathname + parts.join("/"); + return url + } + + function writeVersionDropdown() { + currentVersion = document.currentScript.parentNode.innerText; + document.currentScript.parentNode.classList.add("dropdown"); + document.currentScript.parentNode.innerText = ""; + document.write(' '+currentVersion+''); + document.write(' '); + }; +} else { + function writeVersionDropdown() {} +} + +/* When the user clicks on the button, +toggle between hiding and showing the dropdown content */ +function myFunction() { + document.getElementById("myDropdown").classList.toggle("show"); +} + +// Close the dropdown menu if the user clicks outside of it +window.onclick = function(event) { + if (!event.target.matches('.dropbtn')) { + var dropdowns = document.getElementsByClassName("dropdown-content"); + var i; + for (i = 0; i < dropdowns.length; i++) { + var openDropdown = dropdowns[i]; + if (openDropdown.classList.contains('show')) { + openDropdown.classList.remove('show'); + } + } + } +} diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..86c9f13 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,46 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to GitHub Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: [gh-pages] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + # Upload entire repository + path: '.' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/index.html b/index.html new file mode 100644 index 0000000..6f6d6e6 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + +Redirect to the CMSIS-Zone main page after 0 seconds + + + + + + +If the automatic redirection is failing, click open CMSIS-Zone Documentation. + + + diff --git a/latest b/latest new file mode 120000 index 0000000..88d050b --- /dev/null +++ b/latest @@ -0,0 +1 @@ +main \ No newline at end of file diff --git a/main/AddMemoryBlock.png b/main/AddMemoryBlock.png new file mode 100644 index 0000000..f632f92 Binary files /dev/null and b/main/AddMemoryBlock.png differ diff --git a/main/AddNewZoneButton.png b/main/AddNewZoneButton.png new file mode 100644 index 0000000..4e117d0 Binary files /dev/null and b/main/AddNewZoneButton.png differ diff --git a/main/Buttons.png b/main/Buttons.png new file mode 100644 index 0000000..62449de Binary files /dev/null and b/main/Buttons.png differ diff --git a/main/DelMemoryRegion.png b/main/DelMemoryRegion.png new file mode 100644 index 0000000..b00d6da Binary files /dev/null and b/main/DelMemoryRegion.png differ diff --git a/main/ErrorMessages.html b/main/ErrorMessages.html new file mode 100644 index 0000000..ed1e800 --- /dev/null +++ b/main/ErrorMessages.html @@ -0,0 +1,209 @@ + + + + + + + +CMSIS-Zone: Error Messages + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+ +
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Error Messages
+
+
+

The following table explains the output messages issued by CMSIS-Zone utility.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Message Description
Error Z101: <name>: Invalid memory size Size of the memory region is invalid or negative
Error Z102: <name>: Memory size exceeds parent region size Size of the sub-memory region exceeds the available memory in the parent
Error Z103: <name>: Invalid memory offset Offset of the sub-memory region is invalid or negative
Error Z104: <name>: Memory offset is outside parent boundary Offset of the sub-memory region is outside of the available memory in the parent
Error Z105: <name>: Memory exceeds parent region boundary The sub-memory region exceeds the limits of physical memory space in the parent
Error Z106: <name>: Memory region cannot be arranged: no physical slot is available The memory region cannot be arranged as there is no physical memory space available
Error Z107: <name>: Memory region fully overlaps with region <name> The sub-memory region overlaps with another memory region
Error Z108: <name>: Memory region partially overlaps with region <name> The sub-memory region overlaps with another memory region
Error Z110: <name>: Number of available MPU slots is exceeded There are not enough MPU regions to allocate the required resources
Error Z111: No MPU slot can be allocated according to ArmV7 requirements There are not enough MPU regions to allocate the required resources
Error Z112: <name>: Memory size is rounded up to align with ArmV7 MPU requirements The Memory size of the region is increased due to MPU alignment restrictions
Error Z120: No startup memory region is specified There is not memory region for the reset vector (startup) defined
Error Z121: Multiple startup memory regions are specified There is more then one region for the reset vector (startup) defined
Error Z201: <name>: Memory region is missing The memory region in the assignment *.azone file is missing in the resource *.rzone file
Error Z202: <name>: Peripheral group is missing The peripheral group in the assignment *.azone file is missing in the resource *.rzone file
Error Z203: <name>: Peripheral is missing The peripheral in the assignment *.azone file is missing in the resource *.rzone file
Error Z401: <name>: Device description is missing The device specification in the resource *.rzone file is incomplete
Error Z402: <name>: Device pack is not specified The device specification in the resource *.rzone file is incomplete
Error Z403: <name>: Device pack specification is invalid The device specification in the resource *.rzone file is incomplete
Error Z404: <name>: Resource file is missing The resource *.rzone file referenced by the assignment *.azone file is missing
Error Z405: <name>: Error reading resource file The resource *.rzone file has an incorrect format
Error Z406: <name>: Processor description is missing The processor specification in the resource *.rzone file is incomplete
Error Z407: <name>: Processor description: missing or invalid DnumInterrupts attribute for TrustZone device The processor specification in the resource *.rzone file is incomplete
Error Z408: <name>: Processor description: missing or invalid DnumSauRegions attribute for TrustZone device The processor specification in the resource *.rzone file is incomplete
Error Z501: <name>: Creating sub-zone files failed The sub-zone resource files cannot be created
Error Z601: <name>: creating FreeMarker model failed The FreeMarker model *.fzone file cannot be created
Error Z602: <name>: processing template file failed The FreeMarker model template file cannot be processed
Error Z603: <name>: processing template file failed The FreeMarker model template file cannot be processed
Error Z604: <name>: folder contains no template files There are no FreeMarker model template files
+
+
+
+ + + + diff --git a/main/GUI.png b/main/GUI.png new file mode 100644 index 0000000..7bfd7dd Binary files /dev/null and b/main/GUI.png differ diff --git a/main/GenCodeButton.png b/main/GenCodeButton.png new file mode 100644 index 0000000..8554ec9 Binary files /dev/null and b/main/GenCodeButton.png differ diff --git a/main/GenDataModel.html b/main/GenDataModel.html new file mode 100644 index 0000000..7084e76 --- /dev/null +++ b/main/GenDataModel.html @@ -0,0 +1,172 @@ + + + + + + + +CMSIS-Zone: Generator Data Model + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+ +
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Generator Data Model
+
+
+

The Generator Data Model defines the resource and partition data structure for code generators. This data structure is connected to a FreeMarker template engine and file templates allow to generate various files that can be used to configure development tools or hardware components.

+
+ +
+FreeMarker Template Engine
+

+FreeMarker top-level format

+

system element provides memory layout and TrustZone configuration of the complete system. zone element setup information of a zone (or system partition) along with related peripherals.

+

+FreeMarker basics

+

The variable types relevant for CMSIS-Zone are:

+

scalar: variable that stores a single value of a scalar type scalar-types:

    +
  • string
  • +
  • int
  • +
  • bool
  • +
+

hash: variable that that stores one or more variables with a unique lookup name

+

sequence: variable that stores sub-variables without names but instead are selected via index (myVariable[index])

+

A variable is accessed using the dollar character followed by a variable or expression in brackets:

${...}
+

Output the name of the zone:

${zone.name}
+

A sequence gets iterated:

<#list zone.memory as mem>
+
Memory region name $mem.name
+
</#list>
+

Printing a sorted list of all available memory entries by start address

<#list zone.memory?sort_by("start") as mem>
+
${mem.start} ${mem.name}
+
</#list>
+
+
+
+ + + + diff --git a/main/GenDataModel.js b/main/GenDataModel.js new file mode 100644 index 0000000..8eadf5c --- /dev/null +++ b/main/GenDataModel.js @@ -0,0 +1,7 @@ +var GenDataModel = +[ + [ "FreeMarker top-level format", "GenDataModel.html#fp_toplevel", null ], + [ "FreeMarker basics", "GenDataModel.html#fm_basics", null ], + [ "system element", "fm_system.html", "fm_system" ], + [ "zone element", "fm_zone.html", "fm_zone" ] +]; \ No newline at end of file diff --git a/main/IRAM1_1Display.png b/main/IRAM1_1Display.png new file mode 100644 index 0000000..f51c417 Binary files /dev/null and b/main/IRAM1_1Display.png differ diff --git a/main/MCB400_zones.png b/main/MCB400_zones.png new file mode 100644 index 0000000..9b71841 Binary files /dev/null and b/main/MCB400_zones.png differ diff --git a/main/NewMemoryBlockWiz.png b/main/NewMemoryBlockWiz.png new file mode 100644 index 0000000..841a33e Binary files /dev/null and b/main/NewMemoryBlockWiz.png differ diff --git a/main/NewZoneCM33_0.png b/main/NewZoneCM33_0.png new file mode 100644 index 0000000..f321009 Binary files /dev/null and b/main/NewZoneCM33_0.png differ diff --git a/main/Partitioning_Hardware.png b/main/Partitioning_Hardware.png new file mode 100644 index 0000000..cf3cd26 Binary files /dev/null and b/main/Partitioning_Hardware.png differ diff --git a/main/Partitioning_Workflow.png b/main/Partitioning_Workflow.png new file mode 100644 index 0000000..7690833 Binary files /dev/null and b/main/Partitioning_Workflow.png differ diff --git a/main/ProjectExplorerWindow.png b/main/ProjectExplorerWindow.png new file mode 100644 index 0000000..51a65fb Binary files /dev/null and b/main/ProjectExplorerWindow.png differ diff --git a/main/SAML11_zones.png b/main/SAML11_zones.png new file mode 100644 index 0000000..ea0d888 Binary files /dev/null and b/main/SAML11_zones.png differ diff --git a/main/STM32L5_zones.png b/main/STM32L5_zones.png new file mode 100644 index 0000000..48d81cc Binary files /dev/null and b/main/STM32L5_zones.png differ diff --git a/main/SaveButton.png b/main/SaveButton.png new file mode 100644 index 0000000..321d66b Binary files /dev/null and b/main/SaveButton.png differ diff --git a/main/SelectDevice.png b/main/SelectDevice.png new file mode 100644 index 0000000..344c221 Binary files /dev/null and b/main/SelectDevice.png differ diff --git a/main/SelectDeviceFrom.png b/main/SelectDeviceFrom.png new file mode 100644 index 0000000..4eac453 Binary files /dev/null and b/main/SelectDeviceFrom.png differ diff --git a/main/SetProjectName.png b/main/SetProjectName.png new file mode 100644 index 0000000..022cd43 Binary files /dev/null and b/main/SetProjectName.png differ diff --git a/main/SpecifyRzoneFile.png b/main/SpecifyRzoneFile.png new file mode 100644 index 0000000..7a9cd6e Binary files /dev/null and b/main/SpecifyRzoneFile.png differ diff --git a/main/UseCases.html b/main/UseCases.html new file mode 100644 index 0000000..ebe8f5f --- /dev/null +++ b/main/UseCases.html @@ -0,0 +1,169 @@ + + + + + + + +CMSIS-Zone: CMSIS-Zone Use Cases + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+ +
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CMSIS-Zone Use Cases
+
+
+

CMSIS-Zone simplifies to manage the complexity and the configuration of modern embedded systems that frequently include multiple processors and/or memory protection hardware. It helps to split the embedded application various projects which creates the need to partition system resources. And it simplifies the consistent configuration of access rights across the system, for example when using an MPU (memory protection unit).

+

The following section describes several use cases that benefit from CMSIS-Zone.

+

+MPU Protection

+

Focused on a single core microcontroller one might want to utilize the memory protection unit (MPU) capabilities to segregate parts of an application. Thus the need to partition the system resources accordingly arises.

+
+ +
+MPU Protection
+

+TrustZone Partitioning

+

TrustZone extensions add another degree of segregation which must be handled consistently. In this case one has to handle MPU settings per security context and SAU configuration.

+
+ +
+TrustZone Partitioning and MPU Protection
+

+Multi-Core Partitioning

+

Beside traditional single cores asymmetric and hybrid multi-core devices contribute to increasing development complexity for embedded systems. Having multiple cores running different parts of an application concurrently needs a well defined resource assignment to prevent undesired misbehavior.

+
+ +
+Multi-Core Partitioning
+
+
+
+ + + + diff --git a/main/bc_s.png b/main/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/main/bc_s.png differ diff --git a/main/bc_sd.png b/main/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/main/bc_sd.png differ diff --git a/main/bdwn.png b/main/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/main/bdwn.png differ diff --git a/main/blinky_window.png b/main/blinky_window.png new file mode 100644 index 0000000..716015d Binary files /dev/null and b/main/blinky_window.png differ diff --git a/main/closed.png b/main/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/main/closed.png differ diff --git a/main/cmsis_logo_white_small.png b/main/cmsis_logo_white_small.png new file mode 100644 index 0000000..0f3d64f Binary files /dev/null and b/main/cmsis_logo_white_small.png differ diff --git a/main/darkmode_toggle.js b/main/darkmode_toggle.js new file mode 100644 index 0000000..b2bd94f --- /dev/null +++ b/main/darkmode_toggle.js @@ -0,0 +1,281 @@ +/** + +The code below is based on the Doxygen Awesome project with some minor modifications +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +class DarkModeToggle extends HTMLElement { + static icon = '' + static icond = '' + static title = "Toggle Light/Dark Mode" + + static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" + static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" + + static _staticConstructor = function() { + DarkModeToggle.enableDarkMode(DarkModeToggle.userPreference) + // Update the color scheme when the browsers preference changes + // without user interaction on the website. + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + DarkModeToggle.onSystemPreferenceChanged() + }) + // Update the color scheme when the tab is made visible again. + // It is possible that the appearance was changed in another tab + // while this tab was in the background. + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + DarkModeToggle.onSystemPreferenceChanged() + } + }); + }() + + static addButton() { + + var tbuttons = document.getElementsByTagName("dark-mode-toggle"); + var toggleButton; + var titleArea = document.getElementById("titlearea"); + var searchBox = document.getElementById("MSearchBox"); + var mainMenu = document.getElementById("main-menu"); + var navRow1 = document.getElementById("navrow1"); + var mainMenuVisible = false; + if (!tbuttons.length){ + toggleButton = document.createElement('dark-mode-toggle') + toggleButton.title = DarkModeToggle.title + } else {toggleButton=tbuttons[0]} + + + if (DarkModeToggle.darkModeEnabled){ + toggleButton.innerHTML=DarkModeToggle.icond + } else { + toggleButton.innerHTML=DarkModeToggle.icon + } + + if (mainMenu) { + var menuStyle = window.getComputedStyle(mainMenu); + mainMenuVisible = menuStyle.display!=='none' + } + var searchBoxPos1 = document.getElementById("searchBoxPos1"); + if (searchBox) { // (1) search box visible + searchBox.parentNode.appendChild(toggleButton) + } else if (navRow1) { // (2) no search box, static menu bar + var li = document.createElement('li'); + li.style = 'float: right;' + li.appendChild(toggleButton); + toggleButton.style = 'width: 24px; height: 25px; padding-top: 11px; float: right;'; + var row = document.querySelector('#navrow1 > ul:first-of-type'); + row.appendChild(li) + } else if (mainMenu && mainMenuVisible) { // (3) no search box + dynamic menu bar expanded + var li = document.createElement('li'); + li.style = 'float: right;' + li.appendChild(toggleButton); + toggleButton.style = 'width: 14px; height: 36px; padding-top: 10px; float: right;'; + mainMenu.appendChild(li) + } else if (searchBoxPos1) { // (4) no search box + dynamic menu bar collapsed + toggleButton.style = 'width: 24px; height: 36px; padding-top: 10px; float: right;'; + searchBoxPos1.style = 'top: 0px;' + searchBoxPos1.appendChild(toggleButton); + } else if (titleArea) { // (5) no search box and no navigation tabs + toggleButton.style = 'width: 24px; height: 24px; position: absolute; right: 0px; top: 34px;'; + titleArea.append(toggleButton); + } + } + + static init() { + $(function() { + $(document).ready(function() { + + $(document).ready(function(){ + DarkModeToggle.addButton(); + }) + $(window).resize(function(){ + DarkModeToggle.addButton(); + }) + DarkModeToggle.setDarkModeVisibility(DarkModeToggle.darkModeEnabled) + }) + }) + } + + constructor() { + super(); + this.onclick=this.toggleDarkMode + } + + + static createCookie(name, value, days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); + var expires = "; expires=" + date.toGMTString(); + } + else var expires = ""; + + document.cookie = name + "=" + value + expires + "; path=/"; + } + + static readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') c = c.substring(1, c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); + } + return null; + } + + static eraseCookie(name) { + DarkModeToggle.createCookie(name, "", -1); + } + + /** + * @returns `true` for dark-mode, `false` for light-mode system preference + */ + static get systemPreference() { + return window.matchMedia('(prefers-color-scheme: dark)').matches + } + + static get prefersDarkModeInLightMode() { + if (window.chrome) { // Chrome supports localStorage in combination with file:// but not cookies + return localStorage.getItem(DarkModeToggle.prefersDarkModeInLightModeKey) + } else { // Other browsers support cookies in combination with file:// but not localStorage + return DarkModeToggle.readCookie('doxygen_prefers_dark')=='1' + } + } + + static set prefersDarkModeInLightMode(preference) { + if (window.chrome) { + if (preference) { + localStorage.setItem(DarkModeToggle.prefersDarkModeInLightModeKey, true) + } else { + localStorage.removeItem(DarkModeToggle.prefersDarkModeInLightModeKey) + } + } else { + if (preference) { + DarkModeToggle.createCookie('doxygen_prefers_dark','1',365) + } else { + DarkModeToggle.eraseCookie('doxygen_prefers_dark') + } + } + } + + static get prefersLightModeInDarkMode() { + if (window.chrome) { // Chrome supports localStorage in combination with file:// but not cookies + return localStorage.getItem(DarkModeToggle.prefersLightModeInDarkModeKey) + } else { // Other browsers support cookies in combination with file:// but not localStorage + return DarkModeToggle.readCookie('doxygen_prefers_light')=='1' + } + } + + static set prefersLightModeInDarkMode(preference) { + if (window.chrome) { + if (preference) { + localStorage.setItem(DarkModeToggle.prefersLightModeInDarkModeKey, true) + } else { + localStorage.removeItem(DarkModeToggle.prefersLightModeInDarkModeKey) + } + } else { + if (preference) { + DarkModeToggle.createCookie('doxygen_prefers_light','1',365) + } else { + DarkModeToggle.eraseCookie('doxygen_prefers_light') + } + } + } + + + /** + * @returns `true` for dark-mode, `false` for light-mode user preference + */ + static get userPreference() { + return (!DarkModeToggle.systemPreference && DarkModeToggle.prefersDarkModeInLightMode) || + (DarkModeToggle.systemPreference && !DarkModeToggle.prefersLightModeInDarkMode) + } + + static set userPreference(userPreference) { + DarkModeToggle.darkModeEnabled = userPreference + if (!userPreference) { + if (DarkModeToggle.systemPreference) { + DarkModeToggle.prefersLightModeInDarkMode = true + } else { + DarkModeToggle.prefersDarkModeInLightMode = false + } + } else { + if (!DarkModeToggle.systemPreference) { + DarkModeToggle.prefersDarkModeInLightMode = true + } else { + DarkModeToggle.prefersLightModeInDarkMode = false + } + } + DarkModeToggle.onUserPreferenceChanged() + } + + static setDarkModeVisibility(enable) { + var darkModeStyle, lightModeStyle; + if(enable) { + darkModeStyle = 'inline-block'; + lightModeStyle = 'none' + } else { + darkModeStyle = 'none'; + lightModeStyle = 'inline-block' + } + document.querySelectorAll('.dark-mode-visible').forEach(function(el) { + el.style.display = darkModeStyle; + }); + document.querySelectorAll('.light-mode-visible').forEach(function(el) { + el.style.display = lightModeStyle; + }); + } + static enableDarkMode(enable) { + if(enable) { + DarkModeToggle.darkModeEnabled = true + document.documentElement.classList.add("dark-mode") + document.documentElement.classList.remove("light-mode") + } else { + DarkModeToggle.darkModeEnabled = false + document.documentElement.classList.remove("dark-mode") + document.documentElement.classList.add("light-mode") + } + DarkModeToggle.setDarkModeVisibility(enable) + } + + static onSystemPreferenceChanged() { + DarkModeToggle.darkModeEnabled = DarkModeToggle.userPreference + DarkModeToggle.enableDarkMode(DarkModeToggle.darkModeEnabled) + } + + static onUserPreferenceChanged() { + DarkModeToggle.enableDarkMode(DarkModeToggle.darkModeEnabled) + } + + toggleDarkMode() { + DarkModeToggle.userPreference = !DarkModeToggle.userPreference + DarkModeToggle.addButton(); + } +} + +customElements.define("dark-mode-toggle", DarkModeToggle); + +DarkModeToggle.init(); diff --git a/main/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/main/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..aec4cc4 --- /dev/null +++ b/main/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,146 @@ + + + + + + + +CMSIS-Zone: src Directory Reference + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+ +
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
src Directory Reference
+
+
+
+
+ + + + diff --git a/main/dma_channel_config.png b/main/dma_channel_config.png new file mode 100644 index 0000000..864dc13 Binary files /dev/null and b/main/dma_channel_config.png differ diff --git a/main/dma_gpio_config.png b/main/dma_gpio_config.png new file mode 100644 index 0000000..f3ad4d8 Binary files /dev/null and b/main/dma_gpio_config.png differ diff --git a/main/doc.png b/main/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/main/doc.png differ diff --git a/main/docd.png b/main/docd.png new file mode 100644 index 0000000..d7c94fd Binary files /dev/null and b/main/docd.png differ diff --git a/main/doxygen.css b/main/doxygen.css new file mode 100644 index 0000000..1402220 --- /dev/null +++ b/main/doxygen.css @@ -0,0 +1,1987 @@ +/* The standard CSS for doxygen 1.9.6*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.png'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +html.dark-mode { +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.png'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: var(--font-family-monospace); + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/main/doxygen.svg b/main/doxygen.svg new file mode 100644 index 0000000..d42dad5 --- /dev/null +++ b/main/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/main/dropdown.png b/main/dropdown.png new file mode 100644 index 0000000..6ff29b5 Binary files /dev/null and b/main/dropdown.png differ diff --git a/main/dynsections.js b/main/dynsections.js new file mode 100644 index 0000000..f579fbf --- /dev/null +++ b/main/dynsections.js @@ -0,0 +1,123 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l div > div.contents, + .PageDoc > div.contents { + display: block; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock, div.contents .memberdecls, div.contents .memitem, div.contents .directory{ + min-width: 200px; + max-width: var(--max_textblock_width); + flex-grow: 1; + } + + div.contents p, div.contents ul, div.contents .image, div.contents .markdownTable, div.contents .fragment, div.contents hr, div.contents h1 { + max-width: var(--max_textblock_width); + } + + div.contents hr { + margin-left: 0; + } + + div.content .toc { + overflow-x: overlay; + overflow-wrap: normal; + } + + div.toc { + max-height: var(--toc-max-height); + max-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--nav-splitbar-color); + border-radius: 0; + background-color: transparent; + box-shadow: none; + float: right; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 0 0 var(--spacing-large); + margin: 0 0 0 var(--spacing-large); + } +} + +@media screen and (max-width:1510px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: block; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock, div.contents .memberdecls, div.contents .memitem, div.contents .directory{ + min-width: 200px; + max-width: var(--max_textblock_width); + flex-grow: 1; + } + + div.contents p, div.contents ul, div.contents .image, div.contents .markdownTable, div.contents .fragment{ + max-width: var(--max_textblock_width); + } + + div.toc { + max-height: 0px; + line-height: 0px; + overflow-y: hidden; + min-width: var(--toc-width); + border: 0; + border-radius: 0; + background-color: transparent; + box-shadow: none; + padding: 0;; + margin: 0; + } +} + + +.memberdecls heading { + font-weight: bold; +} + +div.contents, div.header .headertitle, div.header .summary { + max-width: var(--max_content_width); +} + +div.contents, div.header .headertitle { + margin-left: 3%; + margin-right: auto; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; + border-top-color: var(--group-header-separator-color); + border-top-width: 2px; + border-top-style: solid; + padding: 1em 0 0; + margin-top: 0.5em; + margin-bottom: 0.75em; +} +/* +h1:before { + margin-bottom: 1em; + content: ""; + background-color: var(--arm_light_gray3); + height: 2px; + display: block; + width: 100%; +} +*/ +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 0px; +} + +h2, h2.groupheader { + border: 0px; + font-size: 120%; + font-weight: bold; + margin-top: 1.25em; + margin-bottom: 0.25em; +} + +h3 { + font-size: 100%; + margin-top: 1.25em; + margin-bottom: 0.25em; +} + +h4 { + font-size: 100%; + color: #505050; +} + + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p { + margin-block-start: 1em; + margin-block-end: 0.5em; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A2B4D8; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9AAED5; + color: #ffffff; + border: 1px double #849CCC; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +pre.fragment { + font-family: monospace; + background-color: var(--fragment-background-color); + border-radius: 6px; + padding: 0.2em 0.4em; + font-size: 85%; + line-height: 1.45; + margin: 0.5em 0px; +} + +div.fragment { + font-family: monospace; + background-color: var(--fragment-background-color); + border-radius: 6px; + padding: 0.2em 0.4em; + font-size: 85%; + line-height: 1.45; +} + +div.line { + font-family: monospace; + font-size: 100%; + line-height: 1.45; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; +} + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} + +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + margin: 0; +} + +body a:hover{ + text-decoration: underline; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C3CFE6; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C3CFE6; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EDF1F7; +} + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +.memSeparator { + line-height: 22px; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid var(--arm_light_gray);/*#C3CFE6;*/ +} + +a:-webkit-any-link { + color: var(--page-link-color); + cursor: pointer; + text-decoration: none; +} + +.a:hover { + text-decoration: underline; +} + + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + display: inline-block; + padding: 8px; + padding-bottom: 12px; + padding-right: 12px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 600; + float: none; +} + +.permalink +{ + color: var(--arm_blue); + font-size: 100%; + display: inline-block; + vertical-align: middle; + padding-bottom:6px; +} + +.memtemplate { + font-size: 80%; + color: #4464A5; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A2B4D8; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; +} + +.memitem.glow { + /*box-shadow: 0 0 15px cyan; */ +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + background-color: var(--memdef-proto-background-color); + border-top-right-radius: 4px; + border-top-left-radius: 0px; + /* firefox specific markup */ + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 0px; + /* webkit specific markup */ + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 0px; +} + +.memdoc, dl.reflist dd { + border: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: var(--memdef-param-name-color); + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #708CC4; + border-top:1px solid #5072B7; + border-left:1px solid #5072B7; + border-right:1px solid #C3CFE6; + border-bottom:1px solid #C3CFE6; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--arm_dark_gray); + border-bottom: 1px solid var(--arm_dark_gray); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + padding: 0px 10px 10px 0px; + vertical-align: middle; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top:10px; +} + +.directory td.entry a { + outline:none; + padding-left: 6px; + padding-top:10px; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top:10px; + border-left: 0px solid rgba(0,0,0,0.05); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3A568E; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #293C63; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 7px 10px 5px; + text-align:left; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); +} + +table.doxtable tr:nth-child(odd) { + background-color: var(--table-odd-cell-color); +} + +table.doxtable tr:nth-child(even) { + background-color: var(--table-even-cell-color); +} + +table.fieldtable { + width: 100%; + margin-bottom: 10px; + border: 1px solid var(--arm_dark_gray); + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, td.fieldoc{ + white-space: nowrap; + border-right: 1px solid var(--arm_dark_gray); + border-bottom: 1px solid var(--arm_dark_gray); + vertical-align: top; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--arm_dark_gray); + width: 100%; +} + +.fieldtable td.fielddoc p { + margin-top: 0px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-color: var(--memdef-table-header-background-color); + font-size: 100%; + font-weight: bold; +} + + +/* @group Markdown */ + + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 7px 10px 5px; + text-align:left; +} + +table.markdownTable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); +} + +table.markdownTable tr:nth-child(odd) { + background-color: var(--table-odd-cell-color); +} + +table.markdownTable tr:nth-child(even) { + background-color: var(--table-even-cell-color); +} + +/* for hyperlinks in table head rows */ +table.markdownTable th a{ + color: var(--table-header-foreground-color); + text-decoration: underline; +} + +table.markdownTable th a:visited{ + color: var(--table-header-foreground-color); +} + +table.markdownTable th a:hover{ + color: var(--arm_yellow); +} + +table.markdownTable th.markdownTableHeadLeft, table.markdownTable td.markdownTableBodyLeft { + text-align: left +} + +table.markdownTable th.markdownTableHeadRight, table.markdownTable td.markdownTableBodyRight { + text-align: right +} + +table.markdownTable th.markdownTableHeadCenter, table.markdownTable td.markdownTableBodyCenter { + text-align: center +} + + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + font-size: 100%; +} + +/* @end */ + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-color:var(--arm_black); + height:30px; + line-height:30px; + color:white; + border:solid 1px #C1CDE5; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + color:#344D7E; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6583BF; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + color:var(--arm_white); + font-size: 8pt; +} + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + margin-left: 5px; + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + margin: 0px; +} + +div.headertitle +{ + padding: 5px 5px 5px 0px; + margin-top: 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.safety +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #008000; +} + + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: middle; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 270% 'Lato Lite', Lato, Caibri, sans-serif; + font-weight: 600; + margin: 0px; + color: white; + padding: 2px 0px; +} + +#projectbrief +{ + font: 140% "Lato Lite", Lato, Caibri, sans-serif; + margin: 0px; + color: white; + padding: 4px 0px 4px; +} + +#projectnumber +{ + font: 50% "Lato Lite", Lato, Caibri, sans-serif; + margin: 0px; + color: white; + padding: 0px; +} + +#top +{ + border-bottom: 1px solid var(--arm_dark_gray); +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--arm_dark_gray); + background-color: var(--arm_black); +} + +.image +{ + text-align: left; + display: grid; + justify-content: center; + align-items: center; + justify-items: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; + font-size: 80%; +} + +div.zoom +{ + border: 1px solid #8EA4D0; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#314877; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + + +div.toc li { + background: none; + font-family: var(--font-family-toc); + font-size: var(--toc-font-size); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--toc-header-font-size); + font-weight: normal; + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a.active { + font-weight: bold; + color: var(--toc-active-color) !important; +} + +div.toc li a:hover { + color: var(--nav-text-hover-color) !important; +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--nav-foreground-color) !important; + text-decoration: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} diff --git a/main/fm_interrupt.html b/main/fm_interrupt.html new file mode 100644 index 0000000..7afde6c --- /dev/null +++ b/main/fm_interrupt.html @@ -0,0 +1,167 @@ + + + + + + + +CMSIS-Zone: interrupt[n] sequence element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
interrupt[n] sequence element
+
+
+

The interrupt[n] sequence element lists all interrupt sources available in the system.

+ + + + + + + + + + + + + + + + + + + +
Parent Element Element Chain
system system element s
Child Elements Description Type
.interrupt[n].name The name of this interrupt. xs:string
.interrupt[n].irqn The interrupt number. NonNegativeInteger
.interrupt[n].security The security setting for this interrupt. SecurityTypeEnum/xs:string
.interrupt[n].security.s Peripheral with related interrupt is assigned to "secure" state. xs:boolean
.interrupt[n].security.n Peripheral with related interrupt is assigned to "non-secure" state. xs:boolean
.interrupt[n].info Brief description of the interrupt source. xs:string
+
+
+
+ + + + diff --git a/main/fm_memory.html b/main/fm_memory.html new file mode 100644 index 0000000..9b1a644 --- /dev/null +++ b/main/fm_memory.html @@ -0,0 +1,205 @@ + + + + + + + +CMSIS-Zone: memory[n] sequence element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
memory[n] sequence element
+
+
+

The memory[n] sequence element provides a sequence of memory information.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Element Element Chain
system system element
zone zone element
Child Elements Description Type
.memory[n] Sequence of memory region information. sequence
.memory[n].name The name of this memory region. xs:string
.memory[n].type The type of memory in this region ("RAM" or "ROM"). MemoryTypeEnum
.memory[n].start The logical start address of the memory region in the address map. NonNegativeInteger
.memory[n].physical The physical start address of the memory region in the address map. NonNegativeInteger
.memory[n].size The size (in bytes) of the memory region. NonNegativeInteger
.memory[n].security The security setting for this memory region. SecurityType
.memory[n].security.c Memory has non-secure callable attribute set. xs:boolean
.memory[n].security.s Memory is access from "secure" state. xs:boolean
.memory[n].security.n Memory is access from "non-secure" state. xs:boolean
.memory[n].access The access permissions for this memory region in the following separate fields. AccessType
.memory[n].access.r The read access permission. xs:boolean
.memory[n].access.w The write access permission. xs:boolean
.memory[n].access.x The execution access permission. xs:boolean
.memory[n].access.p The peripheral access information. xs:boolean
.memory[n].privilege The privilege type settings for this memory region in the following separate fields. PrivilegeType
.memory[n].privilege.p The privileged level setting of privilege type. xs:boolean
.memory[n].privilege.u The unprivileged level setting of privilege type. xs:boolean
.memory[n].startup "1" specifies that this region is used for the startup code of the application. Default value is "0". xs:boolean
.memory[n].uninit "1" specifies that this region is not zero initialized during startup. Default value is "0". xs:boolean
.memory[n].shared "1" specifies that this region is used by multiple zones. Default value is "0". xs:boolean
.memory[n].dma "1" specifies that this region is accessed by a DMA controller. Default value is "0". xs:boolean
.memory[n].info Brief description of the memory region. xs:string
.memory[n].linker_control Brief description of the memory region. xs:string
+
+
+
+ + + + diff --git a/main/fm_mpc_setup.html b/main/fm_mpc_setup.html new file mode 100644 index 0000000..babfb0a --- /dev/null +++ b/main/fm_mpc_setup.html @@ -0,0 +1,167 @@ + + + + + + + +CMSIS-Zone: mpc_setup[n] element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
mpc_setup[n] element
+
+
+

The mpc_setup[n] element contains a sequence of device specific configuration for the setup of the Memory Protection Controller (MPC).

+ + + + + + + + + + + + + + + + + + + +
Parent Element Element Chain
system system element
Child Elements Description Type
.mpc_setup[n].name The name of the base register that controls the MPC. xs:string
.mpc_setup[n].memory The name of the physical memory region that is connected via the MPC. xs:string
.mpc_setup[n].blk_size The block size information that CMSIS-Zone used for LUT generation. NonNegativeInteger
.mpc_setup[n].S_bit[m] A list of bit values for Secure attribute that are used to compose the LUT. NonNegativeInteger
.mpc_setup[n].P_bit[m] A list of bit values for Privileged attribute that are used to compose the LUT. NonNegativeInteger
.mpc_setup[n].bits_comment[m] The memory region information for source code comments that relate to S_bits or P_bits. xs:string
+
+
+
+ + + + diff --git a/main/fm_mpu_setup.html b/main/fm_mpu_setup.html new file mode 100644 index 0000000..7b8a65d --- /dev/null +++ b/main/fm_mpu_setup.html @@ -0,0 +1,187 @@ + + + + + + + +CMSIS-Zone: mpu_setup element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
mpu_setup element
+
+
+

The mpu_setup element contains the configuration information for the Memory Protection Unit (MPU).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Element Element Chain
zone zone element
Child Elements Description Type
mpu_setup.type Implementation of the MPU ("v7M" or "v8M"). xs:string
mpu_setup.region[n] Sequence of MPU region settings. sequence
mpu_setup.region[n].start The base address of the region. xs:string
mpu_setup.region[n].end The end address of the region. xs:string
mpu_setup.region[n].access.r The read access permission setting for the region. xs:boolean
mpu_setup.region[n].access.w The write access permission setting for the region. xs:boolean
mpu_setup.region[n].access.x The execution access permission setting for the region. xs:boolean
mpu_setup.region[n].access.p The peripheral access information setting for the region. xs:boolean
mpu_setup.region[n].privileged '1' indicates that the region is set to Privileged mode. xs:boolean
mpu_setup.region[n].shared '1' indicates that the region is shared across various processors. xs:boolean
mpu_setup.region[n].dma '1' indicates that the region is accessed by a DMA controller. xs:boolean
mpu_setup.region[n].rom '1' indicates that the memory type of that region is ROM ('0' for RAM or peripheral). xs:boolean
mpu_setup.region[n].addr_v7M Only for v7M: Region base address field value for v7M register MPU_RBAR. xs:string
mpu_setup.region[n].size_v7M Only for v7M: Block size field value for v7M register MPU_RASR (examples: 4=32bytes, 9=1KB, 19=1MB). xs:string
mpu_setup.region[n].srd_v7M Only for v7M: Subregion disable value for v7M register MPU_RASR.

xs:string

+

+
+
+
+
+ + + + diff --git a/main/fm_peripheral.html b/main/fm_peripheral.html new file mode 100644 index 0000000..080e80c --- /dev/null +++ b/main/fm_peripheral.html @@ -0,0 +1,193 @@ + + + + + + + +CMSIS-Zone: peripheral[n] element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
peripheral[n] element
+
+
+

The peripheral[n] element contains a sequence of all peripherals that are accessible in the zone (or system partition).

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Parent Element Element Chain
system system element
zone zone element
Child Elements Description Type
.peripheral[n].name The name of the peripheral. xs:string
.peripheral[n].group The name of the peripheral group that this peripheral belongs too. xs:string
.peripheral[n].start The logical start address of the peripheral in the address map. NonNegativeInteger
.peripheral[n].size The size (in bytes) of the peripheral. NonNegativeInteger
.peripheral[n].security The security setting for this peripheral. SecurityType
.peripheral[n].security.s Peripheral is assigned to "secure" state. xs:boolean
.peripheral[n].security.n Peripheral is assigned to "non-secure" state. xs:boolean
.peripheral[n].access The access permissions for this peripheral in the following separate fields. AccessType
.peripheral[n].access.r The read access permission. xs:boolean
.peripheral[n].access.w The write access permission. xs:boolean
.peripheral[n].access.x The execution access permission. xs:boolean
.peripheral[n].access.p The peripheral access information. xs:boolean
.peripheral[n].privilege The privilege type settings for this peripheral in the following separate fields. PrivilegeType
.peripheral[n].privilege.p The privileged level setting of privilege type. xs:boolean
.peripheral[n].privilege.u The unprivileged level setting of privilege type. xs:boolean
.peripheral[n].shared "1" specifies that this peripheral is used by multiple zones. Default value is "0". xs:boolean
.peripheral[n].dma "1" specifies that this peripheral is accessed by a DMA controller. Default value is "0". xs:boolean
.peripheral[n].info Brief description of the peripheral region. xs:string
+
+
+
+ + + + diff --git a/main/fm_processor.html b/main/fm_processor.html new file mode 100644 index 0000000..c83edc2 --- /dev/null +++ b/main/fm_processor.html @@ -0,0 +1,161 @@ + + + + + + + +CMSIS-Zone: processor[n] sequence element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
processor[n] sequence element
+
+
+

The processor[n] sequence element provides a sequence of processor elements that are in the system.

+ + + + + + + + + + + + + +
Parent Element Element Chain
system system element
Child Elements Description Type
.processor[n].Pname Name of the processor core. RestrictedString
.processor[n].DnumInterrupts Number of NVIC interrupts sources available to the processor core (excludes exception vectors). NonNegativeInteger
.processor[n].DnumSauRegions Number of regions in the Security Attribution Unit (SAU) of the processor core. NonNegativeInteger
+
+
+
+ + + + diff --git a/main/fm_reg_setup.html b/main/fm_reg_setup.html new file mode 100644 index 0000000..a73652b --- /dev/null +++ b/main/fm_reg_setup.html @@ -0,0 +1,165 @@ + + + + + + + +CMSIS-Zone: reg_setup[n] element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
reg_setup[n] element
+
+
+

The reg_setup[n] element contains a sequence of device specific configuration for the setup of the interrupts.

+ + + + + + + + + + + + + + + + + +
Parent Element Element Chain
system system element
Child Elements Description Type
.reg_setup[n].name The name of the register or array that holds the configuration information. xs:string
.reg_setup[n].index The index value for the register array. NonNegativeInteger
.reg_setup[n].peripheral[m] An array with the peripheral names that setup belongs too. xs:string
.reg_setup[n].slot[m] An array with the slot names that setup belongs too. The value is empty when setup is not related to a slot xs:string
.reg_setup[n].value[m] An array with register setup values (corresponds to .peripheral[m] and .slot[m] above). NonNegativeInteger
+
+
+
+ + + + diff --git a/main/fm_sau.html b/main/fm_sau.html new file mode 100644 index 0000000..b555b8f --- /dev/null +++ b/main/fm_sau.html @@ -0,0 +1,168 @@ + + + + + + + +CMSIS-Zone: sau[n] sequence element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sau[n] sequence element
+
+
+

The sau[n] sequence element lists all SAU regions for initialization in this system.

+

It lists all SAU regions that require either non-secure access or non-secure callable attribute. The SAU region list is generated from:

    +
  • setup information from /rzone/sau_init/region element
  • +
  • memory regions that are assigned to zones with non-secure domain.
  • +
  • memory regions that are configured as secure, non-secure callable.
  • +
+ + + + + + + + + + + + + + + +
Parent Element Element Chain
system system element
Child Elements Description Type
.sau[n].start The logical start address for the region. xs:string
.sau[n].end The logical end address for the region. xs:string
.sau[n].nsc If set to 1 the region is secure, non-secure callable. SecurityTypeEnum/xs:string
.sau[n].info List of memory regions or info from /rzone/sau_init/region element. xs:string
+
+
+
+ + + + diff --git a/main/fm_system.html b/main/fm_system.html new file mode 100644 index 0000000..570b8c8 --- /dev/null +++ b/main/fm_system.html @@ -0,0 +1,165 @@ + + + + + + + +CMSIS-Zone: system element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
system element
+
+
+

The system element provides the memory layout and the TrustZone configuration of the complete system. This information can be used for example, to create a linker script that defines the memory setup of the SoC system.

+ + + + + + + + + + + + + + + + + +
Child Elements Description Type
.processor A sequence of all processor elements available in the system resource file. sequence
.memory A sequence of all memory regions available in the system resource file. sequence
.peripheral A sequence of all peripherals available in the system resource file. sequence
.sau A sequence of all SAU regions for initialization. sequence
.interrupt A sequence of all interrupt sources available. sequence
.mpc_setup Contains the device specific configuration registers for the setup of the Memory Protection Controller (MPC). sequence
.reg_setup Contains the device specific configuration registers for the setup of the peripherals. sequence
+
+
+
+ + + + diff --git a/main/fm_system.js b/main/fm_system.js new file mode 100644 index 0000000..e529314 --- /dev/null +++ b/main/fm_system.js @@ -0,0 +1,10 @@ +var fm_system = +[ + [ "processor[n] sequence element", "fm_processor.html", null ], + [ "memory[n] sequence element", "fm_memory.html", null ], + [ "peripheral[n] element", "fm_peripheral.html", null ], + [ "sau[n] sequence element", "fm_sau.html", null ], + [ "interrupt[n] sequence element", "fm_interrupt.html", null ], + [ "mpc_setup[n] element", "fm_mpc_setup.html", null ], + [ "reg_setup[n] element", "fm_reg_setup.html", null ] +]; \ No newline at end of file diff --git a/main/fm_zone.html b/main/fm_zone.html new file mode 100644 index 0000000..5ef7db7 --- /dev/null +++ b/main/fm_zone.html @@ -0,0 +1,177 @@ + + + + + + + +CMSIS-Zone: zone element + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
zone element
+
+
+

The zone element provides the setup information of a zone (or system partition) along with related peripherals. This information can be used for example, to create the MPU setup that is required for various execution zones along with the related linker setup.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Child Elements Description Type
.name The name of the zone (or system partition). string
.Pname Name of the processor core. RestrictedString
.class Class information for execution zones. string
.security The security setting for this zone in the following separate fields. SecurityType
.security.s Zone is executed in "secure" state. xs:boolean
.security.n Zone is executed in "non-secure" state. xs:boolean
.privilege The privilege type settings for this zone in the following separate fields. PrivilegeType
.privilege.p Zone is executed in privileged level. xs:boolean
.privilege.u Zone is executed in unprivileged level. xs:boolean
.memory A sequence of all memory regions that are accessible in the zone (or system partition). sequence
.peripheral A sequence of all peripherals that are accessible in the zone (or system partition). sequence
.interrupt A sequence of all interrupt sources that belong to peripherals that are accessible in the zone (or system partition). sequence
.mpu_setup A sequence of configuration information for the Memory Protection Unit (MPU). sequence
+
+
+
+ + + + diff --git a/main/fm_zone.js b/main/fm_zone.js new file mode 100644 index 0000000..2aa02b6 --- /dev/null +++ b/main/fm_zone.js @@ -0,0 +1,7 @@ +var fm_zone = +[ + [ "memory[n] sequence element", "fm_memory.html", null ], + [ "peripheral[n] element", "fm_peripheral.html", null ], + [ "interrupt[n] sequence element", "fm_interrupt.html", null ], + [ "mpu_setup element", "fm_mpu_setup.html", null ] +]; \ No newline at end of file diff --git a/main/folderclosed.png b/main/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/main/folderclosed.png differ diff --git a/main/folderopen.png b/main/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/main/folderopen.png differ diff --git a/main/footer.js b/main/footer.js new file mode 100644 index 0000000..5e824d5 --- /dev/null +++ b/main/footer.js @@ -0,0 +1,7 @@ +function writeHeader() { + document.write('Version 1.0.1-dev22'); +}; + +function writeFooter() { + document.write('Generated on Mi Sep 27 2023 12:02:52 for CMSIS-Zone 1.0.1-dev22+g5b0ba3c. Copyright © 2023 Arm Limited (or its affiliates). All rights reserved.'); +}; diff --git a/main/gen_output.png b/main/gen_output.png new file mode 100644 index 0000000..26c3236 Binary files /dev/null and b/main/gen_output.png differ diff --git a/main/generator.png b/main/generator.png new file mode 100644 index 0000000..5b9a1af Binary files /dev/null and b/main/generator.png differ diff --git a/main/gpio_pins_config.png b/main/gpio_pins_config.png new file mode 100644 index 0000000..dc0f0da Binary files /dev/null and b/main/gpio_pins_config.png differ diff --git a/main/hello_world_output.png b/main/hello_world_output.png new file mode 100644 index 0000000..5d17d96 Binary files /dev/null and b/main/hello_world_output.png differ diff --git a/main/hello_world_proj_window.png b/main/hello_world_proj_window.png new file mode 100644 index 0000000..6463012 Binary files /dev/null and b/main/hello_world_proj_window.png differ diff --git a/main/import_from_file.png b/main/import_from_file.png new file mode 100644 index 0000000..4f8a4f0 Binary files /dev/null and b/main/import_from_file.png differ diff --git a/main/import_projects.png b/main/import_projects.png new file mode 100644 index 0000000..daa60aa Binary files /dev/null and b/main/import_projects.png differ diff --git a/main/index.html b/main/index.html new file mode 100644 index 0000000..bb4d617 --- /dev/null +++ b/main/index.html @@ -0,0 +1,202 @@ + + + + + + + +CMSIS-Zone: Introduction + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Introduction
+
+
+

+

+Overview

+

Embedded systems frequently integrate specify hardware for access protection or system isolation. For example, a Cortex-M33 processor based system may incorporate:

    +
  • SAU (Secure Attribute Unit) to create a secure execution partition with controlled access from a non-secure execution partition.
  • +
  • MPC (Memory Protection Controller) to control the system-wide access permissions to memory.
  • +
  • PPC (Peripheral Protection Controller) to control the system-wide access permissions to peripherals.
  • +
  • MPU (Memory Protection Unit) to create execution compartments and protect other system parts from illegal access.
  • +
+

Embedded systems may also integrate multiple processors that share system resources (memory and peripherals). In an AMP (Asymmetric Multiprocessor System) it is required to assign or partition the available resources to various processors that execute independent parts of the application software.

+

CMSIS-Zone helps you to manage this complexity and allows to partition an embedded system into project zones and/or execution zones.

+

A project zone defines the memory resources and peripherals for a sub-project that execute on the system. Typical examples are boot-loader and user application, however also the secure and non-secure parts of a Cortex-M TrustZone system is defined using project zones.

+

An execution zone is a software compartment that is protected using a MPU. It defines the access rights to memory and peripherals for a isolated part of the system. This ensures that for example a communication stack (with design flaws) cannot tamper the data or peripherals of other critical parts in a system.

+

CMSIS-Zone includes a utility that allows you to manage these zones. The input to this utility is a resource (*.rzone) file the defines the system resources including memory and peripherals.

+

For these resources the user interface of the CMSIS-Zone utility allows:

    +
  • to setup of overall system-wide access permissions to memory and peripherals.
  • +
  • to define project zones (optional with processor selection and/or security mode) or execution zones (optional with privilege level).
  • +
  • to assign memory and peripherals to these project or execution zones.
  • +
+

This system configuration is stored in an assignment (*.azone) file. With the Generate function of the CMSIS-Zone utility, the resource and configuration data can be used to generate:

    +
  • source code for the setup of protection hardware such as SAU, MPC, PPC, MPU.
  • +
  • configuration files for software development tools (i.e. linker scatter file).
  • +
  • sub-system resource (*.rzone) files that list project zone resources available for sub-projects.
  • +
+

The following diagram shows the development work flow when using the CMSIS-Zone management tool.

+
+ +
+CMSIS-Zone development workflow
+

It is possible to uses these steps multiple times which allows to split a complex SoC design with multiple processors into smaller sub-systems. For example a multi-core device can be partitioned in steps:

    +
  • Step 1: split the multi-processor system into single processor sub-systems.
  • +
  • Step 2: create the partitions for secure and non-secure execution.
  • +
  • Step 3: configure MPU protected execution zones.
  • +
+

The following SoC diagram exemplifies step 1 and step 2 of this workflow.

+
+ +
+Hardware partitioning in multiple steps
+

+Documentation Structure

+

The following sections explain:

+

+Introduction Video

+

This video show how to use the CMSIS-Zone Utility :

+

+ +

+
+
+
+ + + + diff --git a/main/index.js b/main/index.js new file mode 100644 index 0000000..17ec496 --- /dev/null +++ b/main/index.js @@ -0,0 +1,6 @@ +var index = +[ + [ "Overview", "index.html#Overview", null ], + [ "Documentation Structure", "index.html#ManualSections", null ], + [ "Introduction Video", "index.html#mainIntroVideo", null ] +]; \ No newline at end of file diff --git a/main/jquery.js b/main/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/main/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/main/lpc55_resource_map.png b/main/lpc55_resource_map.png new file mode 100644 index 0000000..4d16faa Binary files /dev/null and b/main/lpc55_resource_map.png differ diff --git a/main/lpc55_system_startup.png b/main/lpc55_system_startup.png new file mode 100644 index 0000000..c9c05d1 Binary files /dev/null and b/main/lpc55_system_startup.png differ diff --git a/main/lpc55_zones.png b/main/lpc55_zones.png new file mode 100644 index 0000000..d9bc12f Binary files /dev/null and b/main/lpc55_zones.png differ diff --git a/main/m2351_proj_window.png b/main/m2351_proj_window.png new file mode 100644 index 0000000..a1fb7a9 Binary files /dev/null and b/main/m2351_proj_window.png differ diff --git a/main/m2351_zones.png b/main/m2351_zones.png new file mode 100644 index 0000000..e985023 Binary files /dev/null and b/main/m2351_zones.png differ diff --git a/main/mpu.png b/main/mpu.png new file mode 100644 index 0000000..ed81a58 Binary files /dev/null and b/main/mpu.png differ diff --git a/main/multicore.png b/main/multicore.png new file mode 100644 index 0000000..df58db3 Binary files /dev/null and b/main/multicore.png differ diff --git a/main/muscaA1_zones.png b/main/muscaA1_zones.png new file mode 100644 index 0000000..7000361 Binary files /dev/null and b/main/muscaA1_zones.png differ diff --git a/main/muscaS1_zones.png b/main/muscaS1_zones.png new file mode 100644 index 0000000..a87dda5 Binary files /dev/null and b/main/muscaS1_zones.png differ diff --git a/main/nav_f.png b/main/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/main/nav_f.png differ diff --git a/main/nav_fd.png b/main/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/main/nav_fd.png differ diff --git a/main/nav_g.png b/main/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/main/nav_g.png differ diff --git a/main/nav_h.png b/main/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/main/nav_h.png differ diff --git a/main/nav_hd.png b/main/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/main/nav_hd.png differ diff --git a/main/navtree.css b/main/navtree.css new file mode 100644 index 0000000..c8a7766 --- /dev/null +++ b/main/navtree.css @@ -0,0 +1,150 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/main/navtree.js b/main/navtree.js new file mode 100644 index 0000000..f6b1154 --- /dev/null +++ b/main/navtree.js @@ -0,0 +1,555 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + var topOffset=5; + if (typeof page_layout!=='undefined' && page_layout==1) { + topOffset+=$('#top').outerHeight(); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + /* ensures first section is expanded when opening index */ + if ((root=="index.html") && (!navTreeSubIndices[i]["index.html"].length)) { + navTreeSubIndices[i]["index.html"]=[0]; + } + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +CMSIS-Zone: Usage and Description + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
CMSIS-Zone +   + +
+
System Resource Management
+
+ +   + + + + +
+
+
+ +
+
    + +
+
+ + +
+
+ +
+
+
+ + + + + + diff --git a/main/partition_h_l5.png b/main/partition_h_l5.png new file mode 100644 index 0000000..b3773a9 Binary files /dev/null and b/main/partition_h_l5.png differ diff --git a/main/peripheral_properties.png b/main/peripheral_properties.png new file mode 100644 index 0000000..e193149 Binary files /dev/null and b/main/peripheral_properties.png differ diff --git a/main/printComponentTabs.js b/main/printComponentTabs.js new file mode 100644 index 0000000..d9ea409 --- /dev/null +++ b/main/printComponentTabs.js @@ -0,0 +1,29 @@ +var strgURL = location.pathname; // path of current component + +// constructor for the array of objects +function tabElement(id, folderName, tabTxt ) { + this.id = id; // elementID as needed in html; + this.folderName = folderName; // folder name of the component + this.tabTxt = tabTxt; // Text displayed as menu on the web + this.currentListItem = '
  • ' + this.tabTxt + '
  • '; + this.listItem = '
  • ' + this.tabTxt + '
  • '; +}; + +// array of objects +var arr = []; + +// fill array +// arr.push( new tabElement( "Zone", ".", "Zone")); + +// write tabs +// called from the header file. +function writeComponentTabs() { + for ( var i=0; i < arr.length; i++ ) { + str = "/" + arr[i].folderName + "/" + if (strgURL.search(str) > 0) { // if this is the current folder + document.write(arr[i].currentListItem); // then print and highlight the tab + } else { + document.write(arr[i].listItem); // else, print the tab + } + } +}; diff --git a/main/res_prop.png b/main/res_prop.png new file mode 100644 index 0000000..fc1502e Binary files /dev/null and b/main/res_prop.png differ diff --git a/main/resize.js b/main/resize.js new file mode 100644 index 0000000..aaeb6fc --- /dev/null +++ b/main/resize.js @@ -0,0 +1,155 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var once=1; +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,barWidth=6,desktop_vp=768,titleHeight; + + function readSetting(cookie) + { + if (window.chrome) { + var val = localStorage.getItem(cookie_namespace+'_width'); + if (val) return val; + } else { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + } + return 250; + } + + function writeSetting(cookie, val) + { + if (window.chrome) { + localStorage.setItem(cookie_namespace+"_width",val); + } else { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; + } + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + writeSetting('width',sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height(); + var contentHeight,navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + content.css({height:contentHeight + "px"}); + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() + { + var newWidth; + if (sidenav.width()>0) { + newWidth=0; + } + else { + var width = readSetting('width'); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + var sidenavWidth = $(sidenav).outerWidth(); + writeSetting('width',sidenavWidth-barWidth); + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readSetting('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + if (once) { + $(".ui-resizable-handle").dblclick(collapseExpand); + once=0 + } + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/main/resource_map.png b/main/resource_map.png new file mode 100644 index 0000000..6e3a23b Binary files /dev/null and b/main/resource_map.png differ diff --git a/main/search/all_0.js b/main/search/all_0.js new file mode 100644 index 0000000..a26311e --- /dev/null +++ b/main/search/all_0.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['_2fazone_20element_0',['/azone element',['../xml_azone_pg.html',1,'zoneFormat']]], + ['_2fazone_2fconfigure_20element_1',['/azone/configure element',['../xml_configure.html',1,'xml_azone_pg']]], + ['_2fazone_2fpartition_20element_2',['/azone/partition element',['../xml_partition.html',1,'xml_azone_pg']]], + ['_2fazone_2frzone_20element_3',['/azone/rzone element',['../xml_arzone.html',1,'xml_azone_pg']]], + ['_2fazone_2fzones_20element_4',['/azone/zones element',['../xml_zones.html',1,'xml_azone_pg']]], + ['_2frzone_20element_5',['/rzone element',['../xml_rzone_pg.html',1,'zoneFormat']]], + ['_2frzone_2fcreator_20element_6',['/rzone/creator element',['../xml_creator.html',1,'xml_rzone_pg']]], + ['_2frzone_2fdevice_20element_7',['/rzone/device element',['../xml_device.html',1,'xml_rzone_pg']]], + ['_2frzone_2fresources_20element_8',['/rzone/resources element',['../xml_resources.html',1,'xml_rzone_pg']]], + ['_2frzone_2fresources_2fmemories_20element_9',['/rzone/resources/memories element',['../xml_memories.html',1,'xml_resources']]], + ['_2frzone_2fresources_2fperipherals_20element_10',['/rzone/resources/peripherals element',['../xml_peripherals.html',1,'xml_resources']]], + ['_2frzone_2fresources_2fsau_5finit_20element_11',['/rzone/resources/sau_init element',['../xml_sau_init.html',1,'xml_resources']]] +]; diff --git a/main/search/all_1.js b/main/search/all_1.js new file mode 100644 index 0000000..57e8eb6 --- /dev/null +++ b/main/search/all_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['arm_20musca_2da1_0',['Arm Musca-A1',['../zTEMuscaA1.html',1,'zTExamples']]], + ['arm_20musca_2ds1_1',['Arm Musca-S1',['../zTEMuscaS1.html',1,'zTExamples']]] +]; diff --git a/main/search/all_2.js b/main/search/all_2.js new file mode 100644 index 0000000..b321de5 --- /dev/null +++ b/main/search/all_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['cli_2emd_0',['cli.md',['../cli_8md.html',1,'']]], + ['cmsis_2dzone_20use_20cases_1',['CMSIS-Zone Use Cases',['../UseCases.html',1,'']]], + ['cmsis_2dzone_20utility_2',['CMSIS-Zone Utility',['../zoneToolUsage.html',1,'']]], + ['command_20line_20mode_3',['Command Line Mode',['../zTCLI.html',1,'zoneToolUsage']]] +]; diff --git a/main/search/all_3.js b/main/search/all_3.js new file mode 100644 index 0000000..0e6c443 --- /dev/null +++ b/main/search/all_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['error_20messages_0',['Error Messages',['../ErrorMessages.html',1,'']]], + ['error_5fmsgs_2etxt_1',['error_msgs.txt',['../error__msgs_8txt.html',1,'']]], + ['examples_2',['Examples',['../zTExamples.html',1,'zoneToolUsage']]], + ['examples_2etxt_3',['examples.txt',['../examples_8txt.html',1,'']]] +]; diff --git a/main/search/all_4.js b/main/search/all_4.js new file mode 100644 index 0000000..2bbc6d7 --- /dev/null +++ b/main/search/all_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gen_5fdatamodel_2etxt_0',['gen_datamodel.txt',['../gen__datamodel_8txt.html',1,'']]], + ['generator_20data_20model_1',['Generator Data Model',['../GenDataModel.html',1,'']]] +]; diff --git a/main/search/all_5.js b/main/search/all_5.js new file mode 100644 index 0000000..0aec855 --- /dev/null +++ b/main/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['history_2emd_0',['history.md',['../history_8md.html',1,'']]] +]; diff --git a/main/search/all_6.js b/main/search/all_6.js new file mode 100644 index 0000000..3395360 --- /dev/null +++ b/main/search/all_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['interactive_20mode_0',['Interactive Mode',['../zTInteractiveMode.html',1,'zoneToolUsage']]], + ['interactive_2emd_1',['interactive.md',['../interactive_8md.html',1,'']]], + ['interrupt_5bn_5d_20sequence_20element_2',['interrupt[n] sequence element',['../fm_interrupt.html',1,'fm_zone']]], + ['introduction_3',['Introduction',['../index.html',1,'']]] +]; diff --git a/main/search/all_7.js b/main/search/all_7.js new file mode 100644 index 0000000..4b36c7f --- /dev/null +++ b/main/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['keil_20mcbstm32f400_20evaluation_20board_0',['Keil MCBSTM32F400 Evaluation Board',['../zTEMCB400.html',1,'zTExamples']]] +]; diff --git a/main/search/all_8.js b/main/search/all_8.js new file mode 100644 index 0000000..fd42337 --- /dev/null +++ b/main/search/all_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['mainpage_2emd_0',['mainpage.md',['../mainpage_8md.html',1,'']]], + ['memory_5bn_5d_20sequence_20element_1',['memory[n] sequence element',['../fm_memory.html',1,'fm_zone']]], + ['microchip_20saml11_2',['Microchip SAML11',['../zTESAML11.html',1,'zTExamples']]], + ['mpc_5fsetup_5bn_5d_20element_3',['mpc_setup[n] element',['../fm_mpc_setup.html',1,'fm_system']]], + ['mpu_5fsetup_20element_4',['mpu_setup element',['../fm_mpu_setup.html',1,'fm_zone']]] +]; diff --git a/main/search/all_9.js b/main/search/all_9.js new file mode 100644 index 0000000..ae0a0a9 --- /dev/null +++ b/main/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nuvoton_20numicro_20m2351_0',['Nuvoton NuMicro M2351',['../zTEM2351.html',1,'zTExamples']]], + ['nxp_20lpc55s69_1',['NXP LPC55S69',['../zTELPC55.html',1,'zTExamples']]] +]; diff --git a/main/search/all_a.js b/main/search/all_a.js new file mode 100644 index 0000000..5b5892a --- /dev/null +++ b/main/search/all_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['peripheral_5bn_5d_20element_0',['peripheral[n] element',['../fm_peripheral.html',1,'fm_zone']]], + ['processor_5bn_5d_20sequence_20element_1',['processor[n] sequence element',['../fm_processor.html',1,'fm_system']]] +]; diff --git a/main/search/all_b.js b/main/search/all_b.js new file mode 100644 index 0000000..50e14dd --- /dev/null +++ b/main/search/all_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['reg_5fsetup_5bn_5d_20element_0',['reg_setup[n] element',['../fm_reg_setup.html',1,'fm_system']]], + ['revision_20history_1',['Revision History',['../zone_revisionHistory.html',1,'']]] +]; diff --git a/main/search/all_c.js b/main/search/all_c.js new file mode 100644 index 0000000..856ab7c --- /dev/null +++ b/main/search/all_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['sau_5bn_5d_20sequence_20element_0',['sau[n] sequence element',['../fm_sau.html',1,'fm_system']]], + ['stmicroelectronics_20stm32l5_1',['STMicroelectronics STM32L5',['../zTESTM32L5.html',1,'zTExamples']]], + ['system_20element_2',['system element',['../fm_system.html',1,'GenDataModel']]] +]; diff --git a/main/search/all_d.js b/main/search/all_d.js new file mode 100644 index 0000000..7e1dfc1 --- /dev/null +++ b/main/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['use_5fcases_2emd_0',['use_cases.md',['../use__cases_8md.html',1,'']]], + ['utility_2emd_1',['utility.md',['../utility_8md.html',1,'']]] +]; diff --git a/main/search/all_e.js b/main/search/all_e.js new file mode 100644 index 0000000..79f1fb3 --- /dev/null +++ b/main/search/all_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xml_5fformat_2etxt_0',['xml_format.txt',['../xml__format_8txt.html',1,'']]] +]; diff --git a/main/search/all_f.js b/main/search/all_f.js new file mode 100644 index 0000000..4011071 --- /dev/null +++ b/main/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['zone_20description_20format_0',['Zone Description Format',['../zoneFormat.html',1,'']]], + ['zone_20element_1',['zone element',['../fm_zone.html',1,'GenDataModel']]] +]; diff --git a/main/search/close.svg b/main/search/close.svg new file mode 100644 index 0000000..a933eea --- /dev/null +++ b/main/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/main/search/files_0.js b/main/search/files_0.js new file mode 100644 index 0000000..129ff97 --- /dev/null +++ b/main/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cli_2emd_0',['cli.md',['../cli_8md.html',1,'']]] +]; diff --git a/main/search/files_1.js b/main/search/files_1.js new file mode 100644 index 0000000..3a03749 --- /dev/null +++ b/main/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['error_5fmsgs_2etxt_0',['error_msgs.txt',['../error__msgs_8txt.html',1,'']]], + ['examples_2etxt_1',['examples.txt',['../examples_8txt.html',1,'']]] +]; diff --git a/main/search/files_2.js b/main/search/files_2.js new file mode 100644 index 0000000..2051a3f --- /dev/null +++ b/main/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gen_5fdatamodel_2etxt_0',['gen_datamodel.txt',['../gen__datamodel_8txt.html',1,'']]] +]; diff --git a/main/search/files_3.js b/main/search/files_3.js new file mode 100644 index 0000000..0aec855 --- /dev/null +++ b/main/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['history_2emd_0',['history.md',['../history_8md.html',1,'']]] +]; diff --git a/main/search/files_4.js b/main/search/files_4.js new file mode 100644 index 0000000..b62cc25 --- /dev/null +++ b/main/search/files_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['interactive_2emd_0',['interactive.md',['../interactive_8md.html',1,'']]] +]; diff --git a/main/search/files_5.js b/main/search/files_5.js new file mode 100644 index 0000000..f5e1c89 --- /dev/null +++ b/main/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mainpage_2emd_0',['mainpage.md',['../mainpage_8md.html',1,'']]] +]; diff --git a/main/search/files_6.js b/main/search/files_6.js new file mode 100644 index 0000000..7e1dfc1 --- /dev/null +++ b/main/search/files_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['use_5fcases_2emd_0',['use_cases.md',['../use__cases_8md.html',1,'']]], + ['utility_2emd_1',['utility.md',['../utility_8md.html',1,'']]] +]; diff --git a/main/search/files_7.js b/main/search/files_7.js new file mode 100644 index 0000000..79f1fb3 --- /dev/null +++ b/main/search/files_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xml_5fformat_2etxt_0',['xml_format.txt',['../xml__format_8txt.html',1,'']]] +]; diff --git a/main/search/mag.svg b/main/search/mag.svg new file mode 100644 index 0000000..9f46b30 --- /dev/null +++ b/main/search/mag.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/main/search/mag_d.svg b/main/search/mag_d.svg new file mode 100644 index 0000000..b9a814c --- /dev/null +++ b/main/search/mag_d.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/main/search/mag_sel.svg b/main/search/mag_sel.svg new file mode 100644 index 0000000..03626f6 --- /dev/null +++ b/main/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/main/search/mag_seld.svg b/main/search/mag_seld.svg new file mode 100644 index 0000000..6e720dc --- /dev/null +++ b/main/search/mag_seld.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/main/search/pages_0.js b/main/search/pages_0.js new file mode 100644 index 0000000..a26311e --- /dev/null +++ b/main/search/pages_0.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['_2fazone_20element_0',['/azone element',['../xml_azone_pg.html',1,'zoneFormat']]], + ['_2fazone_2fconfigure_20element_1',['/azone/configure element',['../xml_configure.html',1,'xml_azone_pg']]], + ['_2fazone_2fpartition_20element_2',['/azone/partition element',['../xml_partition.html',1,'xml_azone_pg']]], + ['_2fazone_2frzone_20element_3',['/azone/rzone element',['../xml_arzone.html',1,'xml_azone_pg']]], + ['_2fazone_2fzones_20element_4',['/azone/zones element',['../xml_zones.html',1,'xml_azone_pg']]], + ['_2frzone_20element_5',['/rzone element',['../xml_rzone_pg.html',1,'zoneFormat']]], + ['_2frzone_2fcreator_20element_6',['/rzone/creator element',['../xml_creator.html',1,'xml_rzone_pg']]], + ['_2frzone_2fdevice_20element_7',['/rzone/device element',['../xml_device.html',1,'xml_rzone_pg']]], + ['_2frzone_2fresources_20element_8',['/rzone/resources element',['../xml_resources.html',1,'xml_rzone_pg']]], + ['_2frzone_2fresources_2fmemories_20element_9',['/rzone/resources/memories element',['../xml_memories.html',1,'xml_resources']]], + ['_2frzone_2fresources_2fperipherals_20element_10',['/rzone/resources/peripherals element',['../xml_peripherals.html',1,'xml_resources']]], + ['_2frzone_2fresources_2fsau_5finit_20element_11',['/rzone/resources/sau_init element',['../xml_sau_init.html',1,'xml_resources']]] +]; diff --git a/main/search/pages_1.js b/main/search/pages_1.js new file mode 100644 index 0000000..57e8eb6 --- /dev/null +++ b/main/search/pages_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['arm_20musca_2da1_0',['Arm Musca-A1',['../zTEMuscaA1.html',1,'zTExamples']]], + ['arm_20musca_2ds1_1',['Arm Musca-S1',['../zTEMuscaS1.html',1,'zTExamples']]] +]; diff --git a/main/search/pages_2.js b/main/search/pages_2.js new file mode 100644 index 0000000..dad8130 --- /dev/null +++ b/main/search/pages_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['cmsis_2dzone_20use_20cases_0',['CMSIS-Zone Use Cases',['../UseCases.html',1,'']]], + ['cmsis_2dzone_20utility_1',['CMSIS-Zone Utility',['../zoneToolUsage.html',1,'']]], + ['command_20line_20mode_2',['Command Line Mode',['../zTCLI.html',1,'zoneToolUsage']]] +]; diff --git a/main/search/pages_3.js b/main/search/pages_3.js new file mode 100644 index 0000000..18f96f8 --- /dev/null +++ b/main/search/pages_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['error_20messages_0',['Error Messages',['../ErrorMessages.html',1,'']]], + ['examples_1',['Examples',['../zTExamples.html',1,'zoneToolUsage']]] +]; diff --git a/main/search/pages_4.js b/main/search/pages_4.js new file mode 100644 index 0000000..f4fa132 --- /dev/null +++ b/main/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['generator_20data_20model_0',['Generator Data Model',['../GenDataModel.html',1,'']]] +]; diff --git a/main/search/pages_5.js b/main/search/pages_5.js new file mode 100644 index 0000000..3e39a32 --- /dev/null +++ b/main/search/pages_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['interactive_20mode_0',['Interactive Mode',['../zTInteractiveMode.html',1,'zoneToolUsage']]], + ['interrupt_5bn_5d_20sequence_20element_1',['interrupt[n] sequence element',['../fm_interrupt.html',1,'fm_zone']]], + ['introduction_2',['Introduction',['../index.html',1,'']]] +]; diff --git a/main/search/pages_6.js b/main/search/pages_6.js new file mode 100644 index 0000000..4b36c7f --- /dev/null +++ b/main/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['keil_20mcbstm32f400_20evaluation_20board_0',['Keil MCBSTM32F400 Evaluation Board',['../zTEMCB400.html',1,'zTExamples']]] +]; diff --git a/main/search/pages_7.js b/main/search/pages_7.js new file mode 100644 index 0000000..b49726b --- /dev/null +++ b/main/search/pages_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['memory_5bn_5d_20sequence_20element_0',['memory[n] sequence element',['../fm_memory.html',1,'fm_zone']]], + ['microchip_20saml11_1',['Microchip SAML11',['../zTESAML11.html',1,'zTExamples']]], + ['mpc_5fsetup_5bn_5d_20element_2',['mpc_setup[n] element',['../fm_mpc_setup.html',1,'fm_system']]], + ['mpu_5fsetup_20element_3',['mpu_setup element',['../fm_mpu_setup.html',1,'fm_zone']]] +]; diff --git a/main/search/pages_8.js b/main/search/pages_8.js new file mode 100644 index 0000000..ae0a0a9 --- /dev/null +++ b/main/search/pages_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nuvoton_20numicro_20m2351_0',['Nuvoton NuMicro M2351',['../zTEM2351.html',1,'zTExamples']]], + ['nxp_20lpc55s69_1',['NXP LPC55S69',['../zTELPC55.html',1,'zTExamples']]] +]; diff --git a/main/search/pages_9.js b/main/search/pages_9.js new file mode 100644 index 0000000..5b5892a --- /dev/null +++ b/main/search/pages_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['peripheral_5bn_5d_20element_0',['peripheral[n] element',['../fm_peripheral.html',1,'fm_zone']]], + ['processor_5bn_5d_20sequence_20element_1',['processor[n] sequence element',['../fm_processor.html',1,'fm_system']]] +]; diff --git a/main/search/pages_a.js b/main/search/pages_a.js new file mode 100644 index 0000000..50e14dd --- /dev/null +++ b/main/search/pages_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['reg_5fsetup_5bn_5d_20element_0',['reg_setup[n] element',['../fm_reg_setup.html',1,'fm_system']]], + ['revision_20history_1',['Revision History',['../zone_revisionHistory.html',1,'']]] +]; diff --git a/main/search/pages_b.js b/main/search/pages_b.js new file mode 100644 index 0000000..856ab7c --- /dev/null +++ b/main/search/pages_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['sau_5bn_5d_20sequence_20element_0',['sau[n] sequence element',['../fm_sau.html',1,'fm_system']]], + ['stmicroelectronics_20stm32l5_1',['STMicroelectronics STM32L5',['../zTESTM32L5.html',1,'zTExamples']]], + ['system_20element_2',['system element',['../fm_system.html',1,'GenDataModel']]] +]; diff --git a/main/search/pages_c.js b/main/search/pages_c.js new file mode 100644 index 0000000..4011071 --- /dev/null +++ b/main/search/pages_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['zone_20description_20format_0',['Zone Description Format',['../zoneFormat.html',1,'']]], + ['zone_20element_1',['zone element',['../fm_zone.html',1,'GenDataModel']]] +]; diff --git a/main/search/search.css b/main/search/search.css new file mode 100644 index 0000000..9ca12c5 --- /dev/null +++ b/main/search/search.css @@ -0,0 +1,297 @@ +/*---------------- Search Box */ + +.titlearea table { + width: 100%; +} + +dark-mode-toggle { + position: absolute; + right: 5px; + padding-top: 3px; +} + +#MSearchBox { + position: absolute; + right: 34px; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/main/search/search.js b/main/search/search.js new file mode 100644 index 0000000..e103a26 --- /dev/null +++ b/main/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + searchResults.Search(searchValue); + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e - needed to position the dropdown content */ +.dropdown { + position: relative; + display: inline-block; +} + +/* Dropdown Content (Hidden by Default) */ +.dropdown-content { + display: none; + position: absolute; + background-color: var(--arm_light_gray3); + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.4); + white-space: nowrap; + cursor: pointer; + z-index: 1; +} + +/* Links inside the dropdown */ +.dropdown-content a { + # color: black; + color: var(--arm_dark_gray); + padding: 4px 6px; + text-decoration: none; + display: block; +} + +/* Change color of dropdown links on hover */ +.dropdown-content a:hover {background-color: #ddd} + +/* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */ +.show {display:block;} diff --git a/main/window_preferences.png b/main/window_preferences.png new file mode 100644 index 0000000..64ea4a3 Binary files /dev/null and b/main/window_preferences.png differ diff --git a/main/xml_arzone.html b/main/xml_arzone.html new file mode 100644 index 0000000..1e83570 --- /dev/null +++ b/main/xml_arzone.html @@ -0,0 +1,159 @@ + + + + + + + +CMSIS-Zone: /azone/rzone element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /azone/rzone element
    +
    +
    +

    The /azone/rzone element specifies the filename of the related *.rzone file. If this element is omitted the *.azone and *.rzone file have the same base name.

    +

    Example

    <rzone name="MySystem.rzone">
    +

     

    + + + + + + + + + +
    Parent Element Element Chain
    azone /azone element
    Attributes Description Type Use
    name Name of the related *.rzone file xs:string required
    +
    +
    +
    + + + + diff --git a/main/xml_azone_pg.html b/main/xml_azone_pg.html new file mode 100644 index 0000000..cd3515f --- /dev/null +++ b/main/xml_azone_pg.html @@ -0,0 +1,171 @@ + + + + + + + +CMSIS-Zone: /azone element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /azone element
    +
    +
    +

    The /azone element element is the root element of the .azone file which stores partitioning of the system or the configuration of a MPU.

    + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    root Document root
    Attributes Description Type Use
    schemaVersion CMSIS-Zone schema version used for describing the azone file. VersionType required
    xmlns:xs Is set to: "http://www.w3.org/2001/XMLSchema-instance" to indicate compliance to the XML format. xs:string required
    xs:noNamespaceSchemaLocation File name of the schema file. For example, "azone.xsd". xs:string required
    Child Elements Description Type Occurrence
    rzone Reference to rzone file RZoneType 0..1
    configure Control the operation of the CMSIS-Zone utility ConfigureType 0..1
    partition Partition information for memory block splits RegionsType 0..1
    zones Zone assignments of processor, memory, and peripheral resources ZonesType 0..1
    +
    +
    +
    + + + + diff --git a/main/xml_azone_pg.js b/main/xml_azone_pg.js new file mode 100644 index 0000000..8120ac5 --- /dev/null +++ b/main/xml_azone_pg.js @@ -0,0 +1,17 @@ +var xml_azone_pg = +[ + [ "/azone/rzone element", "xml_arzone.html", null ], + [ "/azone/configure element", "xml_configure.html", [ + [ "/azone/configure/type element", "xml_configure.html#xml_ctype", null ] + ] ], + [ "/azone/partition element", "xml_partition.html", [ + [ "/azone/partition/memory element", "xml_partition.html#xml_amemory", null ], + [ "/azone/partition/peripheral element", "xml_partition.html#xml_aperipheral", null ], + [ "/azone/partition/peripheral/slot element", "xml_partition.html#xml_aslot", null ] + ] ], + [ "/azone/zones element", "xml_zones.html", [ + [ "/azone/zones/zone element", "xml_zones.html#xml_zone", null ], + [ "/azone/zones/zone/assign element", "xml_zones.html#xml_assign", null ], + [ "/azone/zones/zone/assign/interrupt element", "xml_zones.html#xml_ainterrupt", null ] + ] ] +]; \ No newline at end of file diff --git a/main/xml_configure.html b/main/xml_configure.html new file mode 100644 index 0000000..2b5fd6d --- /dev/null +++ b/main/xml_configure.html @@ -0,0 +1,184 @@ + + + + + + + +CMSIS-Zone: /azone/configure element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /azone/configure element
    +
    +
    +

    The /azone/configure element allows to control the operation of the CMSIS-Zone utility.

    +

    Example

    <configure mode="MPU"> // CMSIS-Zone utility UI behavior
    +
    <type name="RAM" show="1" select="0" />
    +
    <type name="ROM" show="0" select="1" />
    +
    <type name="Peripheral" show="0" select="0" />
    +
    </configure>
    +

     

    + + + + + + + + + + + + + +
    Parent Element Element Chain
    azone /azone element
    Attributes Description Type Use
    mode Operation mode ("Project" or "MPU") xs:string required
    Child Elements Description Type Occurrence
    type UI behavior for memory or peripheral selection depending on the operation mode complexType 0..*
    +

    +/azone/configure/type element

    +

    The /azone/configure/type element defines UI behavior of the CMSIS-Zone utility for a memory or peripheral selection depending on the operation mode.

    + + + + + + + + + + + + + +
    Parent Element Element Chain
    configure /azone/configure element
    Attributes Description Type Use
    name Refers item type ("RAM", "ROM", or "Peripheral") that this element specifies. xs:string required
    show "0" specifies that the item type is hidden during configuration in the UI of the CMSIS-Zone utility (default is "1"). xs:boolean optional
    select "1" specifies that all resources with the item type are selected (default is "0"). xs:boolean optional
    +
    +
    +
    + + + + diff --git a/main/xml_creator.html b/main/xml_creator.html new file mode 100644 index 0000000..94a0857 --- /dev/null +++ b/main/xml_creator.html @@ -0,0 +1,167 @@ + + + + + + + +CMSIS-Zone: /rzone/creator element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /rzone/creator element
    +
    +
    +

    The /rzone/creator element specifies how a derived .rzone file was created.

    + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    rzone /rzone element
    Attributes Description Type Use
    tool Identification of the tool that generated this *.rzone file. (i.e. "CMSIS-Zone V1.1.0") xs:string optional
    rzone Name of the .rzone file which contained top level resources. xs:string optional
    azone Name of the .azone file which contained related assignments. xs:string optional
    info Brief description of the zone. xs:string optional
    security Security setting for this *.rzone file. SecurityType

    optional

    +

    +
    +
    +
    +
    + + + + diff --git a/main/xml_device.html b/main/xml_device.html new file mode 100644 index 0000000..90c17b3 --- /dev/null +++ b/main/xml_device.html @@ -0,0 +1,230 @@ + + + + + + + +CMSIS-Zone: /rzone/device element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /rzone/device element
    +
    +
    +

    The /rzone/device element specifies the device of the system that integrates the processors.

    + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    rzone /rzone element
    Attributes Description Type Use
    Dvendor The devices vendor identifier. xs:string required
    Dname Specifies the name of the device. Only alphabetical characters, decimal digits, '-' and '_' are allowed. RestrictedString required
    info Brief description of the device. xs:string optional
    +
    Child Elements Description Type Occurrence
    package Optional reference to the Software Pack this device is provided by. complexType 0..1
    processor Processing elements and associated features embedded in the device. complexType 1..*
    +

    +/rzone/device/package element

    +

    The /rzone/device/package element refers to the Software Pack that provides the Device Family Pack (DFP) for the device.

    + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    device /rzone/device element
    Attributes Description Type Use
    name The unique pack name. xs:string required
    url The URL the pack can be obtained from. xs:string optional
    vendor The pack vendor name. xs:string required
    version The pack version. xs:string optional
    info Brief description of the Software Pack. xs:string optional
    +
    +

    +/rzone/device/processor element

    +

    The /rzone/device/processor element defines the processing elements integrated in the device. The information in this element is identical with CMSIS-Pack, except that it provides an additional 'info' attribute.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    device /rzone/device element
    Attributes Description Type Use
    Pname Processor identifier. This attribute is mandatory for devices that embed multiple processors. RestrictedString required for all multi-core devices
    Punits Specifies the number of processor units in a symmetric multi-processor core (MPCore). Defaults to single-core CPU (1) when left empty. InstancesType required for all multi-core devices
    Dcore Specifies the processor core. DcoreEnum required
    Dfpu Specifies whether a hardware Floating Point Unit is present in the processor. DfpuEnum required
    Dmpu Specifies whether a Memory Protection Unit is present in the processor. DmpuEnum required
    Dtz Specifies whether an Armv8-M based device implements TrustZone. DtzEnum required for ARMv8-M based devices
    Ddsp Specifies whether a device supports the DSP instructions set. DdspEnum required
    Dendian Specifies the endianess of the processor. DendianEnum required
    Dclock Specifies the max clock frequency of the processor subsystem xs:unsignedInt required
    DcoreVersion Hardware revision of the processor core xs:string required
    DnumInterrupts Number of NVIC interrupt sources available to the processor core (excludes exception vectors). NonNegativeInteger required for Armv8-M with TrustZone
    DnumMpuRegions Number of regions in the Memory Protection Unit (MPU) of the processor core. (Default: 8 when Dmpu is enabled) NonNegativeInteger optional
    DnumSauRegions Number of regions in the Security Attribution Unit (SAU) of the processor core. NonNegativeInteger required for Armv8-M with TrustZone
    info Brief description of the processor. xs:string optional
    +
    +
    +
    +
    + + + + diff --git a/main/xml_memories.html b/main/xml_memories.html new file mode 100644 index 0000000..adf219d --- /dev/null +++ b/main/xml_memories.html @@ -0,0 +1,255 @@ + + + + + + + +CMSIS-Zone: /rzone/resources/memories element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /rzone/resources/memories element
    +
    +
    +

    The /rzone/resources/memories element contains:

      +
    • a list of all memory regions available in this system.
    • +
    • a list of all Memory Protection Controllers (MPC) in this system.
      + Some memory region or MPC might restrict the availability to specific processors.
    • +
    +

    Example

    <resources>
    +
    <memories>
    +
    <memory name="ExtMem1" start="0x00000000" physical="0x00000000" size="0x00010000" access="rwx" security="" type="RAM" info="External memory 1 / remap" external="true" />
    +
    <memory name="Flash_NS" start="0x08000000" size="0x00080000" access="rx" security="" type="ROM" info="Flash Memory (non secure)" />
    +
    <mpc name="IOTKIT_MPCSSRAM0" start="0x08000000" size="0x00100000" type="sp" blk_size="0x20000" info="MPC for extended Flash" />
    +
    <memory name="Flash_S" start="0x0c000000" physical="0x08001000" size="0x00080000" access="rx" security="c" type="ROM" info="Flash Memory (secure)" />
    +
    +
    <memory name="SRAM1_C_NS" start="0x0A000000" size="0x00030000" access="rwx" security="" type="RAM" info="SRAM1 Code (non secure)" />
    +
    <memory name="SRAM1_C_S" start="0x0E000000" physical="0x0A000000" size="0x00030000" access="rwx" security="c" type="RAM" info="SRAM1 Code (secure)" linker_control="*sram1" />
    +
    <memory name="SRAM1_S" start="0x30000000" physical="0x0A000000" size="0x00030000" access="rw" security="s" type="RAM" info="SRAM1 (secure)" />
    +
    <memory name="SRAM1_NS" start="0x20000000" physical="0x0A000000" size="0x00030000" access="rw" security="" type="RAM" info="SRAM1 (non secure)" />
    +
    +
    <memory name="FMC_Bank1" start="0x60000000" size="0x00000000" access="rw" security="" type="RAM" info="Memory Controller bank 1" />
    +
    </memories>
    +
    :
    +
    </resources>
    +
    + + + + + + + + + + +
    Parent Element Element Chain
    resources /rzone/resources element
    Child Elements Description Type Occurrence
    memory Lists a logical memory region with physical mapping. Memory might restricted to processors, access, or security modes. complexType 0..1
    mpc Specifies a Memory Protection Controller (MPC) for a physical address range. complexType 0..1
    +

    +/rzone/resources/memories/memory element

    +

    The /rzone/resources/memories/memory element lists a logical memory region with physical mapping. Memory might restricted to processors, access, or security modes.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    memories /rzone/resources/memories element
    Attributes Description Type Use
    name The name of this memory region which must be unique in this *.rzone file. xs:string required
    type The type of memory in this region ("RAM" or "ROM"). PhysicalTypeEnum required
    start The logical start address of the memory region in the address map. NonNegativeInteger required
    physical The physical start address of the memory region in the address map. If physical is not specified the start address value is used. NonNegativeInteger optional
    size The size of the memory region in bytes. NonNegativeInteger required
    access Access permissions for this memory region. AccessType optional
    security Security attributes for this memory region. SecurityType optional
    privilege Privilege level for this memory region. PrivilegeType optional
    startup "1" specifies that this region is used for the startup code of the application. Default value is "0". xs:boolean optional
    uninit "1" specifies that this region is not zero initialized during startup. Default value is "0". xs:boolean optional
    shared "1" specifies that this region is used by multiple zones. Default value is "0". xs:boolean optional
    dma "1" specifies that this region is accessed by a DMA controller. Default value is "0". xs:boolean optional
    external "1" specifies that this region is provided by an external component that is not part of the device. Default value is "0". xs:boolean optional
    Pname The processor that can access this memory region. If omitted all processors of the system have access. xs:string optional
    info Brief description of the memory region. xs:string optional
    +
    linker_control Linker control settings for the memory region. xs:string optional
    +
    +

    +/rzone/resources/memories/mpc element

    +

    The /rzone/resources/memories/mpc element element specifies a Memory Protection Controller (MPC) for a physical memory address region.
    + The MPC region must not necessarily overlap a physical memory space which means it can be larger or smaller.

    + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    memories /rzone/resources/memories element
    Attributes Description Type Use
    name The base register name of the MPC. xs:string required
    start The physical start address of the memory address region that is protected by the MPC. NonNegativeInteger required
    size The size of the memory address region in bytes. NonNegativeInteger required
    blk_size The size (in bytes) of each memory block. This value is also the alignment requirement for the memory blocks. The number of LUT bits is: memory size / blk_size. NonNegativeInteger required
    type Specifies the permissions that the MPC verifies for the memory access:
    +
      +
    • type="s" : (default) only the Secure attribute is verified.
    • +
    • type="p" : only the Privileged attribute is verified.
    • +
    • type="sp" : both the Secure are Privileged attribute are verified.
    • +
    +
    MpcTypeEnum optional
    info Brief description of the MPC region. xs:string optional
    +
    +
    +
    +
    + + + + diff --git a/main/xml_partition.html b/main/xml_partition.html new file mode 100644 index 0000000..4b78b81 --- /dev/null +++ b/main/xml_partition.html @@ -0,0 +1,259 @@ + + + + + + + +CMSIS-Zone: /azone/partition element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /azone/partition element
    +
    +
    +

    The /azone/partition element contains a list of memory partitions that are created with the CMSIS-Zone utility. These memory partitions are based on parent memory definitions specified by /rzone/resources/memories element.

    +

    Example

    <partition>
    +
    <memory parent="Flash_NS" name="ROM_NS" offset="0x00000000" size="0x40000" fixed="1" access="rx" info="application code" />
    +
    <memory parent="Flash_S" name="ROM_S" offset="0x00040000" size="0x40000" access="x" info="boot code />
    +
    <memory parent="SRAM1_NS" name="RAM_NS" offset="0x00000000" size="0x20000" />
    +
    <memory parent="SRAM1_S" name="RAM_S" offset="0x00010000" size="0x20000" />
    +
    </partition>
    +

     

    + + + + + + + + + + + +
    Parent Element Element Chain
    azone /azone element
    Child Elements Description Type Occurrence
    memory Defines a new memory sub-region that is related to a parent region in the *.rzone file. complexType 0..*
    peripheral Defines a settings for a peripheral. complexType 0..*
    +

    +/azone/partition/memory element

    +

    The /azone/partition/memory element defines a new memory sub-region that is related to a parent region in the *.rzone file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    partition /azone/partition element
    Attributes Description Type Use
    parent The name of the parent region in the related *.rzone file. xs:string required
    name The name of a new memory partition. xs:string required
    size The physical memory size this block allocates. xs:string required
    offset The address offset of this memory partition. If fixed="1" the memory block cannot be re-ordered within the region. xs:string required
    access Access permissions for this memory block. AccessType optional
    security Security attributes for this memory block. SecurityType optional
    privilege Privilege level for this memory block. PrivilegeType optional
    startup "1" specifies that this region is used for the startup code of the application. Default value is "0". xs:boolean optional
    fixed "1" indicates a fixed offset within that region. "0" (default) allows to re-arrange the block within the region. xs:boolean optional
    uninit "1" specifies that this region is not zero initialized during startup. Default value is "0". xs:boolean optional
    shared "1" specifies that this region is used by multiple zones. Default value is "0". xs:boolean optional
    dma "1" specifies that this region is accessed by a DMA controller. Default value is "0". xs:boolean optional
    info Brief description of the memory block. xs:string optional
    +
    linker_control Linker control settings for the memory region. xs:string optional
    +
    +

    +/azone/partition/peripheral element

    +

    The /azone/partition/peripheral element defines settings for a peripheral in a related *.rzone file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    partition /azone/partition element
    Attributes Description Type Use
    name The name of the peripheral. The combination group / name must be be unique within a processor (specified by Pname). xs:string required
    group The group name of the peripheral. The combination group / name must be be unique within a processor (specified by Pname). xs:string required
    start The logical start address of the peripheral in both secure and non-secure mode. xs:string required
    start_s The logical start address of the peripheral in secure mode only. xs:string optional
    shared "1" specifies that this peripheral group is used by multiple zones. Default value is "0". xs:boolean optional
    dma "1" specifies that this peripheral group is accessed by a DMA controller. Default value is "0". xs:boolean optional
    external "1" specifies that this peripheral is provided by an external component that is not part of the device. Default value is "0". xs:boolean optional
    access Access permissions for this peripheral. AccessType optional
    security Security attributes for this peripheral. SecurityType optional
    privilege Privilege level for this peripheral. PrivilegeType optional
    Child Elements Description Type Occurrence
    slot Defines a settings for a slot. complexType 0..*
    +

    +/azone/partition/peripheral/slot element

    +

    The /azone/partition/peripheral/slot element defines settings for a slot in a related *.rzone file.

    + + + + + + + + + + + + + +
    Parent Element Element Chain
    peripheral /azone/partition/peripheral element
    Attributes Description Type Use
    name The name of the slot. The combination group / peripheral / name must be be unique within a processor (specified by Pname). xs:string required
    secure Overwrites the setting of the secure attribute in the *.rzone file. xs:boolean optional
    privilege Overwrites the setting of the privilege attribute in the *.rzone file. xs:boolean optional
    +
    +
    +
    + + + + diff --git a/main/xml_peripherals.html b/main/xml_peripherals.html new file mode 100644 index 0000000..d2bf2cf --- /dev/null +++ b/main/xml_peripherals.html @@ -0,0 +1,350 @@ + + + + + + + +CMSIS-Zone: /rzone/resources/peripherals element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /rzone/resources/peripherals element
    +
    +
    +

    The /rzone/resources/peripherals element contains a list of all peripherals available in the system. It also restricts the availability to specific processors or security modes.

    +

    Example

    <resources>
    +
    :
    +
    <peripherals>
    +
    <peripheral name="ADC0" start="0x40080000" size="0x1000" access="rwp" info="Analog/Digital Converter 0 (12-bit)"/>
    +
    :
    +
    <group name="TIM" info="Timer Group">
    +
    <peripheral name="TIM1" start="0x40012c00" start_s="0x50012c00" size="0x400" access="rw">
    +
    <interrupt name="TIM1_BRK" irqn="41" info="Timer 1 Break"/>
    +
    <interrupt name="TIM1_UP" irqn="42" info="Timer 1 Update"/>
    +
    <interrupt name="TIM1_BRK" irqn="43" info="Timer 1 Trigger and Commutation"/>
    +
    <interrupt name="TIM1_CC" irqn="44" info="Timer 1 Capture and Compare"/>
    +
    </peripheral>
    +
    <peripheral name="TIM2" start="0x40000000" start_s="0x50000000" size="0x400" access="rw">
    +
    <interrupt name="TIM2" irqn="45" info="Timer2 Global Interrupt"/>
    +
    </peripheral>
    +
    </group>
    +
    </peripherals>
    +
    </resources>
    +

     

    + + + + + + + + + + + +
    Parent Element Element Chain
    resources /rzone/resources element
    Child Elements Description Type Occurrence
    group Logical grouping of peripherals. complexType 0..*
    peripheral Peripheral definitions. complexType 0..*
    +

    +/rzone/resources/peripherals/group element

    +

    The /rzone/resources/peripherals/group element can be used to logically group peripherals according to functionality or bus topology.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    peripherals /rzone/resources/peripherals element
    Attributes Description Type Use
    name The name for the peripheral group must be be unique within a processor (specified by Pname). xs:string required
    start The logical start address of the peripheral group in both secure and non-secure mode. xs:string required
    start_s The logical start address of the peripheral group in secure mode only. xs:string optional
    physical The physical start address of the peripheral group (in case that peripheral is shared in multi-processor system on different address). xs:string optional
    size The physical size of the peripheral group in bytes. xs:string required
    shared "1" specifies that this peripheral group is used by multiple zones. Default value is "0". xs:boolean optional
    dma "1" specifies that this peripheral group is accessed by a DMA controller. Default value is "0". xs:boolean optional
    external "1" specifies that this peripheral group is provided by an external component that is not part of the device. Default value is "0". xs:boolean optional
    Pname The processor that can access this peripheral group. If omitted all processors of the system have access. xs:string optional
    access Access permissions for this peripheral group. AccessType optional
    security Security attributes for this peripheral group. SecurityType optional
    privilege Privilege level for this peripheral group. PrivilegeType optional
    info Brief description of the peripheral group. xs:string optional
    +
    Child Elements Description Type Occurrence
    peripheral Peripheral definitions. complexType 0..*
    setup Setup information for the peripheral group. complexType 0..*
    +

    +/rzone/resources/peripherals/.../peripheral element

    +

    The /rzone/resources/peripherals/.../peripheral element is used to define an address mapping for one peripheral.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    peripherals /rzone/resources/peripherals element
    group /rzone/resources/peripherals/group element
    Attributes Description Type Use
    name The name of the peripheral. The combination group / name must be be unique within a processor (specified by Pname). xs:string required
    start The logical start address of the peripheral in both secure and non-secure mode. xs:string optional
    start_s The logical start address of the peripheral in secure mode only. xs:string optional
    physical The physical start address of the peripheral (in case that peripheral is shared in multi-processor system on different address). xs:string optional
    offset Specifies an offset for the peripheral for the /rzone/resources/peripherals/group element values. The values start, start_s, physical are taken from the /rzone/resources/peripherals/group element element if not overwritten. xs:string optional
    size The physical size of the peripheral in bytes. xs:string required
    shared "1" specifies that this peripheral group is used by multiple zones. Default value is "0". xs:boolean optional
    dma "1" specifies that this peripheral group is accessed by a DMA controller. Default value is "0". xs:boolean optional
    external "1" specifies that this peripheral is provided by an external component that is not part of the device. Default value is "0". xs:boolean optional
    Pname The processor that can access this peripheral. If omitted all processors of the system have access. xs:string optional
    access Access permissions for this peripheral. AccessType optional
    security Security attributes for this peripheral. SecurityType optional
    privilege Privilege level for this peripheral. PrivilegeType optional
    info Brief description of the peripheral. xs:string optional
    +
    slot_name Attribute name of the slot (i.e. Pins or Channels). Used in context menu or dialog heading. xs:string optional
    +
    slot_type Specifies the values that are configured for the slots:
    +
      +
    • type="s" : (default) only the secure attribute is configured.
    • +
    • type="p" : only the Privileged attribute is configured.
    • +
    • type="sp" : both the Secure are Privileged attribute are configured.
    • +
    +
    SlotTypeEnum optional
    Child Elements Description Type Occurrence
    slot Configuration of security or privileged attribute for slots (typically channels or pins). complexType 0..*
    interrupt Interrupts generated by this peripheral. complexType 0..*
    setup Setup information for the peripheral. complexType 0..*
    +

    +/rzone/resources/peripherals/.../peripheral/slot element

    +

    The /rzone/resources/peripherals/.../peripheral/slot element is specific to a channel or pin of a peripheral. It specifies the configuration for interrupts or setup registers that belong to that slot (which is typically a channels or pins).

    + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    peripheral /rzone/resources/peripherals/.../peripheral element
    Attributes Description Type Use
    name The name of the slot (typically channel or pin name). xs:string required
    secure Setting of the secure attribute (default="0"). xs:boolean optional
    privilege Setting of the privilege attribute (default="0"). xs:boolean optional
    Child Elements Description Type Occurrence
    interrupt Interrupts generated by this peripheral. complexType 0..*
    setup Setup information for the peripheral. complexType 0..*
    +

    +/rzone/resources/peripherals/.../interrupt element

    +

    The /rzone/resources/peripherals/.../interrupt element defines the interrupts that are generated by a peripheral or slot.

    + + + + + + + + + + + + + +
    Parent Element Element Chain
    peripheral /rzone/resources/peripherals/.../peripheral element
    Attributes Description Type Use
    name The name of the interrupt. xs:string required
    irqn The interrupt number. xs:string required
    info Brief description of the peripheral. xs:string optional
    +
    +

    +/rzone/resources/peripherals/.../setup element

    +

    The /rzone/resources/peripherals/.../setup element defines the setup information for this peripheral, slot, or peripheral group. The attributes security and privilege specifies conditions. When the peripheral is specified for on the the conditions, the value is assigned to the register name (with an optional index).

    + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    peripheral /rzone/resources/peripherals/.../peripheral element
    group /rzone/resources/peripherals/group element
    Attributes Description Type Use
    name The name of the register. xs:string required
    index An index value for the register. xs:string required
    value The value that should be written to the register when the security or privilege condition matches with the peripheral configuration. xs:string required
    security Security condition for this setup value. Security can be "s" or "n". When a peripheral matches that security setting the value will be written. SecurityType optional
    privilege Privilege level condition for this setup value. Privilege can be "u" or "p". When a peripheral matches that privilege setting the value will be written. When both Security and Privilege is specified, both conditions must match. PrivilegeType optional
    info Brief description of the setup value. xs:string optional
    +
    +
    +
    +
    + + + + diff --git a/main/xml_resources.html b/main/xml_resources.html new file mode 100644 index 0000000..e4ff1c0 --- /dev/null +++ b/main/xml_resources.html @@ -0,0 +1,161 @@ + + + + + + + +CMSIS-Zone: /rzone/resources element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /rzone/resources element
    +
    +
    +

    The /rzone/resources element defines the memory and peripheral regions that are available.

    + + + + + + + + + + + + + +
    Parent Element Element Chain
    rzone /rzone element
    Child Elements Description Type Occurrence
    sau_init Fixed SAU settings required for this system, i.e. to access peripherals. SauInitType 0..1
    memories List of all memory regions available in this system. Some memory region might restrict the availability to specific processors. complexType 0..1
    peripherals List of all peripherals available for this system. complexType 0..1
    +
    +
    +
    + + + + diff --git a/main/xml_resources.js b/main/xml_resources.js new file mode 100644 index 0000000..0c85782 --- /dev/null +++ b/main/xml_resources.js @@ -0,0 +1,17 @@ +var xml_resources = +[ + [ "/rzone/resources/sau_init element", "xml_sau_init.html", [ + [ "/rzone/sau_init/region element", "xml_sau_init.html#xml_si_region", null ] + ] ], + [ "/rzone/resources/memories element", "xml_memories.html", [ + [ "/rzone/resources/memories/memory element", "xml_memories.html#xml_rmemory", null ], + [ "/rzone/resources/memories/mpc element", "xml_memories.html#xml_rmpc", null ] + ] ], + [ "/rzone/resources/peripherals element", "xml_peripherals.html", [ + [ "/rzone/resources/peripherals/group element", "xml_peripherals.html#xml_group", null ], + [ "/rzone/resources/peripherals/.../peripheral element", "xml_peripherals.html#xml_peripheral", null ], + [ "/rzone/resources/peripherals/.../peripheral/slot element", "xml_peripherals.html#xml_slot", null ], + [ "/rzone/resources/peripherals/.../interrupt element", "xml_peripherals.html#xml_interrupt", null ], + [ "/rzone/resources/peripherals/.../setup element", "xml_peripherals.html#xml_p_setup", null ] + ] ] +]; \ No newline at end of file diff --git a/main/xml_rzone_pg.html b/main/xml_rzone_pg.html new file mode 100644 index 0000000..1928bc4 --- /dev/null +++ b/main/xml_rzone_pg.html @@ -0,0 +1,169 @@ + + + + + + + +CMSIS-Zone: /rzone element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /rzone element
    +
    +
    +

    The /rzone element element is the root element of the .rzone file which describes the resources (processors, memory, peripherals) available.

    + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    root Document root
    Attributes Description Type Use
    schemaVersion CMSIS-Zone schema version used for describing the *.rzone file. VersionType required
    xmlns:xs Is set to: "http://www.w3.org/2001/XMLSchema-instance" to indicate compliance to the XML format. xs:string required
    xs:noNamespaceSchemaLocation File name of the schema file. For example, "rzone.xsd". xs:string required
    Child Elements Description Type Occurrence
    creator Specifies how a derived .rzone file was created. CreatorType 0..1
    device Device that includes one or more processing element (PE). DeviceType 1..1
    resources Physical resources (memory and peripherals) that are available in the system. SResourceType 1..1
    +
    +
    +
    + + + + diff --git a/main/xml_rzone_pg.js b/main/xml_rzone_pg.js new file mode 100644 index 0000000..511b822 --- /dev/null +++ b/main/xml_rzone_pg.js @@ -0,0 +1,9 @@ +var xml_rzone_pg = +[ + [ "/rzone/creator element", "xml_creator.html", null ], + [ "/rzone/device element", "xml_device.html", [ + [ "/rzone/device/package element", "xml_device.html#xml_package", null ], + [ "/rzone/device/processor element", "xml_device.html#xml_processor", null ] + ] ], + [ "/rzone/resources element", "xml_resources.html", "xml_resources" ] +]; \ No newline at end of file diff --git a/main/xml_sau_init.html b/main/xml_sau_init.html new file mode 100644 index 0000000..908153d --- /dev/null +++ b/main/xml_sau_init.html @@ -0,0 +1,179 @@ + + + + + + + +CMSIS-Zone: /rzone/resources/sau_init element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /rzone/resources/sau_init element
    +
    +
    +

    The /rzone/resources/sau_init element specifies fixed Secure Attribute Unit (SAU) settings required for this system, for example a configuration that is required to access peripherals.

    + + + + + + + + + +
    Parent Element Element Chain
    resources /rzone/resources element
    Child Elements Description Type Occurrence
    region Region settings for the SAU. complexType 1..*
    +

    +/rzone/sau_init/region element

    +

    The /rzone/sau_init/region element contains the region setting for SAU initialization.

    + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    sau_init /rzone/resources/sau_init element
    Attributes Description Type Use
    Pname The processor that requires this setting. If omitted all processors get this setting. xs:string optional
    start The logical start address for the region. NonNegativeInteger required
    size The size for the region. NonNegativeInteger required
    security Security attributes for this memory region. SecurityType optional
    info Brief description of region setting (for comments in source code). xs:string optional
    +
    +
    +
    +
    + + + + diff --git a/main/xml_zones.html b/main/xml_zones.html new file mode 100644 index 0000000..98f0120 --- /dev/null +++ b/main/xml_zones.html @@ -0,0 +1,248 @@ + + + + + + + +CMSIS-Zone: /azone/zones element + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    /azone/zones element
    +
    +
    +

    The /azone/zones element contains all zone definitions.

    +

    Example

    <zones>
    +
    <zone name="Network">
    +
    <assign region="RAM1" block="Network" access="rw"/>
    +
    <assign group="UART" peripheral="USART0" access="rw" />
    +
    :
    +
    </zone>
    +
    :
    +
    </zones>
    +

     

    + + + + + + + + + +
    Parent Element Element Chain
    azone /azone element
    Child Elements Description Type Occurrence
    zone Zone definitions complexType 1..*
    +

    +/azone/zones/zone element

    +

    The /azone/zones/zone element defines the name of a zone.

    + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    zones /azone/zones element
    Attributes Description Type Use
    name The unique name for this zone. xs:string required
    info Brief description of the zone. xs:string optional
    Pname The processor that can access the memory and peripherals of this zone. If omitted all processors of the system have access. xs:string optional
    security Security level for code execution in this zone. SecurityType optional
    privilege Privilege level for code execution in this zone. PrivilegeType optional
    class Class information for execution zones. xs:string optional
    Child Elements Description Type Occurrence
    assign Resource Assignments complexType 1..*
    +

    +/azone/zones/zone/assign element

    +

    The /azone/zones/zone/assign element defines the resource assignments of that zone.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    zone /azone/zones/zone element
    Attributes Description Type Use
    memory Name of a memory region or memory partition. xs:string optional
    group Name of a peripheral group. xs:string optional
    peripheral Name of a peripheral. xs:string optional
    access Access permissions for this assignment. AccessType optional
    Pname The processor that can access this assignment. If omitted the processors of the zone have access. xs:string optional
    security Security attributes for this assignment. SecurityType optional
    privilege Privilege level for this assignment. PrivilegeType optional
    uninit "1" specifies that this region is not zero initialized during startup. Default value is "0". xs:boolean optional
    dma "1" specifies that this region is accessed by a DMA controller. Default value is "0". xs:boolean optional
    Child Elements Description Type Occurrence
    interrupt Interrupt assignments for peripherals. complexType 0..*
    +

    +/azone/zones/zone/assign/interrupt element

    +

    The /azone/zones/zone/assign/interrupt element defines the interrupt execution for a peripheral.

    + + + + + + + + + + + + + + + + + +
    Parent Element Element Chain
    assign /azone/zones/zone/assign element
    Attributes Description Type Use
    name The name of the interrupt. xs:string required
    value The interrupt number. xs:string required
    info Brief description for this setting. xs:string optional
    +
    security Security setting for the interrupt. SecurityType optional
    privilege Privilege level setting for the interrupt. PrivilegeType optional
    +
    +
    +
    + + + + diff --git a/main/zTCLI.html b/main/zTCLI.html new file mode 100644 index 0000000..133b24b --- /dev/null +++ b/main/zTCLI.html @@ -0,0 +1,168 @@ + + + + + + + +CMSIS-Zone: Command Line Mode + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Command Line Mode
    +
    +
    +

    As the .rzone and .azone files are XML based, it is possible to create or modify the files in external tools without using the Interactive Mode. To generate output files the CMSIS-Zone Utility can be started in headless mode. The command line format is:

    eclipsec.exe -noSplash -consoleLog --launcher.suppressErrors -application com.arm.cmsis.zone.ui.headlessgen -azone FILENME.azone -ftl FTL_DIR -ftl_gen FTL_GEN_DIR
    +

    Where

    + + + + + + + + + + + + + + + + + + + +
    Parameter Description Required
    -noSplash Suppresses Eclipse's splash screen [required]
    -launcher.suppressErrors Suppresses error dialog [optional]
    -consoleLog Suppresses diagnostic messages [optional]
    -application com.arm.cmsis.zone.ui.headlessgen Specifies the plug-in to be called [required]
    -azone FILNAME.azone Specifies the .azone file to be processed [required]
    -ftl FTL_DIR Relative or absolute directory with templates to process [optional - by default, ftl directory under the azone's file path is used]
    -ftl_gen FTL_GEN_DIR Relative or absolute output directory to write generated files [optional - by default, ftl_gen directory under the azone's file path is used]
    -help Shows command line parameter information [optional]
    +
    +
    +
    + + + + diff --git a/main/zTELPC55.html b/main/zTELPC55.html new file mode 100644 index 0000000..af629b0 --- /dev/null +++ b/main/zTELPC55.html @@ -0,0 +1,279 @@ + + + + + + + +CMSIS-Zone: NXP LPC55S69 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    NXP LPC55S69
    +
    +
    +

    This single processor demo application shows how to do the TrustZone Partitioning. It is split into a secure and non-secure part. Using CMSIS-Zone, it generates:

      +
    • A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).
    • +
    • Memory protection controller (MPC) setup.
    • +
    • Peripheral protection controller (PPC) and related interrupt setup.
    • +
    • Secure attribution unit (SAU) setup.
    • +
    +

    The application itself shows how to implement calls between the secure and the non-secure part.

    +

    +Using the CMSIS-Zone project

    +
      +
    • Import the project "Examples\LPC55S69\Zone" into the CMSIS-Zone utility
    • +
    • Open the LPC55S69.azone file
    • +
    • Generate the related output files
    • +
    +

    The LPC55S69.azone file of that project has the following configuration settings:

      +
    • Added the zones hello_world_s and hello_worls_ns
    • +
    • Created the memory regions CODE_NS, Config, CODE_S, Veneer, DATA_NS, and DATA_S
    • +
    • Selected various memory regions and peripherals for using in the different zones:
      + +
      +
    • +
    +

    The zones use different Flash and SRAM regions for code and data, but share Flash configuration registers. Peripherals, such as the system and IO configuration, as well as an UART are available in the secure world only. To generate the output, click on the Generate button in the Zone Editor tool bar. This creates the following files in the ftl_gen directory:

    + + + + + + + + + + + + + + + + + + + +
    Template File Generated File Description
    dump_fzone.txt.ftl dump_fzone.txt Contains the complete model
    helper.ftlinc N/A Helper template file with FTL functions.
    mem_layout.h.ftl mem_layout.h Header file that contains the memory region definitions, for example for the linker scatter file.
    scatter_ns.sct.ftl scatter_ns.sct Example scatter file for the non-secure zone (currently not used in MDK).
    scatter_s.sct.ftl scatter_s.sct Example scatter file for the secure zone (currently not used in MDK).
    tzm_config_mpc.c.ftl tzm_config_mpc.c Setup of the memory protection controller (MPC).
    tzm_config_ppc.c.ftl tzm_config_ppc.c Setup of the peripheral protection controller (PPC).
    tzm_config_sau.c.ftl tzm_config_sau.c Configuration of the secure attribution unit (SAU) and the NVIC interrupt assignment.
    +

    These files can be used in any IDE to create the final application. In the following, the usage in Arm Keil MDK is described.

    +

    +Using the MDK project

    +

    The example project can be loaded, built and debugged in µVision by performing the following steps:

    +
      +
    1. Navigate to Examples/LPC55S69/MDK
    2. +
    3. Open the multi-project workspace hello_world.uvmpw
    4. +
    5. Optional: Update the generated files by executing the copy_gen.bat scripts in hello_world_s\mdk and hello_world_ns\mdk folders.
    6. +
    7. Run the batch build in MDK. Both projects, hello_world_s and hello_world_ns need to be compiled in order.
    8. +
    9. Set hello_world_s as active project.
    10. +
    11. Connect the LPC55S69-EVK using a Micro-USB cable at Debug Link (P6).
    12. +
    13. Open Options for Target - Debug and make sure that the CMSIS-DAP ARMv8-M Debugger is selected and the LPC-LINK2 is used.
    14. +
    15. Optional: Open a serial terminal program (i.e. PuTTY) on the virtual serial port provided in parallel to the debugger (e.g. USB Serial Device). Configure the port to 115200/8N1.
    16. +
    17. Launch a debug session and watch the serial console output:
      + +
      +
    18. +
    +

    +MDK project setup

    +

    The multiproject workspace contains the secure hello_world_s project and the non-secure hello_world_ns project:

    +
    + +
    +

    The projects use the files generated in CMSIS-Zone as follows:

    + + + + + + + + + + + +
    File Used in Description
    mem_layout.h hello_world_s, hello_world_ns Input for the scatter files.
    tzm_config_mpc.c hello_world_s Functions called from tzm_config.c
    tzm_config_ppc.c hello_world_s Functions called from tzm_config.c
    tzm_config_sau.c hello_world_s Functions called from tzm_config.c
    +

    The scatter files hello_world_s.sct and hello_world_ns.sct are based on the original scatter files from NXP and are using a preinclude to mem_layout.h to get the information about the different memory regions.

    +
    Note
    If you want to learn more about the general project layout for an Armv8-M project using TrustZone, refer to Application Note 291.
    +

    +hello_world_s.sct

    +

    As explained previously, the #defines in mem_layout.h can be used to create generic scatter files that are easy to update once changes in the CMSIS-Zone project happen. Using the mem_layout.h file from CMSIS-Zone, the following scatter file is used in the secure hello_world project:

    +
    ; Use Arm compiler 6 to pre-process the scatter file and pull in the defines from the mem_layout.h file:
    +
    #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m33 -I../ -xc
    +
    +
    #include "mem_layout.h"
    +
    +
    ; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------
    +
    +
    ;<h> Stack Configuration
    +
    ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
    +
    ;</h>
    +
    #define STACK_SIZE 0x400
    +
    +
    ;<h> Heap Configuration
    +
    ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
    +
    ;</h>
    +
    #define HEAP_SIZE 0xC00
    +
    +
    ; *-------------- <<< end of configuration section >>> -----------------------
    +
    +
    LR_CODE_S REGION_CODE_S_START REGION_CODE_S_SIZE {
    +
    ER_CODE_S REGION_CODE_S_START REGION_CODE_S_SIZE {
    +
    (RESET,+FIRST)
    +
    (InRoot$$Sections)
    +
    .ANY (+RO, +XO)
    +
    }
    +
    RW_DATA_S REGION_DATA_S_START REGION_DATA_S_SIZE-HEAP_SIZE-STACK_SIZE {
    +
    .ANY (+RW +ZI)
    +
    }
    +
    #if HEAP_SIZE>0
    +
    ARM_LIB_HEAP REGION_DATA_S_START+REGION_DATA_S_SIZE-HEAP_SIZE-STACK_SIZE EMPTY HEAP_SIZE {
    +
    }
    +
    #endif
    +
    #if STACK_SIZE>0
    +
    ARM_LIB_STACK REGION_DATA_S_START+REGION_DATA_S_SIZE-STACK_SIZE EMPTY STACK_SIZE {
    +
    }
    +
    #endif
    +
    }
    +
    LR_VENEER REGION_VENEER_START REGION_VENEER_SIZE {
    +
    ER_VENEER REGION_VENEER_START REGION_VENEER_SIZE {
    +
    *(Veneer$$CMSE)
    +
    }
    +
    }
    +

    +TrustZone Setup at Startup

    +

    During the system initialization, the function SystemInitHook is called. This is used when application specific code needs to be called as close to the reset entry as possible. In this example, this function calls BOARD_InitTrustZone, which calls the three TZM_Config_* functions:

    +
    + +
    +
    +
    +
    + + + + diff --git a/main/zTEM2351.html b/main/zTEM2351.html new file mode 100644 index 0000000..0a24e91 --- /dev/null +++ b/main/zTEM2351.html @@ -0,0 +1,259 @@ + + + + + + + +CMSIS-Zone: Nuvoton NuMicro M2351 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Nuvoton NuMicro M2351
    +
    +
    +

    This single processor demo application shows how to do the TrustZone Partitioning. It is split into a secure and non-secure part. Some peripherals are assigned to either the secure or the non-secure zone to demonstrate the generation of PPC setup and interrupt configuration in the partition.h template. Using CMSIS-Zone, it generates:

      +
    • A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).
    • +
    • Secure attribution unit (SAU) setup.
    • +
    +

    The application itself shows how to implement calls between the secure and the non-secure part and how to use this to blink an LED.

    +

    +Using the CMSIS-Zone project

    +
      +
    • Import the project "Examples\M2351\Zone" into the CMSIS-Zone utility
    • +
    • Open the M2351.azone file
    • +
    • Generate the related output files
    • +
    +

    The M2351.azone file of that project has the following configuration settings:

    +

    The zones use different Flash and SRAM regions for code and data. To generate the output, click on the Generate button in the Zone Editor tool bar. This creates the following files in the ftl_gen directory:

    + + + + + + + + + + + + + +
    Template File Generated File Description
    helper.ftlinc N/A Helper template file with FTL functions.
    mem_layout.h.ftl mem_layout.h Header file that contains the memory region definitions, for example for the linker scatter file.
    partition_gen.h.ftl partition_gen.h Configuration of the secure attribution unit (SAU) and the NVIC interrupt assignment.
    scatter_ns.sct.ftl scatter_ns.sct Example scatter file for the non-secure zone.
    scatter_s.sct.ftl scatter_s.sct Example scatter file for the secure zone.
    +

    These files can be used in any IDE to create the final application. In the following, the usage in Arm Keil MDK is described.

    +

    +Using the MDK project

    +

    The example project can be loaded, built and debugged in µVision by performing the following steps:

    +
      +
    1. Navigate to Examples/M2351/MDK
    2. +
    3. Open the multi-project workspace TrustZone.uvmpw
    4. +
    5. Optional: Update the generated files by executing the copy_gen.bat scripts in Secure\mdk and NonSecure\mdk folders.
    6. +
    7. Run the batch build in MDK. Both projects, Secure and NonSecure need to be compiled in order.
    8. +
    9. Set Secure as active project.
    10. +
    11. Connect the NuMaker-PFM-M2351 board using a Micro-USB cable at ICEJ.
    12. +
    13. Open Options for Target - Debug and make sure that the NULink Debugger is selected.
    14. +
    15. Launch a debug session and watch LEDG and LEDY blinking.
    16. +
    +

    +MDK project setup

    +

    The multiproject workspace contains the Secure project and the NonSecure project:

    +
    + +
    +

    The projects use the files generated in CMSIS-Zone as follows:

    + + + + + + + + + + + +
    File Used in Description
    mem_layout.h Secure, NonSecure Input for the scatter files.
    partition_gen.h Secure Configuration of the secure attribution unit (SAU) and the NVIC interrupt assignment.
    scatter_ns.sct NonSecure Scatter file for non-secure zone (initally based on generated file).
    scatter_s.sct Secure Scatter file for secure zone (initally based on generated file).
    +

    The scatter files scatter_s.sct and scatter_ns.sct are using a preinclude to mem_layout.h to get the information about the different memory regions.

    +
    Note
    If you want to learn more about the general project layout for an Armv8-M project using TrustZone, refer to Application Note 291.
    +

    +scatter_s.sct

    +

    As explained previously, the #defines in mem_layout.h can be used to create generic scatter files that are easy to update once changes in the CMSIS-Zone project happen. Using the mem_layout.h file from CMSIS-Zone, the following scatter file is used in the Sections project:

    +
    #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m23 -I../ -xc
    +
    +
    #include "mem_layout.h"
    +
    +
    ; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------
    +
    +
    ;<h> Stack Configuration
    +
    ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
    +
    ;</h>
    +
    #define STACK_SIZE 0x400
    +
    +
    ;<h> Heap Configuration
    +
    ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
    +
    ;</h>
    +
    #define HEAP_SIZE 0xC00
    +
    +
    ; *-------------- <<< end of configuration section >>> -----------------------
    +
    LR_CODE_S REGION_CODE_S_START REGION_CODE_S_SIZE {
    +
    ER_CODE_S REGION_CODE_S_START REGION_CODE_S_SIZE {
    +
    (RESET,+FIRST)
    +
    (InRoot$$Sections)
    +
    .ANY (+RO +XO)
    +
    }
    +
    RW_DATA_S REGION_DATA_S_START REGION_DATA_S_SIZE-HEAP_SIZE-STACK_SIZE {
    +
    .ANY (+RW +ZI)
    +
    }
    +
    #if HEAP_SIZE>0
    +
    ARM_LIB_HEAP REGION_DATA_S_START+REGION_DATA_S_SIZE-HEAP_SIZE-STACK_SIZE EMPTY HEAP_SIZE {
    +
    }
    +
    #endif
    +
    #if STACK_SIZE>0
    +
    ARM_LIB_STACK REGION_DATA_S_START+REGION_DATA_S_SIZE-STACK_SIZE EMPTY STACK_SIZE {
    +
    }
    +
    #endif
    +
    }
    +
    LR_VENEER REGION_VENEER_START REGION_VENEER_SIZE {
    +
    ER_VENEER REGION_VENEER_START REGION_VENEER_SIZE {
    +
    *(Veneer$$CMSE)
    +
    }
    +
    }
    +
    +
    +
    + + + + diff --git a/main/zTEMCB400.html b/main/zTEMCB400.html new file mode 100644 index 0000000..514e726 --- /dev/null +++ b/main/zTEMCB400.html @@ -0,0 +1,264 @@ + + + + + + + +CMSIS-Zone: Keil MCBSTM32F400 Evaluation Board + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Keil MCBSTM32F400 Evaluation Board
    +
    +
    +

    This single processor demo application shows how to do the MPU Protection. Using CMSIS-Zone, it generates:

      +
    • A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).
    • +
    • The MPU configuration table source and header files. These contain MPU register settings used during thread switching to update accessible memory regions.
    • +
    +

    The application itself shows how to isolate network stack threads from the user application.

    +

    +Using the CMSIS-Zone project

    +
      +
    • Import the project "Examples\MCBSTM32F400\Zone" into the CMSIS-Zone utility
    • +
    • Open the MCBSTM32F400.azone file
    • +
    • Generate the related output files
    • +
    +

    The MCBSTM32F400.azone file of that project has the following configuration settings:

      +
    • Project mode is set to Execution.
    • +
    • Added the zones Net, Main, RTX, Blinky, Timer, Idle
    • +
    • Created the memory regions CODE, RAM_SHARED, RAM_NET, RAM_MAIN, RAM_PRIVILEGED, RAM_EVR, RAM_BSD, RAM_LED, RAM_ADC, RAM_TIMER, and RAM_IDLE
    • +
    • Selected various memory regions and peripherals for using in the different zones:
      + +
      +
    • +
    +

    The zones use common Flash region for all the application code but different SRAM regions to segregate thread data. To generate the output, click on the Generate button in the Zone Editor tool bar. This creates the following files in the ftl_gen directory:

    + + + + + + + + + + + + + + + +
    Template File Generated File Description
    dump_fzone.txt.ftl dump_fzone.txt Contains the complete model
    helper.ftlinc N/A Helper template file with FTL functions.
    mem_layout.h.ftl mem_layout.h Header file that contains the memory region definitions, for example for the linker scatter file.
    mputable.c.ftl mputable.c MPU Table data definition.
    mputable.h.ftl mputable.h MPU Table data declaration.
    scatter.sct.ftl scatter.sct Example scatter file for MPU protection.
    +

    These files can be used in any IDE to create the final application. In the following, the usage in Arm Keil MDK is described.

    +

    +Using the MDK project

    +

    The example project can be loaded, built and debugged in µVision by performing the following steps:

    +
      +
    1. Navigate to Examples/MCBSTM32F400/MDK
    2. +
    3. Open the project workspace Blinky_Net.uvprojx
    4. +
    5. Optional: Update the generated files by executing the copy_gen.bat script.
    6. +
    7. Run the build in MDK.
    8. +
    +

    +MDK project setup

    +

    The projects Blinky_Net use the files generated in CMSIS-Zone as follows:

    + + + + + + + + + + + +
    File Description
    mem_layout.h Input for the linker scatter files.
    mputable.c MPU Table data definition.
    mputable.h MPU Table data declaration.
    scatter.sct Initial template for scatter file.
    +

    +scatter.sct

    +

    As explained previously, the #defines in mem_layout.h can be used to create generic scatter files that are easy to update once changes in the CMSIS-Zone project happen. Using the mem_layout.h file from CMSIS-Zone, the following scatter file is used in the Blinky_Net project, which is based on the generated scatter file template (scatter.sct):

    +
    #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m3 -xc
    +
    +
    #include "mem_layout.h"
    +
    +
    LR_CODE REGION_CODE_START REGION_CODE_SIZE {
    +
    ER_CODE REGION_CODE_START REGION_CODE_SIZE {
    +
    .o (RESET,+FIRST)
    +
    (InRoot$$Sections)
    +
    .ANY (+RO, +XO)
    +
    }
    +
    RW_RAM_PRIVILEGED REGION_RAM_PRIVILEGED_START REGION_RAM_PRIVILEGED_SIZE {
    +
    Net_Config.o (.bss.os.*.cb)
    +
    .ANY (+RW +ZI)
    +
    }
    +
    RW_RAM_SHARED REGION_RAM_SHARED_START REGION_RAM_SHARED_SIZE {
    +
    system_stm32f4xx.o (.data.SystemCoreClock)
    +
    ; *.o (.data.shared)
    +
    .o (.bss.shared)
    +
    }
    +
    RW_RAM_EVR REGION_RAM_EVR_START UNINIT REGION_RAM_EVR_SIZE {
    +
    EventRecorder.o (+ZI)
    +
    }
    +
    RW_RAM_BSD REGION_RAM_BSD_START REGION_RAM_BSD_SIZE {
    +
    bsd.o (+RW +ZI)
    +
    }
    +
    RW_RAM_NET REGION_RAM_NET_START REGION_RAM_NET_SIZE {
    +
    *Net*.lib (+RW +ZI)
    +
    Net_Config.o (.bss*)
    +
    emac_stm32f4xx.o (+RW +ZI)
    +
    phy_ksz8081rna.o (+RW +ZI)
    +
    phy_st802rt1.o (+RW +ZI)
    +
    }
    +
    RW_RAM_TIMER REGION_RAM_TIMER_START REGION_RAM_TIMER_SIZE {
    +
    timer.o (+RW +ZI)
    +
    .o (.bss.os.thread.stack.rtx.timer)
    +
    }
    +
    RW_RAM_ADC REGION_RAM_ADC_START REGION_RAM_ADC_SIZE {
    +
    adc.o (+RW +ZI)
    +
    adc_mcbstm32f400.o (+RW +ZI)
    +
    }
    +
    RW_RAM_LED REGION_RAM_LED_START REGION_RAM_LED_SIZE {
    +
    led.o (+RW +ZI)
    +
    }
    +
    RW_RAM_MAIN REGION_RAM_MAIN_START REGION_RAM_MAIN_SIZE {
    +
    app.o (+RW +ZI)
    +
    }
    +
    RW_RAM_IDLE REGION_RAM_IDLE_START REGION_RAM_IDLE_SIZE {
    +
    RTX_Config.o (+RW +ZI)
    +
    .o (.bss.os.thread.stack.rtx.idle)
    +
    }
    +
    }
    +

    The data segments of segregated software components have been allocated to distinct memory regions.

    +
    +
    +
    + + + + diff --git a/main/zTEMuscaA1.html b/main/zTEMuscaA1.html new file mode 100644 index 0000000..2efa605 --- /dev/null +++ b/main/zTEMuscaA1.html @@ -0,0 +1,183 @@ + + + + + + + +CMSIS-Zone: Arm Musca-A1 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Arm Musca-A1
    +
    +
    +

    This example shows how to do the TrustZone Partitioning. It is split into a secure and non-secure part. Using CMSIS-Zone, it generates:

      +
    • A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).
    • +
    • Memory protection controller (MPC) setup.
    • +
    • Peripheral protection controller (PPC) and related interrupt setup.
    • +
    • Secure attribution unit (SAU) setup.
    • +
    +

    +Using the CMSIS-Zone project

    +
      +
    • Import the project "Examples\Musca-A1\Zone" into the CMSIS-Zone utility
    • +
    • Open the Musca-A1.azone file
    • +
    • Generate the related output files
    • +
    +

    The Musca-A1.azone file of that project has the following configuration settings:

      +
    • Added the zones SecureFW and NonsecureFW
    • +
    • Created the memory regions SecureRAM, NonsecureRAM, ScureCode, Veneer, and NonsecureCode
    • +
    • Selected various memory regions and peripherals for using in the different zones.
    • +
    +
    + +
    +

    The zones use different Flash and SRAM regions for code and data. Peripherals, such as the system and IO configuration, as well as UART0 are available in the secure world only. To generate the output, click on the Generate button in the Zone Editor tool bar. This creates the following files in the ftl_gen directory:

    + + + + + + + + + + + + + +
    Template File Generated File Description
    dump_fzone.txt.ftl dump_fzone.txt Contains the complete model
    helper.ftlinc N/A Helper template file with FTL functions.
    mem_layout.h.ftl mem_layout.h Header file that contains the memory region definitions, for example for the linker scatter file.
    tz_sau_nvic.c.ftl tz_sau_nvic.c Configuration of the secure attribution unit (SAU) and the NVIC interrupt assignment.
    tz_mpc_ppc.c.ftl tz_mpc_ppc.c Configuration of the memory (MPC) and peripheral (PPC) protection controller.
    +

    These files can be used in any IDE to create the final application.

    +
    +
    +
    + + + + diff --git a/main/zTEMuscaS1.html b/main/zTEMuscaS1.html new file mode 100644 index 0000000..95ae665 --- /dev/null +++ b/main/zTEMuscaS1.html @@ -0,0 +1,183 @@ + + + + + + + +CMSIS-Zone: Arm Musca-S1 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Arm Musca-S1
    +
    +
    +

    This example shows how to do the TrustZone Partitioning. It is split into a secure and non-secure part. Using CMSIS-Zone, it generates:

      +
    • A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).
    • +
    • Memory protection controller (MPC) setup.
    • +
    • Peripheral protection controller (PPC) and related interrupt setup.
    • +
    • Secure attribution unit (SAU) setup.
    • +
    +

    +Using the CMSIS-Zone project

    +
      +
    • Import the project "Examples\Musca-AS\Zone" into the CMSIS-Zone utility
    • +
    • Open the Musca-AS.azone file
    • +
    • Generate the related output files
    • +
    +

    The Musca-AS.azone file of that project has the following configuration settings:

      +
    • Added the zones SecureFW and NonsecureFW
    • +
    • Created the memory regions SecureRAM, NonsecureRAM, ScureCode, Veneer, and NonsecureCode
    • +
    • Selected various memory regions and peripherals for using in the different zones.
    • +
    +
    + +
    +

    The zones use different Flash and SRAM regions for code and data. Peripherals, such as the system and IO configuration, as well as UART0 are available in the secure world only. To generate the output, click on the Generate button in the Zone Editor tool bar. This creates the following files in the ftl_gen directory:

    + + + + + + + + + + + + + +
    Template File Generated File Description
    dump_fzone.txt.ftl dump_fzone.txt Contains the complete model
    helper.ftlinc N/A Helper template file with FTL functions.
    mem_layout.h.ftl mem_layout.h Header file that contains the memory region definitions, for example for the linker scatter file.
    tz_sau_nvic.c.ftl tz_sau_nvic.c Configuration of the secure attribution unit (SAU) and the NVIC interrupt assignment.
    tz_mpc_ppc.c.ftl tz_mpc_ppc.c Configuration of the memory (MPC) and peripheral (PPC) protection controller.
    +

    These files can be used in any IDE to create the final application.

    +
    +
    +
    + + + + diff --git a/main/zTESAML11.html b/main/zTESAML11.html new file mode 100644 index 0000000..d41144a --- /dev/null +++ b/main/zTESAML11.html @@ -0,0 +1,193 @@ + + + + + + + +CMSIS-Zone: Microchip SAML11 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Microchip SAML11
    +
    +
    +

    This single processor demo application shows how to do the TrustZone Partitioning. It is split into a secure and non-secure part. Using CMSIS-Zone, it generates:

      +
    • A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).
    • +
    • The SystemIsolation_Config.c header file that contains memory protection controller (MPC) and peripheral protection controller (PPC) and related interrupt setup.
    • +
    • The partition_gen.h header file that contains the secure attribution unit (SAU) setup and the NVIC configuration for secure/non-secure.
    • +
    +

    The application itself shows how to implement calls between the secure and the non-secure part.

    +

    +Using the CMSIS-Zone project

    +
      +
    • Import the project "Examples\SAML11\Zone" into the CMSIS-Zone utility
    • +
    • Open the SAML11.azone file
    • +
    • Generate the related output files
    • +
    +

    The SAML11.azone file of that project has the following configuration settings:

      +
    • Added the zones sApp and nsApp
    • +
    • Created the memory regions APP_NS, APP_S, APP_NSC, DATA_NS, DATA_S, RAM_NS, and RAM_NS
    • +
    • Selected various memory regions and peripherals for using in the different zones:
      + +
      +
    • +
    +

    The zones use different Flash and SRAM regions for code and data. To generate the output, click on the Generate button in the Zone Editor tool bar. This creates the following files in the ftl_gen directory:

    + + + + + + + + + + + + + + + +
    Template File Generated File Description
    dump_fzone.txt.ftl dump_fzone.txt Contains the complete model
    flash.dbgconf.ftl flash.dbgconf Flash algorithm configuration for security settings
    flash.dbgconf.lst.ftl flash.dbgconf.lst Flash algorithm configuration for security settings
    helper.ftlinc N/A Helper template file with FTL functions.
    scatter_ns.sct.ftl scatter_ns.sct Example scatter file for non-secure zone.
    scatter_s.sct.ftl scatter_s.sct Example scatter file for secure zone.
    +

    These files can be used in any IDE to create the final application. In the following, the usage in Arm Keil MDK is described.

    +

    +Using the MDK project

    +

    The example project can be loaded, built and debugged in µVision by performing the following steps:

    +
      +
    1. Navigate to Examples/SAML11/MDK
    2. +
    3. Open the multi-project workspace NoRTOS.uvmpw
    4. +
    5. Run the batch build in MDK. Both projects, sApp and nsApp need to be compiled in order.
    6. +
    +
    +
    +
    + + + + diff --git a/main/zTESTM32L5.html b/main/zTESTM32L5.html new file mode 100644 index 0000000..cdcde32 --- /dev/null +++ b/main/zTESTM32L5.html @@ -0,0 +1,266 @@ + + + + + + + +CMSIS-Zone: STMicroelectronics STM32L5 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    STMicroelectronics STM32L5
    +
    +
    +

    This single processor demo application shows how to do the TrustZone Partitioning. It is split into a secure and non-secure part. Using CMSIS-Zone, it generates:

      +
    • A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).
    • +
    • The SystemIsolation_Config.c header file that contains memory protection controller (MPC) and peripheral protection controller (PPC) and related interrupt setup.
    • +
    • The partition_gen.h header file that contains the secure attribution unit (SAU) setup and the NVIC configuration for secure/non-secure.
    • +
    +

    The application itself shows how to implement calls between the secure and the non-secure part.

    +

    +Using the CMSIS-Zone project

    +
      +
    • Import the project "Examples\STM32L5\Zone" into the CMSIS-Zone utility
    • +
    • Open the STM32L5.azone file
    • +
    • Generate the related output files
    • +
    +

    The STM32L5.azone file of that project has the following configuration settings:

    +

    The zones use different Flash and SRAM regions for code and data, but share Flash configuration registers. Peripherals, such as the system and IO configuration, as well as an UART are available in the secure world only. To generate the output, click on the Generate button in the Zone Editor tool bar. This creates the following files in the ftl_gen directory:

    + + + + + + + + + + + + + + + + + +
    Template File Generated File Description
    dump_fzone.txt.ftl dump_fzone.txt Contains the complete model
    helper.ftlinc N/A Helper template file with FTL functions.
    mem_layout.h.ftl mem_layout.h Header file that contains the memory region definitions, for example for the linker scatter file.
    partition_gen.h.ftl partition_gen.h Configuration of the secure attribution unit (SAU) and the NVIC interrupt assignment.
    SystemIsolation_Config.c.ftl SystemIsolation_Config.c Setup of the MPC and PPC.
    scatter_ns.sct.ftl scatter_ns.sct Example scatter file for non-secure zone.
    scatter_s.sct.ftl scatter_s.sct Example scatter file for secure zone.
    +

    These files can be used in any IDE to create the final application. In the following, the usage in Arm Keil MDK is described.

    +

    +Using the MDK project

    +

    The example project can be loaded, built and debugged in µVision by performing the following steps:

    +
      +
    1. Navigate to Examples/STM32L5/MDK
    2. +
    3. Open the multi-project workspace blinky.uvmpw
    4. +
    5. Optional: Update the generated files by executing the copy_gen.bat scripts in blinky_s\mdk and blinky_ns\mdk folders.
    6. +
    7. Run the batch build in MDK. Both projects, blinky_s and blinky_ns need to be compiled in order.
    8. +
    +

    +MDK project setup

    +

    The multiproject workspace contains the secure blinky_s project and the non-secure blinky_ns project:

    +
    + +
    +

    The projects use the files generated in CMSIS-Zone as follows:

    + + + + + + + + + + + + + +
    File Used in Description
    mem_layout.h blinky_s, blinky_ns Input for the linker scatter files.
    partition_gen.h blinky_s Configuration of the secure attribution unit (SAU) and the NVIC interrupt assignment. This file is included in the partition_stm32l5xx.h header file.
    SystemIsolation_Config.c blinky_s Setup of the MPC and PPC.
    blinky_ns.sct blinky_ns Scatter file for non-secure zone (initally based on generated file).
    blinky_s.sct blinky_s Scatter file for secure zone (initally based on generated file).
    +
    Note
    If you want to learn more about the general project layout for an Armv8-M project using TrustZone, refer to Application Note 291.
    +

    +blinky_s.sct

    +

    As explained previously, the #defines in mem_layout.h can be used to create generic scatter files that are easy to update once changes in the CMSIS-Zone project happen. Using the mem_layout.h file from CMSIS-Zone, the following scatter file is used in the secure blinky project, which is based on the generated scatterf file (scatter_s.sct):

    +
    ; Use Arm compiler 6 to pre-process the scatter file and pull in the defines from the mem_layout.h file:
    +
    #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m33 -I../ -xc
    +
    +
    #include "mem_layout.h"
    +
    +
    ; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------
    +
    +
    ;<h> Stack Configuration
    +
    ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
    +
    ;</h>
    +
    #define STACK_SIZE 0x400
    +
    +
    ;<h> Heap Configuration
    +
    ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
    +
    ;</h>
    +
    #define HEAP_SIZE 0xC00
    +
    +
    ; *-------------- <<< end of configuration section >>> -----------------------
    +
    LR_CODE_S REGION_CODE_S_START REGION_CODE_S_SIZE {
    +
    ER_CODE_S REGION_CODE_S_START REGION_CODE_S_SIZE {
    +
    (RESET,+FIRST)
    +
    (InRoot$$Sections)
    +
    .ANY (+RO +XO)
    +
    }
    +
    RW_DATA_S REGION_DATA_S_START REGION_DATA_S_SIZE-HEAP_SIZE-STACK_SIZE {
    +
    .ANY (+RW +ZI)
    +
    }
    +
    #if HEAP_SIZE>0
    +
    ARM_LIB_HEAP REGION_DATA_S_START+REGION_DATA_S_SIZE-HEAP_SIZE-STACK_SIZE EMPTY HEAP_SIZE {
    +
    }
    +
    #endif
    +
    #if STACK_SIZE>0
    +
    ARM_LIB_STACK REGION_DATA_S_START+REGION_DATA_S_SIZE-STACK_SIZE EMPTY STACK_SIZE {
    +
    }
    +
    #endif
    +
    }
    +
    LR_Veneer REGION_VENEER_START REGION_VENEER_SIZE {
    +
    ER_Veneer REGION_VENEER_START REGION_VENEER_SIZE {
    +
    *(Veneer$$CMSE)
    +
    }
    +
    }
    +

    The partition_gen.h header file contains Configuration Wizard annotation so that it can be viewed in a graphical window:

    +
    + +
    +
    +
    +
    + + + + diff --git a/main/zTExamples.html b/main/zTExamples.html new file mode 100644 index 0000000..1c99b3e --- /dev/null +++ b/main/zTExamples.html @@ -0,0 +1,179 @@ + + + + + + + +CMSIS-Zone: Examples + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Examples
    +
    +
    +

    The following projects are available in the CMSIS-Zone repository on GitHub: https://github.com/ARM-software/CMSIS-Zone/tree/main/Examples. These examples demonstrate the usage of the CMSIS-Zone utility.

    + + + + + + + + + + + + + + + + + +
    Example Description
    Arm Musca-A1 Musca A1 (Cortex-M33) project with TrustZone setup
    Arm Musca-S1 Musca S1 (Cortex-M33) project with TrustZone setup
    Nuvoton NuMicro M2351 Single processor Cortex-M23 project with TrustZone setup
    NXP LPC55S69 Single processor Cortex-M33 project with TrustZone setup
    STMicroelectronics STM32L5 Single processor Cortex-M33 project with TrustZone setup
    Microchip SAML11 Single processor Cortex-M23 project with TrustZone setup
    Keil MCBSTM32F400 Evaluation Board Single processor Cortex-M3 project with MPU setup
    +

    +Import examples

    +

    Import the examples to Eclipse using the following flow:

      +
    • Go to File - Import and select General - Existing Projects into Workspace:
    • +
    +
    + +
    +

    Click Next.

    +

    Browse to the root directory, for example "Examples\LPC55S69\Zone", and select the project that you want to import. The import projects window shows the available projects:

    +
    + +
    +

    Click Finish. The project is imported and opened in the Project Explorer.

    +
    +
    +
    + + + + diff --git a/main/zTExamples.js b/main/zTExamples.js new file mode 100644 index 0000000..33aa318 --- /dev/null +++ b/main/zTExamples.js @@ -0,0 +1,43 @@ +var zTExamples = +[ + [ "Import examples", "zTExamples.html#zTExImport", null ], + [ "Arm Musca-A1", "zTEMuscaA1.html", [ + [ "Using the CMSIS-Zone project", "zTEMuscaA1.html#zTEMuscaA1_Eclipse", null ] + ] ], + [ "Arm Musca-S1", "zTEMuscaS1.html", [ + [ "Using the CMSIS-Zone project", "zTEMuscaS1.html#zTEMuscaS1_Eclipse", null ] + ] ], + [ "Nuvoton NuMicro M2351", "zTEM2351.html", [ + [ "Using the CMSIS-Zone project", "zTEM2351.html#zTEM2351_Eclipse", null ], + [ "Using the MDK project", "zTEM2351.html#zTEM2351_MDK", null ], + [ "MDK project setup", "zTEM2351.html#zTEM2351_MDK_Setup", [ + [ "scatter_s.sct", "zTEM2351.html#zTEM2351_hwsScatter", null ] + ] ] + ] ], + [ "NXP LPC55S69", "zTELPC55.html", [ + [ "Using the CMSIS-Zone project", "zTELPC55.html#zTELPC55_Eclipse", null ], + [ "Using the MDK project", "zTELPC55.html#zTELPC55_MDK", null ], + [ "MDK project setup", "zTELPC55.html#zTELPC55_MDK_Setup", [ + [ "hello_world_s.sct", "zTELPC55.html#zTELPC55_hwsScatter", null ], + [ "TrustZone Setup at Startup", "zTELPC55.html#zTELPC55_TZSetup", null ] + ] ] + ] ], + [ "STMicroelectronics STM32L5", "zTESTM32L5.html", [ + [ "Using the CMSIS-Zone project", "zTESTM32L5.html#zTESTM32L5_Eclipse", null ], + [ "Using the MDK project", "zTESTM32L5.html#zTESTM32L5_MDK", null ], + [ "MDK project setup", "zTESTM32L5.html#zTESTM32L5_MDK_Setup", [ + [ "blinky_s.sct", "zTESTM32L5.html#zTESTM32L5_hwsScatter", null ] + ] ] + ] ], + [ "Microchip SAML11", "zTESAML11.html", [ + [ "Using the CMSIS-Zone project", "zTESAML11.html#zTESAML11_Eclipse", null ], + [ "Using the MDK project", "zTESAML11.html#zTESAML11_MDK", null ] + ] ], + [ "Keil MCBSTM32F400 Evaluation Board", "zTEMCB400.html", [ + [ "Using the CMSIS-Zone project", "zTEMCB400.html#zTEMCB400_Eclipse", null ], + [ "Using the MDK project", "zTEMCB400.html#zTEMCB400_MDK", null ], + [ "MDK project setup", "zTEMCB400.html#zTEMCB400_MDK_Setup", [ + [ "scatter.sct", "zTEMCB400.html#zTEMCB400_hwsScatter", null ] + ] ] + ] ] +]; \ No newline at end of file diff --git a/main/zTInteractiveMode.html b/main/zTInteractiveMode.html new file mode 100644 index 0000000..e0b0f86 --- /dev/null +++ b/main/zTInteractiveMode.html @@ -0,0 +1,315 @@ + + + + + + + +CMSIS-Zone: Interactive Mode + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Interactive Mode
    +
    +
    +

    The following section explains the interactive mode of the CMSIS-Zone Utility. The following steps are explained:

    + +

    +Create a CMSIS-Zone Project

    +

    Go to File - New - Project and select CMSIS - CMSIS-Zone Project:

    +
    + +
    +Selecting "CMSIS-Zone Project"
    +

    Click Next. In the next window, enter a Project name:

    +
    + +
    +Setting a project name
    +

    Click Next.

    +

    +Variant 1: Using an existing *.rzone file

    +

    In the next window, select Use existing resource file (*.rzone) and browse to the location of the *.rzone file:

    +
    + +
    +Path to an existing .rzone file
    +

    Click Finish. The new project is created and an empty *.azone file is added.

    +

    +Variant 2: Using the SVD file from the device family pack

    +

    In the next window, use Select device to create resource file from device description:

    +
    + +
    +Creating an .rzone file from SVD
    +

    Next, select your device from the list of installed device family packs:

    +
    + +
    +Selecting a target device
    +

    Click Finish. The new project and the *.rzone file are created and an empty *.azone file is added.

    +
    Note
    Make sure that you have set the path to your pack installation directory correctly. Go to Window -> Preferences and check the entry for the CMSIS Pack root folder (usually set to localappdata%\\Arm\\Packs:
    +
    + +
    +Path to CMSIS Pack root folder
    +

    +Memory and Peripheral Resources

    +

    The available memory can be further divided into smaller regions that are later assigned to zones, for example a zone for loader and zone for application.

    +

    For memory and peripherals properties such as access permission, privilege, and security level can be configured.

    +

    These settings can be for example used to generate source code files that configure the device at run-time.

    +

    +View memory and peripheral resources

    +

    Initially, this uses the information in the *.rzone file which defines the generic access permissions for memory and peripherals. The CMSIS-Zone Editor shows the Resource Map of the given device:

    +
    + +
    +Resource map example
    +

    Here, you can see all resources that are available on the device. You see Memory, Peripherals, ** Cores**, and Info related to the resources. Colored resources are assigned to a zone.

    +

    +Create Memory Regions

    +

    To create a new memory region, right-click on the memory that you want to divide and select Add memory region:

    +
    + +
    +Adding memory region
    +

    In the dialog a name derived from the parent memory region is provided. Change this region name as needed and specify the size. In this dialog, you change permissions, privilege, or security level for the memory region. When done, click Finish:

    +
    + +
    +Configuring new memory block
    +

    The new memory region is immediately shown in the zone map. Depending on the security level, you may be able to assign this new region only to certain zones. For example, secure memory regions cannot be assigned to a non-secure zone.

    +
    + +
    +New memory region in the project
    +

    The information about the memory regions is stored in the /azone/partition/memory element element of the *.azone file.

    +

    +Delete Memory Regions

    +

    To delete a memory region, right-click on the memory region select Delete memory region:

    +
    + +
    +Deleting a memory region
    +

    +Resource Properties

    +

    To change the properties of a resource, such as a peripheral for example, right-click the resource and select Properties:

    +
    + +
    +Selecting resource properties
    +

    Then, you can set these properties:

    +
    + +
    +Configuring resource properties
    +

    General

      +
    • Shared: the resource can be accessed by more than one zone
    • +
    • Startup: locate the vector table to this region
    • +
    • No zero init: preserve RAM content at startup
    • +
    • DMA: enable direct memory access
    • +
    +

    Permissions

      +
    • peripheral: mark this as a peripheral
    • +
    • read
    • +
    • write
    • +
    • execute
    • +
    +

    Privilege

      +
    • not specified
    • +
    • privileged
    • +
    • unprivileged
    • +
    +

    Security

      +
    • not specified
    • +
    • non-secure
    • +
    • non-secure callable
    • +
    • secure
    • +
    +

    The information about the peripherals is stored in the /azone/partition/peripheral element element of the *.azone file.

    +

    +Configure peripheral slot access rights

    +

    Peripherals can have so called slots that can be configured separately. Depending on the peripheral, the slots have different names in the Zone Editor. For example, for DMA they are called Channels:

    +
    + +
    +Configuring DMA Channels
    +

    For GPIOs, they are called Pins:

    +
    + +
    +Configuring GPIO Pins
    +

    In the dialog, you can set security and privilege levels:

    +
    + +
    +Security and privilege leves for Pins and Channels
    +

    The information about the slots is stored in the /azone/partition/peripheral/slot element element of the *.azone file.

    +

    +Zone Partitioning

    +

    Every CMSIS-Zone project consists of one or more zones. The basic flow to create zones is as follows:

      +
    • In case of multi-core devices, create a zone for each processor.
    • +
    • Then create at least one zone for each processor to be able to assign memories and peripherals. If your device contains Arm Cortex-M cores supporting TrustZone for Armv8-M, create a secure and a non-secure partition for each of these cores.
    • +
    +

    +Create Zones

    +

    To split a multi-processor system into single-processor sub-systems, you need to create new zones. Switch to the Zones tab and click the Add new zone button: ( ).

    +

    In the new window, you need to specify a name for the zone, select the applicable core, and choose the security level (secure/non-secure).

    +

    In the Musca-A1 example, a new zone called "CM33_0" was created and attached to processor core 0 without any security attribute (not specified):

    +
    + +
    +Adding new zone
    +

    Similarly, an additional zone called "CM33_1" was created and attached to processor core 1, without security attribute.

    +

    Save your settings with the Save button ( ).

    +
    Note
    Adding zones only works for the currently opened .azone file. The information about the zones is stored in the /azone/zones element element of the *.azone file.
    +

    +Generate output files

    +

    The CMSIS-Zone utility can generate files that represent the configuration of the system. These files can be used in the project source files or tool configuration files.

    +

    other toolchains for further development. The generator process creates:

      +
    • Configuration files for tool and hardware setup, that are defined by .ftl files in the project ftl directory.
    • +
    • Files that represent sub-systems (.rzone and .azone) that can be partitioned further (restart the process).
    • +
    +

    To start the generation, press the Generate button or use the menu item CMSIS Zone - Generate ( ).

    +

    Check Project Explorer to observe the changes. In the project, the generated .azone and .rzone files appear and the ftl_gen directory contains the files defined by the ftl template files:

    +
    + +
    +Output files in Project Exlporer
    +
    +
    +
    + + + + diff --git a/main/zoneFormat.html b/main/zoneFormat.html new file mode 100644 index 0000000..8839758 --- /dev/null +++ b/main/zoneFormat.html @@ -0,0 +1,272 @@ + + + + + + + +CMSIS-Zone: Zone Description Format + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Zone Description Format
    +
    +
    +

    The Zone Description Format is a tool agnostic storage format and is split into:

    +
      +
    • Resource File (*.rzone) that describes the system resources available.
    • +
    • Assignment File (*.azone) that describes the resource partitioning.
    • +
    +

    The combination of both Resource File and Assignment File can be used to create a new derived Resource File that only contains the resources available for this project. It is therefore possible to split the resources incrementally as needed.

    +

    A Resource File (*.rzone) can therefore describe:

      +
    • A complete embedded system including device with one or more processors, external memory and/or external peripheral components.
    • +
    • TrustZone definition and initial setting for Secure Attribute Unit
    • +
    • A resource partition for an independent software project (i.e. boot loader, user application, secure partition) that implement the application for the system.
    • +
    +

    An Assignment File (*.azone) allows to specify either:

      +
    • The partitioning of a system into multiple independent software projects.
    • +
    • The configuration of a Memory Protection Unit (MPU) for functional segregation of a software project.
    • +
    +
    Note
    It is impossible to use a single Assignment File for both, partitioning of software projects and MPU configuration.
    +

    +Overall XML structure

    +

    The CMSIS-Zone utility uses two XML files to store system and configuration information. The structure these XML files is described with schema files that are located in the ARM.CMSIS pack in the directory .\CMSIS\Utilities.

    + + + + + + + + + +
    File type Schema file Description
    *.rzone rzone.xsd Stores the system resources (processors, memory, peripherals) available.
    *.azone azone.xsd Stores the system partitioning which includes assignments and memory splits for a related .rzone file.
    .fzone fzone.xsd CMSIS-Zone data input file for FreeMarker as explained in Generator Data Model.
    +
    Note
    It is important to understand the relationship between *.rzone and *.azone files. While the *.rzone file contains all the information about the available resources in a system or sub-system, the *.azone file contains all the information about the system partitioning. If the *.rzone file changes (for example because the partitioning of a sub-system has changed), you will not loose the work done on the partitioning of that sub-system. If resources are removed, the User Interface will notify you about this and you can make the required changes.
    +

    +

    +Top-level .rzone XML elements

    +
      +
    • <rzone> is the root element of the *.rzone file.
    • +
    • <creator> describes the creation for this *.rzone file.
    • +
    • <device> describes the device that is part of the system. It may contain one or more processors.
    • +
    • <resources> describes the memory and peripheral resources of the system.
    • +
    +

    +Structure of .rzone XML file

    +
    <rzone> // root element of system zone file
    +
    <creator> // describes how this rzone file was created
    +
    +
    <device> // device information
    +
    <package/> // software pack that defines device
    +
    <processor/> // processor information
    +
    </device>
    +
    +
    <resources> // physical resources off-chip
    +
    <sau_init> // fixed SAU settings required for system
    +
    <region/> // region setting for SAU
    +
    </sau_init>
    +
    +
    <memories> // memories section
    +
    <memory> // memory resource
    +
    <mpc> // memory protection controller information
    +
    </memories>
    +
    +
    <peripherals> // peripheral resources off-chip
    +
    { <group> } // peripheral group (optional)
    +
    <peripheral> // peripheral description
    +
    <slot> // optional slot description (pin or DMA channel)
    +
    <interrupt/> // optional interrupts for slot
    +
    <setup/> // optional register setup for slot
    +
    </slot>
    +
    <interrupt/> // optional interrupts for peripheral
    +
    <setup/> // optional register setup for peripheral
    +
    </peripheral>
    +
    { </group> } // peripheral group (optional)
    +
    </peripherals>
    +
    </resources>
    +
    </rzone>
    +

    +

    +Top-level .azone XML elements

    +
      +
    • <azone> is the root element of the *.azone file.
    • +
    • <configure> controls the behavior of the CMSIS-Zone utility (project or MPU assignments).
    • +
    • <partition> defines memory partitions that split available system memory.
    • +
    • <zones> defines the assignment of memory, block, and peripherals.
    • +
    +
    <azone>
    +
    <rzone> // Refers related .rzone file
    +
    <configure> // CMSIS-Zone utility UI behavior
    +
    +
    <partition> // memory partition information
    +
    <memory> // memory split information
    +
    </partition>
    +
    +
    <zones> // zone assignments
    +
    <zone> // project zone name
    +
    <assign> // used peripheral or memory
    +
    <interrupt/> // for peripherals optional interrupt usage
    +
    </assign>
    +
    </zone>
    +
    </zones>
    +
    </azone>
    +

    +

    +Security Type

    +

    The attribute security defines the security setting for a memory or peripheral region. Only one of the settings is allow:

      +
    • <empty> security not defined (default)
    • +
    • 'n' non-secure
    • +
    • 'c' secure on non-secure callable
      +
    • +
    • 's' secure
    • +
    +

    +

    +Access Type

    +

    The attribute access defines the access permission for a memory or peripheral region. Multiple settings are allow:

      +
    • 'r' read
      +
    • +
    • 'w' write
    • +
    • 'x' execute
    • +
    • 'p' peripheral
    • +
    +

    +

    +Privilege Type

    +

    The attribute privilege defines the privilege level that is required for memory/peripheral access or code execution in a MPU zone. Only one of the settings is allow:

      +
    • <empty> privilege level not specified
    • +
    • 'u' unprivileged level
    • +
    • 'p' privileged level
    • +
    +
    +
    +
    + + + + diff --git a/main/zoneFormat.js b/main/zoneFormat.js new file mode 100644 index 0000000..f87376a --- /dev/null +++ b/main/zoneFormat.js @@ -0,0 +1,13 @@ +var zoneFormat = +[ + [ "Overall XML structure", "zoneFormat.html#XML_Format_Schema", null ], + [ "Top-level .rzone XML elements", "zoneFormat.html#autotoc_md0", [ + [ "Structure of .rzone XML file", "zoneFormat.html#autotoc_md1", null ] + ] ], + [ "Top-level .azone XML elements", "zoneFormat.html#autotoc_md2", null ], + [ "Security Type", "zoneFormat.html#autotoc_md3", null ], + [ "Access Type", "zoneFormat.html#autotoc_md4", null ], + [ "Privilege Type", "zoneFormat.html#autotoc_md5", null ], + [ "/rzone element", "xml_rzone_pg.html", "xml_rzone_pg" ], + [ "/azone element", "xml_azone_pg.html", "xml_azone_pg" ] +]; \ No newline at end of file diff --git a/main/zoneToolUsage.html b/main/zoneToolUsage.html new file mode 100644 index 0000000..2823eef --- /dev/null +++ b/main/zoneToolUsage.html @@ -0,0 +1,243 @@ + + + + + + + +CMSIS-Zone: CMSIS-Zone Utility + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    CMSIS-Zone Utility
    +
    +
    +

    The section describes the CMSIS-Zone Utility which is currently a stand-alone Eclipse implementation that allows you to:

    +

    This section describes:

    +
    Note
    It is assumed that you are familiar with Eclipse and Open-CMSIS-Packs . The relevant device family packs for your target device need to be installed on your computer.
    +

    +Installation

    +

    The CMSIS-Zone utility is part of the CMSIS-Pack Eclipse Plug-ins.

    +

    Follow the instructions on the release page to install the tool.

    +

    +User Interface

    +

    The CMSIS-Zone Utility user interface offers menus, toolbars, dialog boxes, and windows to manage the various aspects of your project.

    +

    The utility's GUI provides menus for selecting commands and toolbar buttons in the Zone Editor window:

    +
    + +
    +CMSIS-Zone Interface
    +

    +Project Explorer

    +

    Projects that are currently available in the Eclipse workspace are shown in the Project Explorer. When creating a new project, you will first find the .rzone and the .azone files here. Later, generator files and generated files are shown as well:

    +
    + +
    +Project Explorer window showing a complex project
    +

    In the Project Explorer window, you manage the project files. The following files are shown:

    + + + + + + + + + + + + + + + + + +
    File name Description
    project.azone Project-level .azone file
    project.rzone Project-level .rzone file
    zone.azone Zone-level .azone file
    zone.rzone Zone-level .rzone file
    *.ftl Freemarker template file used to generate output
    helper.ftlinc Helper file to generate Freemarker output
    *.sct, partition_*.h Generated output files
    +

    +Zone Editor

    +

    The Zone Editor shows .azone files in two different views: Resource map and Zone map.

    +

    The Resource map shows all resources available to that system or sub-system. By default, it shows the selected device, as well as lists of memories and peripherals:

    +
    + +
    +Resource map
    +

    The Zone map shows the same resources, but mapped to zones that have been created for the device:

    +
    + +
    +Zone map
    +

    Resources assigned to a zone are marked with colors:

    + + + + + + +
    Color Meaning
    Green Resource is assigned to one zone
    Amber Resource is assigned to multiple zones
    +

    +Toolbar Buttons

    +

    The Zone Editor window contains toolbar buttons that offer direct access to functionality of the utility:

    +
    + +
    +CMSIS-Zone toolbar
    + + + + + + + + + + + + + +
    Button Description
    Tree View Shows the resources as a tree
    List View Shows the resources as a simple list
    Arrange memory regions Arranges memory regions according to their sizes
    Add new zone Adds a new zone to the zone map
    Generate Generates CMSIS-Zone output files
    +
    +
    +
    + + + + diff --git a/main/zoneToolUsage.js b/main/zoneToolUsage.js new file mode 100644 index 0000000..ad63c39 --- /dev/null +++ b/main/zoneToolUsage.js @@ -0,0 +1,29 @@ +var zoneToolUsage = +[ + [ "Installation", "zoneToolUsage.html#zTInstall", null ], + [ "User Interface", "zoneToolUsage.html#zTUI", [ + [ "Project Explorer", "zoneToolUsage.html#zTProjEx", null ], + [ "Zone Editor", "zoneToolUsage.html#zTGUIZoneEditor", [ + [ "Toolbar Buttons", "zoneToolUsage.html#zTGUIButtons", null ] + ] ] + ] ], + [ "Interactive Mode", "zTInteractiveMode.html", [ + [ "Create a CMSIS-Zone Project", "zTInteractiveMode.html#zTUICreateProject", [ + [ "Variant 1: Using an existing *.rzone file", "zTInteractiveMode.html#zTUICreateProjectVar1", null ], + [ "Variant 2: Using the SVD file from the device family pack", "zTInteractiveMode.html#zTUICreateProjectVar2", null ] + ] ], + [ "Memory and Peripheral Resources", "zTInteractiveMode.html#zTUIMemPerRes", [ + [ "View memory and peripheral resources", "zTInteractiveMode.html#zTUIMemView", null ], + [ "Create Memory Regions", "zTInteractiveMode.html#zTUIMemAdd", null ], + [ "Delete Memory Regions", "zTInteractiveMode.html#zTUIMemDel", null ], + [ "Resource Properties", "zTInteractiveMode.html#zTUIPerProp", null ], + [ "Configure peripheral slot access rights", "zTInteractiveMode.html#zTUIPerSlotConf", null ] + ] ], + [ "Zone Partitioning", "zTInteractiveMode.html#zTUIZonePart", [ + [ "Create Zones", "zTInteractiveMode.html#zTUICreate", null ] + ] ], + [ "Generate output files", "zTInteractiveMode.html#zTUIGenerate", null ] + ] ], + [ "Command Line Mode", "zTCLI.html", null ], + [ "Examples", "zTExamples.html", "zTExamples" ] +]; \ No newline at end of file diff --git a/main/zone_map.png b/main/zone_map.png new file mode 100644 index 0000000..a58104a Binary files /dev/null and b/main/zone_map.png differ diff --git a/main/zone_project.png b/main/zone_project.png new file mode 100644 index 0000000..aa2bb18 Binary files /dev/null and b/main/zone_project.png differ diff --git a/main/zone_revisionHistory.html b/main/zone_revisionHistory.html new file mode 100644 index 0000000..34587b7 --- /dev/null +++ b/main/zone_revisionHistory.html @@ -0,0 +1,208 @@ + + + + + + + +CMSIS-Zone: Revision History + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + +
    +
    CMSIS-Zone +   + +
    +
    System Resource Management
    +
    + +   + + + + +
    +
    +
    + +
    +
      + +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Revision History
    +
    +
    +

    + + + + + + + + + + + + + + + + +
    Version Description
    1.1.0
      +
    • +MPU support for Arm V7 architecture
    • +
    • +upgrade handling of data in .azone, .rzone and .fzone files according to changes in CMSIS-Zone specification
    • +
    +
    1.0.0
      +
    • +Initial release including the main functionality.
    • +
    +
    0.9.5 (Preview)
      +
    • +generation of mpu_setup element in .fzone files (currently limited to Armv8 architecture)
    • +
    • +support for /azone/configure element in .azone files: show and assign memory regions and peripherals according to the settings
    • +
    • +Setup page in the editor to view zone properties and configure settings
    • +
    • +bug fixes
    • +
    +
    0.9.4 (Preview)
      +
    • +look and feed: icons and colors
    • +
    • +improved error processing and reporting
    • +
    • +bug fixes
    • +
    +
    0.9.2 (Preview)
      +
    • +additional flags for memory regions: init, DMA, startup
    • +
    • +fixes and enhancements in MPC and SAU handling
    • +
    • +enhanced algorithm for memory region arrangement with MPC
    • +
    • +possibility to save altered permissions for top-level memory regions and peripherals
    • +
    • +individual configuration of peripheral channels and pins
    • +
    • +improved new CMSIS Zone project wizard: it is possible to specify an available .rzone file instead of device
    • +
    • +UI enhancements and bugfixes
    • +
    +
    0.9.0-alpha (Preview) Alpha with completely revised workflow.
    0.0.3 (Preview 3) Initial specification draft
    +
    +
    +
    + + + + diff --git a/version.js b/version.js new file mode 100644 index 0000000..598265a --- /dev/null +++ b/version.js @@ -0,0 +1,62 @@ +//--- list of versions --- +const versions = { + "latest": "1.0.1-dev22", + "main": "1.0.1-dev22" +} +//--- list of versions --- + +var script = document.currentScript +if (script && script.src) { + var scriptUrl = new URL(script.src); + var docUrl = new URL(document.URL); + var baseUrl = new URL(scriptUrl) + baseUrl.pathname = baseUrl.pathname.split('/').slice(0,-1).join("/") + + function urlForVersion(url, version) { + url = new URL(url); + pathname = url.pathname.replace(baseUrl.pathname, ""); + parts = pathname.split("/"); + parts[1] = version; + url.pathname = baseUrl.pathname + parts.join("/"); + return url + } + + function writeVersionDropdown() { + currentVersion = document.currentScript.parentNode.innerText; + document.currentScript.parentNode.classList.add("dropdown"); + document.currentScript.parentNode.innerText = ""; + document.write(' '+currentVersion+''); + document.write(' '); + }; +} else { + function writeVersionDropdown() {} +} + +/* When the user clicks on the button, +toggle between hiding and showing the dropdown content */ +function myFunction() { + document.getElementById("myDropdown").classList.toggle("show"); +} + +// Close the dropdown menu if the user clicks outside of it +window.onclick = function(event) { + if (!event.target.matches('.dropbtn')) { + var dropdowns = document.getElementsByClassName("dropdown-content"); + var i; + for (i = 0; i < dropdowns.length; i++) { + var openDropdown = dropdowns[i]; + if (openDropdown.classList.contains('show')) { + openDropdown.classList.remove('show'); + } + } + } +}