From 1fd71c078e63628fc408726fa386b766e908d7f0 Mon Sep 17 00:00:00 2001 From: Chris Spangler <chris.spangler@fau.de> Date: Fri, 3 Aug 2018 09:52:11 +0200 Subject: [PATCH] I finally fixed my Git repo --- .gitignore | 1 + firmware/.goutputstream-J4JHNZ | 84 + firmware/CMakeLists.txt | 41 + firmware/Doxyfile.in | 1792 ++ firmware/EZS.cmake | 54 + firmware/axis.c | 98 + firmware/axis.h | 43 + firmware/ecos/ecos.ecc | 14463 ++++++++++++++++ firmware/ecosenv.sh | 29 + firmware/gcbuf.c | 47 + firmware/gcbuf.h | 32 + firmware/gcode.c | 64 + firmware/gcode.h | 26 + firmware/hello.c | 618 + firmware/libDIY/drivers/include/diy_adc.h | 51 + firmware/libDIY/drivers/include/diy_gpio.h | 75 + firmware/libDIY/drivers/include/diy_int.h | 12 + firmware/libDIY/drivers/include/diy_tim.h | 95 + firmware/libDIY/drivers/src/diy_adc.c | 47 + firmware/libDIY/drivers/src/diy_gpio.c | 103 + firmware/libDIY/drivers/src/diy_int.c | 24 + firmware/libDIY/drivers/src/diy_tim.c | 89 + firmware/libDIY/include/diy_ds18b20.h | 17 + firmware/libDIY/include/diy_gparser.h | 12 + firmware/libDIY/src/diy_ds18b20.c | 19 + firmware/libDIY/src/diy_gparser.c | 6 + firmware/libEZS/drivers/i386/ezs_adc.c | 20 + firmware/libEZS/drivers/i386/ezs_counter.c | 144 + firmware/libEZS/drivers/i386/ezs_dac.c | 19 + firmware/libEZS/drivers/i386/ezs_fb.c | 88 + firmware/libEZS/drivers/i386/ezs_keycodes.c | 22 + firmware/libEZS/drivers/i386/ezs_tracer.cpp | 34 + .../libEZS/drivers/stm32f4/ezs_counter.cpp | 62 + firmware/libEZS/drivers/stm32f4/ezs_dac.cpp | 132 + firmware/libEZS/drivers/stm32f4/ezs_gpio.c | 14 + .../libEZS/drivers/stm32f4/ezs_serial.cpp | 84 + firmware/libEZS/include/ezs_adc.h | 25 + firmware/libEZS/include/ezs_common.h | 26 + firmware/libEZS/include/ezs_counter.h | 68 + firmware/libEZS/include/ezs_dac.h | 33 + firmware/libEZS/include/ezs_delay.h | 29 + firmware/libEZS/include/ezs_fb.h | 135 + firmware/libEZS/include/ezs_fft.h | 42 + firmware/libEZS/include/ezs_gcd.h | 24 + firmware/libEZS/include/ezs_gpio.h | 24 + firmware/libEZS/include/ezs_interpolation.h | 13 + firmware/libEZS/include/ezs_io.h | 27 + firmware/libEZS/include/ezs_io_fel.h | 127 + firmware/libEZS/include/ezs_keycodes.h | 16 + firmware/libEZS/include/ezs_plot.h | 27 + firmware/libEZS/include/ezs_plot_pds.h | 18 + firmware/libEZS/include/ezs_sensor.h | 39 + firmware/libEZS/include/ezs_serial.h | 51 + firmware/libEZS/include/ezs_stopwatch.h | 42 + firmware/libEZS/include/ezs_trace.h | 14 + firmware/libEZS/include/ezs_window.h | 28 + firmware/libEZS/src/ezs_common.c | 10 + firmware/libEZS/src/ezs_dac.c | 21 + firmware/libEZS/src/ezs_delay.c | 24 + firmware/libEZS/src/ezs_fb.c | 93 + firmware/libEZS/src/ezs_fft.c | 219 + firmware/libEZS/src/ezs_gcd.c | 20 + firmware/libEZS/src/ezs_impure_ptr.c | 1 + firmware/libEZS/src/ezs_interpolation.c | 82 + firmware/libEZS/src/ezs_io.c | 8 + firmware/libEZS/src/ezs_io_fel.c | 112 + firmware/libEZS/src/ezs_plot.c | 147 + firmware/libEZS/src/ezs_plot_pds.c | 51 + firmware/libEZS/src/ezs_sensor.c | 78 + firmware/libEZS/src/ezs_stopwatch.c | 16 + firmware/libEZS/src/ezs_tracer.cpp | 49 + firmware/libEZS/src/ezs_window.c | 34 + firmware/motor.c | 83 + firmware/motor.h | 32 + firmware/myLibEZS/exclude | 4 + firmware/system.odg | Bin 0 -> 13827 bytes firmware/test.c | 12 + pinmap.ods | Bin 0 -> 10369 bytes pinmap.pdf | Bin 0 -> 19210 bytes 79 files changed, 20465 insertions(+) create mode 100644 firmware/.goutputstream-J4JHNZ create mode 100644 firmware/CMakeLists.txt create mode 100644 firmware/Doxyfile.in create mode 100644 firmware/EZS.cmake create mode 100644 firmware/axis.c create mode 100644 firmware/axis.h create mode 100644 firmware/ecos/ecos.ecc create mode 100644 firmware/ecosenv.sh create mode 100644 firmware/gcbuf.c create mode 100644 firmware/gcbuf.h create mode 100644 firmware/gcode.c create mode 100644 firmware/gcode.h create mode 100644 firmware/hello.c create mode 100644 firmware/libDIY/drivers/include/diy_adc.h create mode 100644 firmware/libDIY/drivers/include/diy_gpio.h create mode 100644 firmware/libDIY/drivers/include/diy_int.h create mode 100644 firmware/libDIY/drivers/include/diy_tim.h create mode 100644 firmware/libDIY/drivers/src/diy_adc.c create mode 100644 firmware/libDIY/drivers/src/diy_gpio.c create mode 100644 firmware/libDIY/drivers/src/diy_int.c create mode 100644 firmware/libDIY/drivers/src/diy_tim.c create mode 100644 firmware/libDIY/include/diy_ds18b20.h create mode 100644 firmware/libDIY/include/diy_gparser.h create mode 100644 firmware/libDIY/src/diy_ds18b20.c create mode 100644 firmware/libDIY/src/diy_gparser.c create mode 100644 firmware/libEZS/drivers/i386/ezs_adc.c create mode 100644 firmware/libEZS/drivers/i386/ezs_counter.c create mode 100644 firmware/libEZS/drivers/i386/ezs_dac.c create mode 100644 firmware/libEZS/drivers/i386/ezs_fb.c create mode 100644 firmware/libEZS/drivers/i386/ezs_keycodes.c create mode 100644 firmware/libEZS/drivers/i386/ezs_tracer.cpp create mode 100644 firmware/libEZS/drivers/stm32f4/ezs_counter.cpp create mode 100644 firmware/libEZS/drivers/stm32f4/ezs_dac.cpp create mode 100644 firmware/libEZS/drivers/stm32f4/ezs_gpio.c create mode 100644 firmware/libEZS/drivers/stm32f4/ezs_serial.cpp create mode 100644 firmware/libEZS/include/ezs_adc.h create mode 100644 firmware/libEZS/include/ezs_common.h create mode 100644 firmware/libEZS/include/ezs_counter.h create mode 100644 firmware/libEZS/include/ezs_dac.h create mode 100644 firmware/libEZS/include/ezs_delay.h create mode 100644 firmware/libEZS/include/ezs_fb.h create mode 100644 firmware/libEZS/include/ezs_fft.h create mode 100644 firmware/libEZS/include/ezs_gcd.h create mode 100644 firmware/libEZS/include/ezs_gpio.h create mode 100644 firmware/libEZS/include/ezs_interpolation.h create mode 100644 firmware/libEZS/include/ezs_io.h create mode 100644 firmware/libEZS/include/ezs_io_fel.h create mode 100644 firmware/libEZS/include/ezs_keycodes.h create mode 100644 firmware/libEZS/include/ezs_plot.h create mode 100644 firmware/libEZS/include/ezs_plot_pds.h create mode 100644 firmware/libEZS/include/ezs_sensor.h create mode 100644 firmware/libEZS/include/ezs_serial.h create mode 100644 firmware/libEZS/include/ezs_stopwatch.h create mode 100644 firmware/libEZS/include/ezs_trace.h create mode 100644 firmware/libEZS/include/ezs_window.h create mode 100644 firmware/libEZS/src/ezs_common.c create mode 100644 firmware/libEZS/src/ezs_dac.c create mode 100644 firmware/libEZS/src/ezs_delay.c create mode 100644 firmware/libEZS/src/ezs_fb.c create mode 100644 firmware/libEZS/src/ezs_fft.c create mode 100644 firmware/libEZS/src/ezs_gcd.c create mode 100644 firmware/libEZS/src/ezs_impure_ptr.c create mode 100644 firmware/libEZS/src/ezs_interpolation.c create mode 100644 firmware/libEZS/src/ezs_io.c create mode 100644 firmware/libEZS/src/ezs_io_fel.c create mode 100644 firmware/libEZS/src/ezs_plot.c create mode 100644 firmware/libEZS/src/ezs_plot_pds.c create mode 100644 firmware/libEZS/src/ezs_sensor.c create mode 100644 firmware/libEZS/src/ezs_stopwatch.c create mode 100644 firmware/libEZS/src/ezs_tracer.cpp create mode 100644 firmware/libEZS/src/ezs_window.c create mode 100644 firmware/motor.c create mode 100644 firmware/motor.h create mode 100644 firmware/myLibEZS/exclude create mode 100644 firmware/system.odg create mode 100644 firmware/test.c create mode 100644 pinmap.ods create mode 100644 pinmap.pdf diff --git a/.gitignore b/.gitignore index 0624c65..1c33b87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +firmware/build *.aux *.log *.nav diff --git a/firmware/.goutputstream-J4JHNZ b/firmware/.goutputstream-J4JHNZ new file mode 100644 index 0000000..c8b98d5 --- /dev/null +++ b/firmware/.goutputstream-J4JHNZ @@ -0,0 +1,84 @@ +#include <math.h> +#include <stdio.h> +#include <cyg/hal/hal_arch.h> +#include <libopencm3/cm3/sync.h> + +#include "axis.h" +#include "motor.h" +#include "ezs_io.h" + +static int16_t roundSteps(double x) { + return floor(x+0.5); +} + +void setAxisValues_M5(axis* axis, motor* motorA, motor* motorB) { + // pitch: mm per rotation of the leadscrew + double pitch = 0.8; + axis->motorA = motorA; + axis->motorB = motorB; + axis->lastPosMm = 0; + axis->stepsPerMm = (axis->motorA->stepsPerRevo * axis->motorA->gearRatio) / pitch; + axis->mmPerStep = 1.0 / axis->stepsPerMm; + axis->maxMmPerMin = 20000 * axis->mmPerStep; + axis->isReversed = false; +} + +void setAxisValues_T25(axis* axis, motor* motorA, motor* motorB, uint8_t teeth) { + // pitch: distance between two tooth centers on the timing belt in mm + // teeth: number of teeth on the pulley attached to the motor shaft + double pitch = 2.5; + axis->motorA = motorA; + axis->motorB = motorB; + axis->lastPosMm = 0; + axis->stepsPerMm = (axis->motorA->stepsPerRevo * axis->motorA->gearRatio) / (pitch * teeth); + axis->mmPerStep = 1.0 / axis->stepsPerMm; + axis->isReversed = false; +} + +void homeAxis(axis* axis) { + int8_t one = -1; + if (axis->isReversed) one = -1; + while (diy_gpio_read_pin(axis->endstopPort, axis->endstopPin) == 0) { + setMotorMotion(axis->motorA, -one, 1); + updateMotor(axis->motorA); + if (axis->motorB != NULL) { + setMotorMotion(axis->motorB, -one, 1); + updateMotor(axis->motorB); + } + ezs_delay_us(1e3); + } + while (diy_gpio_read_pin(axis->endstopPort, axis->endstopPin) == 1) { + setMotorMotion(axis->motorA, one, 1); + updateMotor(axis->motorA); + if (axis->motorB != NULL) { + setMotorMotion(axis->motorB, one, 1); + updateMotor(axis->motorB); + } + ezs_delay_us(1e5); + } + axis->lastPosMm = 0; +} + +void setAxisTarget(axis* axis, double targetPosMm, double speed) { + mutex_lock(&(axis->lock)); + if (axis->stepsPerMm == 0) ezs_printf("AXIS ERROR: attempting to set axis target while uninitialized"); + int32_t stepsToMove = roundSteps((targetPosMm - axis->lastPosMm) * axis->stepsPerMm); + if (axis->isReversed) stepsToMove = -stepsToMove; + uint16_t stepsPerSec = (speed / 60) / axis->mmPerStep; + setMotorMotion(axis->motorA, stepsToMove, stepsPerSec); + if (axis->motorB != NULL) setMotorMotion(axis->motorB, stepsToMove, stepsPerSec); + axis->lastPosMm = targetPosMm; + mutex_unlock(&(axis->lock)); +} + +uint32_t updateAxis(axis* axis) { + mutex_lock(&(axis->lock)); + uint32_t ret = updateMotor(axis->motorA); + if (axis->motorB != NULL) updateMotor(axis->motorB); + mutex_unlock(&(axis->lock)); + return ret; +} + +bool axisIsFinished(axis* axis) { + return (axis->motorA->stepsLeft) == 0; +} diff --git a/firmware/CMakeLists.txt b/firmware/CMakeLists.txt new file mode 100644 index 0000000..ad299b2 --- /dev/null +++ b/firmware/CMakeLists.txt @@ -0,0 +1,41 @@ +Project(3DPrinter) + +cmake_minimum_required(VERSION 2.8) + +#include CMAKE-Modules from base directory +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}") +INCLUDE(EZS) + +add_definitions("-D EZS_DUMB_SERIAL") + +include_directories(${PROJECT_SOURCE_DIR}/libDIY/drivers/include) +include_directories(${PROJECT_SOURCE_DIR}/libDIY/include) +set(LIBEZS_SOURCES +# libEZS/src/ezs_tracer.cpp + libEZS/drivers/${EZS_ARCH}/ezs_gpio.c + libEZS/drivers/${EZS_ARCH}/ezs_dac.cpp + libEZS/drivers/${EZS_ARCH}/ezs_serial.cpp + libEZS/drivers/${EZS_ARCH}/ezs_counter.cpp + libEZS/src/ezs_delay.c + ) + +set(LIBDIY_SOURCES + libDIY/drivers/src/diy_adc.c + libDIY/drivers/src/diy_gpio.c + libDIY/drivers/src/diy_tim.c + libDIY/drivers/src/diy_int.c + ) + +SET(SRC_LIST + gcode.c + gcbuf.c + axis.c + motor.c + hello.c + ${LIBEZS_SOURCES} + ${LIBDIY_SOURCES} + ) + +set(TGT "app") + +ECOS_ADD_EXECUTABLE(${TGT} ${SRC_LIST}) diff --git a/firmware/Doxyfile.in b/firmware/Doxyfile.in new file mode 100644 index 0000000..bbad035 --- /dev/null +++ b/firmware/Doxyfile.in @@ -0,0 +1,1792 @@ +# Doxyfile 1.8.1.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = @PROJECT_NAME@ + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "i4ezs: Echtzeitsysteme" + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = @DOXY_OUTPUT@ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command <command> <input-file>, where <command> is the value of +# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = NO + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = NO + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @CMAKE_SOURCE_DIR@ @CMAKE_SOURCE_DIR@/../libEZS/ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = @DOXY_IGNORE@ + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = */src/* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command <filter> <input-file>, where <filter> +# is the value of the INPUT_FILTER tag, and <input-file> is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = YES + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> +# Qt Help Project / Custom Filters</a>. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> +# Qt Help Project / Filter Attributes</a>. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://www.mathjax.org/mathjax + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/firmware/EZS.cmake b/firmware/EZS.cmake new file mode 100644 index 0000000..e4c2489 --- /dev/null +++ b/firmware/EZS.cmake @@ -0,0 +1,54 @@ + +if(POLICY CMP0037) + cmake_policy(SET CMP0037 OLD) +endif() + +# first check that ecosconfig is available +FIND_PROGRAM(ECOSCONFIG_EXECUTABLE NAMES ecosconfig) + +IF("$ENV{EZS_BASE}" STREQUAL "") + MESSAGE(FATAL_ERROR "EZS_BASE not set. Did you run 'source ../ecosenv.sh'?") +ELSE() +message(STATUS "EZS_BASE: $ENV{EZS_BASE}") + IF(NOT IS_DIRECTORY "$ENV{EZS_BASE}") + MESSAGE(FATAL_ERROR "EZS_BASE set but not a directory. Check your settings in ../ecosenv.sh and your installation'?") + ENDIF() + IF(NOT IS_DIRECTORY "$ENV{EZS_CMAKE_MODULE_DIR}") + MESSAGE(FATAL_ERROR "EZS_CMAKE_MODULE_DIR is not a directory. Check your settings in ../ecosenv.sh and your installation'?") + ENDIF() + MESSAGE(STATUS "USING $ENV{EZS_BASE}") + MESSAGE(STATUS "USING $ENV{EZS_CMAKE_MODULE_DIR} as cmake module path") + set(CMAKE_MODULE_PATH "$ENV{EZS_CMAKE_MODULE_DIR}" ${CMAKE_MODULE_PATH}) + set(EZS_TOOLS_DIR "$ENV{EZS_CMAKE_MODULE_DIR}") + MESSAGE(STATUS "USING ${EZS_TOOLS_DIR} as tools path") +ENDIF("$ENV{EZS_BASE}" STREQUAL "") + +IF(NOT ECOSCONFIG_EXECUTABLE) + MESSAGE(FATAL_ERROR "ecosconfig was not found. Do you have a valid ecos repository?") +ENDIF(NOT ECOSCONFIG_EXECUTABLE) + +IF("$ENV{EZS_LIBOPENCM3_DIR}" STREQUAL "") + MESSAGE(WARNING "OPENCM3_PATH not set. Did you run 'source ../ecosenv.sh'") +ELSE() + set(OPENCM3_PATH $ENV{EZS_LIBOPENCM3_DIR}) +ENDIF() + +set(EZS_CPU_FLAGS "-mcpu=cortex-m3 -mthumb") + +add_definitions( "-D STM32F4") +INCLUDE(EZSconvenience) +INCLUDE(ezs_ecos_stm32) + +set(EZS_ARCH stm32f4) + +include_directories(${OPENCM3_PATH}/include) +ECOS_EZS_ADDLIB("${OPENCM3_PATH}/lib/libopencm3_stm32f4.a") + +include_directories(${PROJECT_SOURCE_DIR}/libEZS/include) + +FIND_PROGRAM(MELD_EXECUTABLE NAMES meld) +IF(MELD_EXECUTABLE) + add_custom_target(diff + COMMAND ${MELD_EXECUTABLE} "/proj/i4ezs/vorgaben/${CMAKE_PROJECT_NAME}/" "${PROJECT_SOURCE_DIR}" + COMMENT "Invoking diff") +ENDIF() diff --git a/firmware/axis.c b/firmware/axis.c new file mode 100644 index 0000000..6bafb1e --- /dev/null +++ b/firmware/axis.c @@ -0,0 +1,98 @@ +#include <math.h> +#include <stdio.h> +#include <cyg/hal/hal_arch.h> +#include <libopencm3/cm3/sync.h> + +#include "axis.h" +#include "motor.h" +#include "ezs_io.h" +#include "ezs_delay.h" + +static int32_t roundSteps(double x) { + return floor(x+0.5); +} + +void setAxisValues_extruderBolt(axis* axis, motor* motor) { + // pitch: mm per rotation of the bolt + // gearRatio: from stepper motor to bolt + double pitch = 20.3; + uint8_t gearRatio = 4; + axis->motor = motor; + axis->lastPosMm = 0; + axis->stepsPerMm = (axis->motor->stepsPerRevo * axis->motor->gearRatio * gearRatio) / pitch; + axis->mmPerStep = 1.0 / axis->stepsPerMm; + axis->isReversed = false; + axis->isRelative = true; +} + +void setAxisValues_M5(axis* axis, motor* motor) { + // pitch: mm per rotation of the leadscrew + double pitch = 0.8; + axis->motor = motor; + axis->lastPosMm = 0; + axis->stepsPerMm = (axis->motor->stepsPerRevo * axis->motor->gearRatio) / pitch; + axis->mmPerStep = 1.0 / axis->stepsPerMm; + axis->isReversed = false; + axis->isRelative = false; +} + +void setAxisValues_T25(axis* axis, motor* motor, uint8_t teeth) { + // pitch: distance between two tooth centers on the timing belt in mm + // teeth: number of teeth on the pulley attached to the motor shaft + double pitch = 2.5; + axis->motor = motor; + axis->lastPosMm = 0; + axis->stepsPerMm = (axis->motor->stepsPerRevo * axis->motor->gearRatio) / (pitch * teeth); + axis->mmPerStep = 1.0 / axis->stepsPerMm; + axis->isReversed = false; + axis->isRelative = false; +} + +void homeAxis(axis* axis) { + int8_t one = 1; + if (axis->isReversed) one = -1; + while (diy_gpio_read_pin(axis->endstopPort, axis->endstopPin) == 0) { + while (diy_gpio_read_pin(axis->endstopPort, axis->endstopPin) == 0) { + setMotorMotion(axis->motor, -one, 1); + updateMotor(axis->motor); + axis->totalSteps--; + ezs_delay_us(2e3); + } + ezs_delay_us(5e5); + } + while (diy_gpio_read_pin(axis->endstopPort, axis->endstopPin) == 1) { + while (diy_gpio_read_pin(axis->endstopPort, axis->endstopPin) == 1) { + setMotorMotion(axis->motor, one, 1); + updateMotor(axis->motor); + axis->totalSteps++; + ezs_delay_us(1e4); + } + ezs_delay_us(5e5); + } + axis->lastHomeRest = axis->totalSteps; + axis->totalSteps = 0; + axis->lastPosMm = axis->homePos; +} + +void setAxisTarget(axis* axis, double targetPosMm, double speed) { + mutex_lock(&(axis->lock)); + if (axis->stepsPerMm == 0) ezs_printf("!! AXIS ERROR: attempting to set axis target while uninitialized\n"); + int32_t stepsToMove = roundSteps((targetPosMm - axis->lastPosMm) * axis->stepsPerMm); + axis->totalSteps += stepsToMove; + if (axis->isReversed) stepsToMove = -stepsToMove; + uint16_t stepsPerSec = (speed / 60) / axis->mmPerStep; + setMotorMotion(axis->motor, stepsToMove, stepsPerSec); + if (!axis->isRelative) axis->lastPosMm = targetPosMm; + mutex_unlock(&(axis->lock)); +} + +uint32_t updateAxis(axis* axis) { + mutex_lock(&(axis->lock)); + uint32_t ret = updateMotor(axis->motor); + mutex_unlock(&(axis->lock)); + return ret; +} + +bool axisIsFinished(axis* axis) { + return (axis->motor->stepsLeft) == 0; +} diff --git a/firmware/axis.h b/firmware/axis.h new file mode 100644 index 0000000..458a991 --- /dev/null +++ b/firmware/axis.h @@ -0,0 +1,43 @@ +#ifndef HEADER_AXIS +#define HEADER_AXIS + +#include <stdint.h> +#include <cyg/hal/hal_arch.h> +#include <libopencm3/cm3/sync.h> + +#include "motor.h" + +typedef struct { + motor* motor; + bool isReversed; + bool isRelative; + mutex_t lock; + double homePos; + double volatile lastPosMm; + double stepsPerMm; + double mmPerStep; + double maxMmPerMin; + uint32_t endstopPort; + uint16_t endstopPin; + int totalSteps; + int lastHomeRest; +} axis; + +// Sets default values for timing belts and leadscrews used in the ToyRep +void setAxisValues_M5(axis* axis, motor* motor); +void setAxisValues_T25(axis* axis, motor* motor, uint8_t teeth); +void setAxisValues_extruderBolt(axis* axis, motor* motor); + +// Home axis and set lastPostMm to 0 +void homeAxis(axis* axis); + +// Starts a move towards targetPos with speed in mm/minute +void setAxisTarget(axis* axis, double targetPosMm, double speed); + +// Returns time for which the axis thread should wait +uint32_t updateAxis(axis* axis); + +// Returns whether the axis has reached it's destination +bool axisIsFinished(axis* axis); + +#endif diff --git a/firmware/ecos/ecos.ecc b/firmware/ecos/ecos.ecc new file mode 100644 index 0000000..c8de407 --- /dev/null +++ b/firmware/ecos/ecos.ecc @@ -0,0 +1,14463 @@ +# eCos saved configuration + +# ---- commands -------------------------------------------------------- +# This section contains information about the savefile format. +# It should not be edited. Any modifications made to this section +# may make it impossible for the configuration tools to read +# the savefile. + +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +# ---- toplevel -------------------------------------------------------- +# This section defines the toplevel configuration object. The only +# values that can be changed are the name of the configuration and +# the description field. It is not possible to modify the target, +# the template or the set of packages simply by editing the lines +# below because these changes have wide-ranging effects. Instead +# the appropriate tools should be used to make such modifications. + +cdl_configuration eCos { + description "" ; + + # These fields should not be modified. + hardware stm32f4discovery ; + template default ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_IO current ; + package -template CYGPKG_IO_SERIAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_KERNEL current ; + package -template CYGPKG_MEMALLOC current ; + package -template CYGPKG_ISOINFRA current ; + package -template CYGPKG_LIBC current ; + package -template CYGPKG_LIBC_I18N current ; + package -template CYGPKG_LIBC_SETJMP current ; + package -template CYGPKG_LIBC_SIGNALS current ; + package -template CYGPKG_LIBC_STARTUP current ; + package -template CYGPKG_LIBC_STDIO current ; + package -template CYGPKG_LIBC_STDLIB current ; + package -template CYGPKG_LIBC_STRING current ; + package -template CYGPKG_LIBC_TIME current ; + package -template CYGPKG_LIBM current ; + package -template CYGPKG_IO_WALLCLOCK current ; + package -template CYGPKG_ERROR current ; + package -hardware CYGPKG_HAL_CORTEXM current ; + package -hardware CYGPKG_HAL_CORTEXM_STM32 current ; + package -hardware CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY current ; + package -hardware CYGPKG_DEVS_FLASH_STM32 current ; + package -hardware CYGPKG_IO_SERIAL_CORTEXM_STM32 current ; +}; + +# ---- conflicts ------------------------------------------------------- +# There are no conflicts. + +# ---- contents -------------------------------------------------------- +# > +# > +# Flash driver support +# Control flash device support for STM32F4-Discovery board. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_FLASH { + # This option is not active + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Global build options +# Global build options including control over +# compiler flags, linker flags and choice of toolchain. +# +cdl_component CYGBLD_GLOBAL_OPTIONS { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Global command prefix +# This option specifies the command prefix used when +# invoking the build tools. +# +cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + # Flavor: data + user_value arm-none-eabi + # value_source user + # Default value: arm-eabi +}; + +# Global compiler flags +# This option controls the global compiler flags which are used to +# compile all packages by default. Individual packages may define +# options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_CFLAGS { + # Flavor: data + user_value "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # value_source user + # Default value: CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_GLOBAL_WARNFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings " + # --> "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + + # The following properties are affected by this value + # option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # option CYGBLD_INFRA_CFLAGS_PIPE + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # package CYGPKG_HAL_CORTEXM + # Requires: CYGHWR_HAL_CORTEXM_BIGENDIAN implies + # is_substr(CYGBLD_GLOBAL_CFLAGS, " -mbig-endian ") && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, " -mbig-endian ") + # package CYGPKG_HAL_CORTEXM + # Requires: !CYGHWR_HAL_CORTEXM_BIGENDIAN implies + # !is_substr(CYGBLD_GLOBAL_CFLAGS, " -mbig-endian ") && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, " -mbig-endian ") + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# Global linker flags +# This option controls the global linker flags. Individual +# packages may define options which override these global flags. +# +cdl_option CYGBLD_GLOBAL_LDFLAGS { + # Flavor: data + user_value "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # value_source user + # Default value: "-mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + + # The following properties are affected by this value + # package CYGPKG_HAL_CORTEXM + # Requires: CYGHWR_HAL_CORTEXM_BIGENDIAN implies + # is_substr(CYGBLD_GLOBAL_CFLAGS, " -mbig-endian ") && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, " -mbig-endian ") + # package CYGPKG_HAL_CORTEXM + # Requires: !CYGHWR_HAL_CORTEXM_BIGENDIAN implies + # !is_substr(CYGBLD_GLOBAL_CFLAGS, " -mbig-endian ") && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, " -mbig-endian ") + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# Standard compiler warning flags +# This option specifies the default warning-related compiler flags used +# on all eCos platforms. +# +cdl_option CYGBLD_GLOBAL_WARNFLAGS { + # Calculated value: "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings " + # Flavor: data + # Current_value: -Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings + + # The following properties are affected by this value + # option CYGBLD_GLOBAL_CFLAGS + # DefaultValue: CYGBLD_GLOBAL_WARNFLAGS . "-mcpu=cortex-m3 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" +}; + +# Build common GDB stub ROM image +# Unless a target board has specific requirements to the +# stub implementation, it can use a simple common stub. +# This option, which gets enabled by platform HALs as +# appropriate, controls the building of the common stub. +# +cdl_option CYGBLD_BUILD_COMMON_GDB_STUBS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 0 + # --> 0 +}; + +# < +# STM32 FLASH memory support +# Flash memory support for on-chip flash on STM32 devices and compatibles. +# This driver implements the V2 flash driver API. +# +cdl_package CYGPKG_DEVS_FLASH_STM32 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This option is not active + # ActiveIf constraint: CYGPKG_IO_FLASH + # CYGPKG_IO_FLASH (unknown) == 0 + # --> 0 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Number of words to write per burst +# On typical hardware programming the flash requires disabling +# interrupts for an extended period of time. +# Some or all of the flash hardware will be unusable while each word +# is programmed, and disabling interrupts is the only reliable +# way of ensuring that no interrupt handler or other thread will +# try to access the flash in the middle of an operation. This +# can have a major impact on the real-time responsiveness of +# typical applications. To ameliorate this the driver will +# perform writes in small bursts, briefly re-enabling the cache +# and interrupts between each burst. The number of write operations +# per burst is determined by this option: reducing the number of +# writes per burst will improve real-time response, but will add +# overhead so the actual flash program operation will take +# longer; conversely more writes per burst will worsen response +# times but reduce overhead. +# +cdl_option CYGNUM_DEVS_FLASH_STM32_V2_PROGRAM_BURST_SIZE { + # This option is not active + # The parent CYGPKG_DEVS_FLASH_STM32 is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 + # Legal values: 4 to 4096 +}; + +# Program/erase parallelism +# The Flash interface of the STM32 F2 and F4 families can program or erase +# multiple bits in one step. The maximum possible parallelism depends +# on the supply voltage. The default value of this option (32) +# corresponds to supply voltage of 2.7 - 3.6V, but another value +# may be chosen if a different voltage is used. +# +cdl_option CYGNUM_DEVS_FLASH_STM32_PARALLELISM { + # This option is not active + # The parent CYGPKG_DEVS_FLASH_STM32 is not active + # ActiveIf constraint: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4")) + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # --> 1 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 8 16 32 64 +}; + +# STM32 driver build options +# Package specific build options including control over +# compiler flags used only in building the STM32 +# flash driver, and details of which tests are built. +# +cdl_component CYGPKG_DEVS_FLASH_STM32_OPTIONS { + # This option is not active + # The parent CYGPKG_DEVS_FLASH_STM32 is not active + + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the STM32 flash driver. These flags +# are used in addition to the set of global flags. +# +cdl_option CYGPKG_DEVS_FLASH_STM32_CFLAGS_ADD { + # This option is not active + # The parent CYGPKG_DEVS_FLASH_STM32_OPTIONS is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the STM32 flash driver. These flags +# are removed from the set of global flags if present. +# +cdl_option CYGPKG_DEVS_FLASH_STM32_CFLAGS_REMOVE { + # This option is not active + # The parent CYGPKG_DEVS_FLASH_STM32_OPTIONS is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# < +# eCos HAL +# doc: ref/the-ecos-hardware-abstraction-layer.html +# The eCos HAL package provide a porting layer for +# higher-level parts of the system such as the kernel and the +# C library. Each installation should have HAL packages for +# one or more architectures, and for each architecture there +# may be one or more supported platforms. It is necessary to +# select one target architecture and one platform for that +# architecture. There are also a number of configuration +# options that are common to all HAL packages. +# +cdl_package CYGPKG_HAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_INFRA + # CYGPKG_INFRA == current + # --> 1 + + # The following properties are affected by this value +}; + +# > +# Platform-independent HAL options +# A number of configuration options are common to most or all +# HAL packages, for example options controlling how much state +# should be saved during a context switch. The implementations +# of these options will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON { + # There is no associated value. +}; + +# > +# Provide eCos kernel support +# The HAL can be configured to either support the full eCos +# kernel, or to support only very simple applications which do +# not require a full kernel. If kernel support is not required +# then some of the startup, exception, and interrupt handling +# code can be eliminated. +# +cdl_option CYGFUN_HAL_COMMON_KERNEL_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 +}; + +# HAL exception support +# When a processor exception occurs, for example an attempt to +# execute an illegal instruction or to perform a divide by +# zero, this exception may be handled in a number of different +# ways. If the target system has gdb support then typically +# the exception will be handled by gdb code. Otherwise if the +# HAL exception support is enabled then the HAL will invoke a +# routine deliver_exception(). Typically this routine will be +# provided by the eCos kernel, but it is possible for +# application code to provide its own implementation. If the +# HAL exception support is not enabled and a processor +# exception occurs then the behaviour of the system is +# undefined. +# +cdl_option CYGPKG_HAL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS == 1 + # --> 1 + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # CYGPKG_KERNEL_EXCEPTIONS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGPKG_KERNEL_EXCEPTIONS + # Requires: CYGPKG_HAL_EXCEPTIONS +}; + +# Stop calling constructors early +# This option supports environments where some constructors +# must be run in the context of a thread rather than at +# simple system startup time. A boolean flag named +# cyg_hal_stop_constructors is set to 1 when constructors +# should no longer be invoked. It is up to some other +# package to deal with the rest of the constructors. +# In the current version this is only possible with the +# C library. +# +cdl_option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # Requires: CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +}; + +# HAL uses the MMU and allows for CDL manipulation of it's use +# +cdl_interface CYGINT_HAL_SUPPORTS_MMU_TABLES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # ActiveIf: CYGINT_HAL_SUPPORTS_MMU_TABLES +}; + +# Install MMU tables. +# This option controls whether this application installs +# its own Memory Management Unit (MMU) tables, or relies on the +# existing environment to run. +# +cdl_option CYGSEM_HAL_INSTALL_MMU_TABLES { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_SUPPORTS_MMU_TABLES + # CYGINT_HAL_SUPPORTS_MMU_TABLES == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" + # CYG_HAL_STARTUP == ROM + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STATIC_MMU_TABLES + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES +}; + +# Use static MMU tables. +# This option defines an environment where any Memory +# Management Unit (MMU) tables are constant. Normally used by ROM +# based environments, this provides a way to save RAM usage which +# would otherwise be required for these tables. +# +cdl_option CYGSEM_HAL_STATIC_MMU_TABLES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_INSTALL_MMU_TABLES + # CYGSEM_HAL_INSTALL_MMU_TABLES == 0 + # --> 0 +}; + +# Route diagnostic output to debug channel +# If not inheriting the console setup from the ROM monitor, +# it is possible to redirect diagnostic output to the debug +# channel by enabling this option. Depending on the debugger +# used it may also be necessary to select a mangler for the +# output to be displayed by the debugger. +# +cdl_component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN { + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # CYGPKG_HAL_ARM (unknown) == 0 + # CYGPKG_HAL_POWERPC_MPC8xx (unknown) == 0 + # CYGPKG_HAL_V85X_V850 (unknown) == 0 + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 0 + # CYG_HAL_STARTUP == ROM + # --> 0 + + # The following properties are affected by this value + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# > +# Mangler used on diag output +# It is sometimes necessary to mangle (encode) the +# diag ASCII text output in order for it to show up at the +# other end. In particular, GDB may silently ignore raw +# ASCII text. +# +cdl_option CYGSEM_HAL_DIAG_MANGLER { + # This option is not active + # The parent CYGDBG_HAL_DIAG_TO_DEBUG_CHAN is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value GDB + # value_source default + # Default value: GDB + # Legal values: "GDB" "None" +}; + +# < +# Grouped libraries for linking +# This option provides a list of libraries used to satisfy +# linker dependencies, but necessary for building eCos. It is passed +# to a GROUP() directive in the linker script, which is analogous +# to using the "-(" aka "--start-group", and "-)" aka +# "--end-group" options on the linker command line. +# It provides a similar function to adding "-llibname" to the +# linker, but with the added feature that each library in the group +# is scanned in turn for unresolved symbols, and this process is +# repeated until there are no more unresolved symbols. This is important +# for system libraries as there are often mutual dependencies. +# This option should not be used for adding application specific +# libraries. That should be done in the application's own makefile +# or link line. +# Users wishing to use the GNU Compiler prior to GCC 3.0 will +# need to remove libsupc++.a from this option. +# Note that libtarget.a is always required to build eCos. +# +cdl_component CYGBLD_HAL_LINKER_GROUPED_LIBS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "libtarget.a libgcc.a libsupc++.a" + # value_source default + # Default value: CYGBLD_HAL_LINKER_GROUPED_LIBS_DEFAULT + # CYGBLD_HAL_LINKER_GROUPED_LIBS_DEFAULT == "libtarget.a libgcc.a libsupc++.a" + # --> "libtarget.a libgcc.a libsupc++.a" + # Requires: is_substr(CYGBLD_HAL_LINKER_GROUPED_LIBS, "libtarget.a") + # CYGBLD_HAL_LINKER_GROUPED_LIBS == "libtarget.a libgcc.a libsupc++.a" + # --> 1 + + # The following properties are affected by this value + # component CYGBLD_HAL_LINKER_GROUPED_LIBS + # Requires: is_substr(CYGBLD_HAL_LINKER_GROUPED_LIBS, "libtarget.a") +}; + +# > +# Default setting +# This option is intended to be used by other eCos packages (including +# HAL packages) to provide a different default value for +# CYGBLD_HAL_LINKER_GROUPED_LIBS. +# This is separated into its own option to continue to +# allow the user to make customisations to the grouped library +# list. +# +cdl_option CYGBLD_HAL_LINKER_GROUPED_LIBS_DEFAULT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "libtarget.a libgcc.a libsupc++.a" + # value_source default + # Default value: "libtarget.a libgcc.a libsupc++.a" + + # The following properties are affected by this value + # component CYGBLD_HAL_LINKER_GROUPED_LIBS + # DefaultValue: CYGBLD_HAL_LINKER_GROUPED_LIBS_DEFAULT +}; + +# < +# < +# HAL interrupt handling +# A number of configuration options related to interrupt +# handling are common to most or all HAL packages, even though +# the implementations will vary from architecture to +# architecture. +# +cdl_component CYGPKG_HAL_COMMON_INTERRUPTS { + # There is no associated value. +}; + +# > +# Use separate stack for interrupts +# When an interrupt occurs this interrupt can be handled either +# on the current stack or on a separate stack maintained by the +# HAL. Using a separate stack requires a small number of extra +# instructions in the interrupt handling code, but it has the +# advantage that it is no longer necessary to allow extra space +# in every thread stack for the interrupt handlers. The amount +# of extra space required depends on the interrupt handlers +# that are being used. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Interrupt stack size +# This configuration option specifies the stack size in bytes +# for the interrupt stack. Typically this should be a multiple +# of 16, but the exact requirements will vary from architecture +# to architecture. The interrupt stack serves two separate +# purposes. It is used as the stack during system +# initialization. In addition, if the interrupt system is +# configured to use a separate stack then all interrupts will +# be processed on this stack. The exact memory requirements +# will vary from application to application, and will depend +# heavily on whether or not other interrupt-related options, +# for example nested interrupts, are enabled. On most targets, +# in a configuration with no kernel this stack will also be +# the stack used to invoke the application, and must obviously +# be appropriately large in that case. +# +cdl_option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 4096 + # value_source default + # Default value: CYGPKG_KERNEL ? 4096 : 32768 + # CYGPKG_KERNEL == current + # --> 4096 + # Legal values: 128 to 1048576 +}; + +# Allow nested interrupts +# When an interrupt occurs the HAL interrupt handling code can +# either leave interrupts disabled for the duration of the +# interrupt handling code, or by doing some extra work it can +# reenable interrupts before invoking the interrupt handler and +# thus allow nested interrupts to happen. If all the interrupt +# handlers being used are small and do not involve any loops +# then it is usually better to disallow nested interrupts. +# However if any of the interrupt handlers are more complicated +# than nested interrupts will usually be required. +# +cdl_option CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Save minimum context on interrupt +# The HAL interrupt handling code can exploit the calling conventions +# defined for a given architecture to reduce the amount of state +# that has to be saved. Generally this improves performance and +# reduces code size. However it can make source-level debugging +# more difficult. +# +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT +}; + +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGIMP_KERNEL_INTERRUPTS_CHAIN + # Requires: CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN +}; + +# Ignore spurious [fleeting] interrupts +# On some hardware, interrupt sources may not be de-bounced or +# de-glitched. Rather than try to handle these interrupts (no +# handling may be possible), this option allows the HAL to simply +# ignore them. In most cases, if the interrupt is real it will +# reoccur in a detectable form. +# +cdl_option CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# HAL context switch support +# A number of configuration options related to thread contexts +# are common to most or all HAL packages, even though the +# implementations will vary from architecture to architecture. +# +cdl_component CYGPKG_HAL_COMMON_CONTEXT { + # There is no associated value. + + # The following properties are affected by this value +}; + +# > +# Use minimum thread context +# The thread context switch code can exploit the calling +# conventions defined for a given architecture to reduce the +# amount of state that has to be saved during a context +# switch. Generally this improves performance and reduces +# code size. However it can make source-level debugging more +# difficult. +# +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM +}; + +# < +# Explicit control over cache behaviour +# These options let the default behaviour of the caches +# be easily configurable. +# +cdl_component CYGPKG_HAL_CACHE_CONTROL { + # There is no associated value. +}; + +# > +# Enable DATA cache on startup +# Enabling this option will cause the data cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the data cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_component CYGSEM_HAL_ENABLE_DCACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# DATA cache mode on startup +# This option controls the mode the cache will be set to +# when enabled on startup. +# +cdl_option CYGSEM_HAL_DCACHE_STARTUP_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value COPYBACK + # value_source default + # Default value: COPYBACK + # Legal values: "COPYBACK" "WRITETHRU" +}; + +# < +# Enable INSTRUCTION cache on startup +# Enabling this option will cause the instruction cache to be enabled +# as soon as practicable when eCos starts up. One would choose +# to disable this if the instruction cache cannot safely be turned on, +# such as a case where the cache(s) require additional platform +# specific setup. +# +cdl_option CYGSEM_HAL_ENABLE_ICACHE_ON_STARTUP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the HAL. +# +cdl_component CYGPKG_HAL_DEBUG { + # There is no associated value. +}; + +# > +# Support for GDB stubs +# The HAL implements GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS { + # Implemented by CYGPKG_HAL_CORTEXM_STM32, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS +}; + +# Include GDB stubs in HAL +# This option causes a set of GDB stubs to be included into the +# system. On some target systems the GDB support will be +# provided by other means, for example by a ROM monitor. On +# other targets, especially when building a ROM-booting system, +# the necessary support has to go into the target library +# itself. When GDB stubs are include in a configuration, HAL +# serial drivers must also be included. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS + # CYGINT_HAL_DEBUG_GDB_STUBS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: ! CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR (unknown) == 0 + # --> 1 + # Requires: ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + # CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT == 1 + # --> 0 + # Requires: ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + # CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM == 1 + # --> 0 + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_DIAG == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # DefaultValue: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # DefaultValue: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGBLD_BUILD_COMMON_GDB_STUBS + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # option CYGPKG_HAL_GDB_FILEIO + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Support for external break support in GDB stubs +# The HAL implements external break (or asynchronous interrupt) +# in the GDB stubs for the target. +# +cdl_interface CYGINT_HAL_DEBUG_GDB_STUBS_BREAK { + # Implemented by CYGPKG_HAL_CORTEXM_STM32, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK +}; + +# Include GDB external break support for stubs +# This option causes the GDB stub to add a serial interrupt handler +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT in that it is used when +# GDB stubs are present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + # CYGINT_HAL_DEBUG_GDB_STUBS_BREAK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 0 + # --> 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT +}; + +# Platform does not support CTRLC +# +cdl_interface CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + # ActiveIf: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 +}; + +# Include GDB external break support when no stubs +# This option adds an interrupt handler for the GDB serial line +# which will listen for GDB break packets. This lets you stop the +# target asynchronously when using GDB, usually by hitting Control+C +# or pressing the STOP button. This option differs from +# CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT in that it is used when the GDB +# stubs are NOT present. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_USE_ROM_MONITOR (unknown) == 0 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 0 + # --> 0 + # ActiveIf constraint: CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # CYGINT_HAL_DEBUG_GDB_CTRLC_UNSUPPORTED == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 0 + # --> 1 + # Requires: !CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT == 0 + # --> 1 +}; + +# Include GDB multi-threading debug support +# This option enables some extra HAL code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT { + # ActiveIf constraint: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # CYGSEM_HAL_ROM_MONITOR (unknown) == 0 + # CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT +}; + +# Number of times to retry sending a $O packet +# This option controls the number of attempts that eCos programs +# will make to send a $O packet to a host GDB process. If it is +# set non-zero, then the target process will attempt to resend the +# $O packet data up to this number of retries. Caution: use of +# this option is not recommended as it can thoroughly confuse the +# host GDB process. +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Timeout period for GDB packets +# This option controls the time (in milliseconds) that eCos programs +# will wait for a response when sending packets to a host GDB process. +# If this time elapses, then the packet will be resent, up to some +# maximum number of times (CYGNUM_HAL_DEBUG_GDB_PROTOCOL_RETRIES). +# +cdl_option CYGNUM_HAL_DEBUG_GDB_PROTOCOL_TIMEOUT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# Location of CRC32 table +# The stubs use a 1 kilobyte CRC table that can either be pregenerated +# and placed in ROM, or generated at runtime in RAM. Depending on +# your memory constraints, one of these options may be better. +# +cdl_option CYGDBG_HAL_CRCTABLE_LOCATION { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value RAM + # value_source default + # Default value: RAM + # Legal values: "ROM" "RAM" +}; + +# < +# ROM monitor support +# Support for ROM monitors can be built in to your application. +# It may also be relevant to build your application as a ROM monitor +# itself. Such options are contained here if relevant for your chosen +# platform. The options and ROM monitors available to choose are +# platform-dependent. +# +cdl_component CYGPKG_HAL_ROM_MONITOR { + # There is no associated value. +}; + +# > +# Target has virtual vector support +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT { + # Implemented by CYGPKG_HAL_CORTEXM_STM32, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT + # ActiveIf: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT +}; + +# Target supports baud rate control via vectors +# Whether this target supports the __COMMCTL_GETBAUD +# and __COMMCTL_SETBAUD virtual vector comm control operations. +# +cdl_interface CYGINT_HAL_VIRTUAL_VECTOR_COMM_BAUD_SUPPORT { + # Implemented by CYGPKG_HAL_CORTEXM_STM32, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# Enable use of virtual vector calling interface +# Virtual vector support allows the HAL to let the ROM +# monitor handle certain operations. The virtual vector table +# defines a calling interface between applications running in +# RAM and the ROM monitor. +# +cdl_component CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT { + # ActiveIf constraint: CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + # CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Inherit console settings from ROM monitor +# When this option is set, the application will inherit +# the console as set up by the ROM monitor. This means +# that the application will use whatever channel and +# mangling style was used by the ROM monitor when +# the application was launched. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE { + # This option is not active + # ActiveIf constraint: CYGSEM_HAL_USE_ROM_MONITOR + # CYGSEM_HAL_USE_ROM_MONITOR (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 0 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # Calculated: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN +}; + +# Debug channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the debug channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE { + # Calculated value: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL + # ActiveIf: CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE +}; + +# Console channel is configurable +# This option is a configuration hint - it is enabled +# when the HAL initialization code will make use +# of the console channel configuration option. +# +cdl_option CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE { + # Calculated value: !CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE && !CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE == 0 + # CYGDBG_HAL_DIAG_TO_DEBUG_CHAN == 0 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL + # ActiveIf: CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE +}; + +# Initialize whole of virtual vector table +# This option will cause the whole of the virtual +# vector table to be initialized with dummy values on +# startup. When this option is enabled, all the +# options below must also be enabled - or the +# table would be empty when the application +# launches. +# On targets where older ROM monitors without +# virtual vector support may still be in use, it is +# necessary for RAM applictions to initialize the +# table (since all HAL diagnostics and debug IO +# happens via the table). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR + # CYG_HAL_STARTUP == ROM + # CYGSEM_HAL_USE_ROM_MONITOR (unknown) == 0 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA == 1 + # --> 1 + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # ActiveIf: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +}; + +# Claim virtual vector table entries by default +# By default most virtual vectors will be claimed by +# RAM startup configurations, meaning that the RAM +# application will provide the services. The +# exception is COMMS support (HAL +# diagnostics/debugging IO) which is left in the +# control of the ROM monitor. +# The reasoning behind this is to get as much of the +# code exercised during regular development so it +# is known to be working the few times a new ROM +# monitor or a ROM production configuration is used +# - COMMS are excluded only by necessity in order to +# avoid breaking an existing debugger connections +# (there may be ways around this). +# For production RAM configurations this option can +# be switched off, causing the appliction to rely on +# the ROM monitor for these services, thus +# saving some space. +# Individual vectors may also be left unclaimed, +# controlled by the below options (meaning that the +# associated service provided by the ROM monitor +# will be used). +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT { + # This option is not active + # ActiveIf constraint: !CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA + # DefaultValue: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT +}; + +# Claim reset virtual vectors +# This option will cause the reset and kill_by_reset +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_RESET +}; + +# Claim version virtual vectors +# This option will cause the version +# virtual vectors to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_VERSION { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # --> 1 +}; + +# Claim delay_us virtual vector +# This option will cause the delay_us +# virtual vector to be claimed. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DELAY_US +}; + +# Claim data virtual vectors +# This option will cause the data virtual vectors +# to be claimed. At present there is only one, used +# by the RedBoot ethernet driver to share diag output. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DEFAULT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_DATA +}; + +# Claim comms virtual vectors +# This option will cause the communication tables +# that are part of the virtual vectors mechanism to +# be claimed. Note that doing this may cause an +# existing ROM monitor communication connection to +# be closed. For this reason, the option is disabled +# per default for normal application +# configurations. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE || CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE == 1 + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INHERIT_CONSOLE + # DefaultValue: !CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # Calculated: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # Requires: CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# Do diagnostic IO via virtual vector table +# All HAL IO happens via the virtual vector table / comm +# tables when those tables are supported by the HAL. +# If so desired, the low-level IO functions can +# still be provided by the RAM application by +# enabling the CLAIM_COMMS option. +# +cdl_option CYGSEM_HAL_VIRTUAL_VECTOR_DIAG { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # ActiveIf: CYGPKG_HAL_ARM || CYGPKG_HAL_POWERPC_MPC8xx || CYGPKG_HAL_V85X_V850 || CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + # option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # Requires: !CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGSEM_HAL_VIRTUAL_VECTOR_CLAIM_COMMS +}; + +# < +# < +# Platform defined I/O channels +# Platforms which provide additional I/O channels can implement +# this interface, indicating that the function plf_if_init() +# needs to be called. +# +cdl_interface CYGINT_HAL_PLF_IF_INIT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Platform IDE I/O support +# Platforms which provide IDE controllers can implement +# this interface, indicating that IDE I/O macros are +# available. +# +cdl_interface CYGINT_HAL_PLF_IF_IDE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Saved interrupt state required +# Components requiring access to saved interrupt state via the +# hal_saved_interrupt_state symbol should implement this +# interface. +# +cdl_interface CYGINT_HAL_COMMON_SAVED_INTERRUPT_STATE_REQUIRED { + # Implemented by CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT, active, disabled + # Implemented by CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT, inactive, enabled + # Implemented by CYGFUN_HAL_CORTEXM_STM32_PROFILE_TIMER, inactive, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value +}; + +# File I/O operations via GDB +# This option enables support for various file I/O +# operations using the GDB remote protocol to communicate +# with GDB. The operations are then performed on the +# debugging host by proxy. These operations are only +# currently available by using a system call interface +# to RedBoot. This may change in the future. +# +cdl_option CYGPKG_HAL_GDB_FILEIO { + # This option is not active + # ActiveIf constraint: CYGSEM_REDBOOT_BSP_SYSCALLS + # CYGSEM_REDBOOT_BSP_SYSCALLS (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + # CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS == 0 + # --> 0 +}; + +# Build Compiler sanity checking tests +# Enabling this option causes compiler tests to be built. +# +cdl_option CYGPKG_HAL_BUILD_COMPILER_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") +}; + +# Common HAL tests +# This option specifies the set of tests for the common HAL. +# +cdl_component CYGPKG_HAL_TESTS { + # Calculated value: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGPKG_HAL_BUILD_COMPILER_TESTS == 0 + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # Flavor: data + # Current_value: tests/context tests/basic tests/cache +}; + +# > +# Interface for cache presence +# Some architectures and/or platforms do not have caches. By +# implementing this interface, these can disable the various +# cache-related tests. +# +cdl_interface CYGINT_HAL_TESTS_NO_CACHES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # +}; + +# < +# Cortex-M Architecture +# This package provides generic support for the ARM Cortex-M architecture. +# It is also necessary to select a variant and platform HAL package. +# +cdl_package CYGPKG_HAL_CORTEXM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGHWR_HAL_CORTEXM_BIGENDIAN implies + # is_substr(CYGBLD_GLOBAL_CFLAGS, " -mbig-endian ") && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, " -mbig-endian ") + # CYGHWR_HAL_CORTEXM_BIGENDIAN == 0 + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # --> 1 + # Requires: !CYGHWR_HAL_CORTEXM_BIGENDIAN implies + # !is_substr(CYGBLD_GLOBAL_CFLAGS, " -mbig-endian ") && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, " -mbig-endian ") + # CYGHWR_HAL_CORTEXM_BIGENDIAN == 0 + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # --> 1 + + # The following properties are affected by this value +}; + +# > +# The platform and architecture supports Big Endian operation +# +cdl_interface CYGINT_HAL_CORTEXM_BIGENDIAN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_BIGENDIAN + # ActiveIf: CYGINT_HAL_CORTEXM_BIGENDIAN != 0 +}; + +# Use big-endian mode +# Use the CPU in big-endian mode. +# +cdl_option CYGHWR_HAL_CORTEXM_BIGENDIAN { + # This option is not active + # ActiveIf constraint: CYGINT_HAL_CORTEXM_BIGENDIAN != 0 + # CYGINT_HAL_CORTEXM_BIGENDIAN == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # package CYGPKG_HAL_CORTEXM + # Requires: CYGHWR_HAL_CORTEXM_BIGENDIAN implies + # is_substr(CYGBLD_GLOBAL_CFLAGS, " -mbig-endian ") && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, " -mbig-endian ") + # package CYGPKG_HAL_CORTEXM + # Requires: !CYGHWR_HAL_CORTEXM_BIGENDIAN implies + # !is_substr(CYGBLD_GLOBAL_CFLAGS, " -mbig-endian ") && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, " -mbig-endian ") +}; + +# Cortex-M CPU family +# The Cortex-M architecture has two variants at present. The +# M3 and M4 are based on the ARMV7 architecture specification +# and execute the Thumb2 instruction set. The M4 in addition +# to M3 instruction set has SIMD and optional single precision +# floating point instructions. +# +cdl_option CYGHWR_HAL_CORTEXM { + # Flavor: data + user_value M4 + # value_source user + # Default value: M3 + # Legal values: "M3" "M4" + + # The following properties are affected by this value + # component CYGPKG_HAL_CORTEXM_FPU + # ActiveIf: CYGHWR_HAL_CORTEXM == "M4" + # component CYGBLD_ARCH_CPUFLAGS + # Calculated: CYGHWR_HAL_CORTEXM == "M3" ? " -mcpu=cortex-m3" : + # CYGHWR_HAL_CORTEXM_FPU ? " -mcpu=cortex-m4" : " " + # option CYGBLD_ARCH_CPUFLAGX_M4 + # Calculated: (CYGHWR_HAL_CORTEXM != "M4") ? "-mcpu=cortex-m4" : "no_exclude" + # package CYGPKG_HAL_CORTEXM_STM32 + # Requires: (CYGHWR_HAL_CORTEXM == "M3") || (CYGHWR_HAL_CORTEXM == "M4") + # package CYGPKG_HAL_CORTEXM_STM32 + # Requires: (CYGHWR_HAL_CORTEXM == "M3") || (CYGHWR_HAL_CORTEXM == "M4") + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM == "M4" +}; + +# System tick timer clock +# Select the Cortex-M system tick timer clock source. +# +cdl_option CYGHWR_HAL_CORTEXM_SYSTICK_CLK_SOURCE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value EXTERNAL + # value_source default + # Default value: EXTERNAL + # Legal values: "EXTERNAL" "INTERNAL" +}; + +# Floating Point Support +# Floating point arithmetics can be executed in software or, +# on devices with floating point unit - FPU, in hardware. +# FPU is optional on Cortex-M4 architecture, and is present +# on Cortex-M4F cores. +# +cdl_component CYGPKG_HAL_CORTEXM_FPU { + # ActiveIf constraint: CYGHWR_HAL_CORTEXM == "M4" + # CYGHWR_HAL_CORTEXM == M4 + # --> 1 + + # Calculated value: !CYGHWR_HAL_CORTEXM_FPU ? "SOFT" : + # "HARD: " . CYGHWR_HAL_CORTEXM_FPU_SWITCH + # CYGHWR_HAL_CORTEXM_FPU == 0 + # CYGHWR_HAL_CORTEXM_FPU_SWITCH == 0 + # Flavor: data + # Current_value: SOFT +}; + +# > +# FPU is FPv4-SP-D16 +# +cdl_interface CYGINT_HAL_FPV4_SP_D16 { + # Implemented by CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY, active, enabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_FPV4_SP_D16 + # ActiveIf: CYGINT_HAL_FPV4_SP_D16 + # option CYGHWR_HAL_FPV4_SP_D16 + # Calculated: CYGINT_HAL_FPV4_SP_D16 && CYGHWR_HAL_CORTEXM_FPU +}; + +# FPU present. +# +cdl_interface CYGINT_HAL_CORTEXM_FPU { + # Implemented by CYGINT_HAL_FPV4_SP_D16, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGHWR_HAL_CORTEXM_FPU + # ActiveIf: CYGINT_HAL_CORTEXM_FPU +}; + +# Use hardware FPU +# Cortex-M4F cores have a single precision floating point unit. +# This option enables FPU usage and provides related FPU control +# options. +# Hardware FPU enable, implies Cortex-M4 code generation, and +# build flags shall be set accordingly, including -mcpu=cortex-m4. +# As a side effect, the Cortex_M4 build flag will remain (sticky) +# even if hardware FPU is subsequently disabled. +# +# +cdl_component CYGHWR_HAL_CORTEXM_FPU { + # ActiveIf constraint: CYGINT_HAL_CORTEXM_FPU + # CYGINT_HAL_CORTEXM_FPU == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_HAL_CORTEXM_FPU + # Calculated: !CYGHWR_HAL_CORTEXM_FPU ? "SOFT" : + # "HARD: " . CYGHWR_HAL_CORTEXM_FPU_SWITCH + # option CYGHWR_HAL_FPV4_SP_D16 + # Calculated: CYGINT_HAL_FPV4_SP_D16 && CYGHWR_HAL_CORTEXM_FPU + # component CYGBLD_ARCH_CPUFLAGS + # Calculated: CYGHWR_HAL_CORTEXM == "M3" ? " -mcpu=cortex-m3" : + # CYGHWR_HAL_CORTEXM_FPU ? " -mcpu=cortex-m4" : " " + # option CYGBLD_ARCH_CPUFLAGX_M3 + # Calculated: CYGHWR_HAL_CORTEXM_FPU ? "-mcpu=cortex-m3" : "no_exclude" + # component CYGBLD_ARCH_CPUFLAG_FLOAT_ABI + # Calculated: CYGHWR_HAL_CORTEXM_FPU ? " -mfloat-abi=hard" : "" + # option CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI + # Calculated: CYGHWR_HAL_CORTEXM_FPU ? "-mfloat-abi=soft" : "-mfloat-abi=hard" + # option CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT + # Calculated: CYGHWR_HAL_CORTEXM_FPU ? "-msoft-float" : "-mhard-float" +}; + +# > +# FPU context switch +# This option selects the FPU context switching scheme. +# Straight-forward behaviour is to save and +# restore FPU state on every CPU context save/restore. +# While simple, robust and deterministic, this +# approach can be expensive if the FPU is used by +# few threads. The alternative schemes, available by this +# option, are to use hardware features that allow either: +# - LAZY: Save FPU context only if the thread makes use of +# the FPU. Where only few threads use FPU this should give +# shorter average context switching delay compared to ALL +# scheme. If more than one threads use FPU, the worst context +# switching time is typically worse than the one for ALL +# scheme. +# - ALL: Save FPU context for all threads. This is a simple +# scheme, which if all, or majority of threads use FPU may +# give better average context switching time than LAZY. +# This scheme also includes Lazy Stacking of FPU state +# for exceptions/interrupts. +# - NONE: No FPU state saving, this scheme adds no additional +# delay for saving of FPU state to context switching, but is +# only suitable if maximum one thread uses floating point. +# +cdl_option CYGHWR_HAL_CORTEXM_FPU_SWITCH { + # This option is not active + # The parent CYGHWR_HAL_CORTEXM_FPU is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value LAZY + # value_source default + # Default value: LAZY + # Legal values: "ALL" "LAZY" "NONE" + # Requires: is_active (CYGPKG_KERNEL) implies + # CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST == + # (CYGHWR_HAL_CORTEXM_FPU_SWITCH == "NONE") + # CYGPKG_KERNEL == current + # CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST == 0 + # CYGHWR_HAL_CORTEXM_FPU_SWITCH == 0 + # --> 1 + + # The following properties are affected by this value + # component CYGPKG_HAL_CORTEXM_FPU + # Calculated: !CYGHWR_HAL_CORTEXM_FPU ? "SOFT" : + # "HARD: " . CYGHWR_HAL_CORTEXM_FPU_SWITCH + # option CYGHWR_HAL_CORTEXM_FPU_SWITCH + # Requires: is_active (CYGPKG_KERNEL) implies + # CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST == + # (CYGHWR_HAL_CORTEXM_FPU_SWITCH == "NONE") +}; + +# FPv4-SP-D16 +# FPv4-SP-D16 is ARMv7 architecture single precision floating +# point unit with 16 double precision / 32 single precision +# registers. It is found on Cortex-M4F and Cortex-R5 cores. +# +cdl_option CYGHWR_HAL_FPV4_SP_D16 { + # This option is not active + # The parent CYGHWR_HAL_CORTEXM_FPU is disabled + # ActiveIf constraint: CYGINT_HAL_FPV4_SP_D16 + # CYGINT_HAL_FPV4_SP_D16 == 1 + # --> 1 + + # Calculated value: CYGINT_HAL_FPV4_SP_D16 && CYGHWR_HAL_CORTEXM_FPU + # CYGINT_HAL_FPV4_SP_D16 == 1 + # CYGHWR_HAL_CORTEXM_FPU == 0 + # Flavor: bool + # Current value: 0 + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAG_FPV4SPD16 + # Calculated: CYGHWR_HAL_FPV4_SP_D16 ? " -mfpu=fpv4-sp-d16" : "" + # option CYGBLD_ARCH_CPUFLAGX_FPV4SPD16 + # Calculated: CYGHWR_HAL_FPV4_SP_D16 ? "do_not_exclude" : "-mfpu=fpv4-sp-d16" +}; + +# < +# < +# Architecture optimized endian functions +# Cortex-M architecture implements instructions for endian +# manipulation (byte swapping). If enabled, this feature +# can produce shorter and faster code for that. +# +cdl_option CYGIMP_HAL_ARCH_ENDIAN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Maximum usable priority +# Calculate the maximum exception priority that can be set by interrupts. +# Higher priorities are reserved for the DEBUG and SVC traps. +# +cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_MAX { + # Calculated value: 1<<(8-CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS) + # CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS == 4 + # Flavor: data + # Current_value: 16 +}; + +# Support call-graph profiling +# Calculate whether mcount functions should be built +# to support call-graph profiling. +# +cdl_option CYGBLD_HAL_CORTEXM_MCOUNT { + # This option is not active + # ActiveIf constraint: CYGPKG_PROFILE_GPROF + # CYGPKG_PROFILE_GPROF (unknown) == 0 + # --> 0 + + # Calculated value: CYGPKG_PROFILE_CALLGRAPH + # CYGPKG_PROFILE_CALLGRAPH (unknown) == 0 + # Flavor: bool + # Current value: 0 +}; + +# Linker script +# +cdl_option CYGBLD_LINKER_SCRIPT { + # Calculated value: "src/cortexm.ld" + # Flavor: data + # Current_value: src/cortexm.ld +}; + +# Number of breakpoints supported by the HAL. +# This option determines the number of breakpoints supported by the HAL. +# +cdl_option CYGNUM_HAL_BREAKPOINT_LIST_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 +}; + +# Architecture related build flags +# This component defines flags that code generation dependent on specific +# CPU type or CPU features. +# +cdl_component CYGBLD_ARCH_CPUFLAGS { + # Calculated value: CYGHWR_HAL_CORTEXM == "M3" ? " -mcpu=cortex-m3" : + # CYGHWR_HAL_CORTEXM_FPU ? " -mcpu=cortex-m4" : " " + # CYGHWR_HAL_CORTEXM == M4 + # CYGHWR_HAL_CORTEXM_FPU == 0 + # Flavor: data + # Current_value: + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_ARCH_CPUFLAGX_M3 == no_exclude + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_ARCH_CPUFLAGX_M4 == no_exclude + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI == -mfloat-abi=hard + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT == -mhard-float + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_ARCH_CPUFLAGX_FPV4SPD16 == -mfpu=fpv4-sp-d16 + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_ARCH_CPUFLAGS == " " + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_ARCH_CPUFLAG_FLOAT_ABI == "" + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # CYGBLD_ARCH_CPUFLAG_FPV4SPD16 == "" + # --> 1 + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # CYGBLD_ARCH_CPUFLAGX_M3 == no_exclude + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # CYGBLD_ARCH_CPUFLAGX_M4 == no_exclude + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI == -mfloat-abi=hard + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT == -mhard-float + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # CYGBLD_ARCH_CPUFLAGX_FPV4SPD16 == -mfpu=fpv4-sp-d16 + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # CYGBLD_ARCH_CPUFLAGS == " " + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # CYGBLD_ARCH_CPUFLAG_FLOAT_ABI == "" + # CYGBLD_GLOBAL_LDFLAGS == "-mcpu=cortex-m4 -mthumb -Wl,--gc-sections -Wl,-static -Wl,-n -g -nostdlib" + # CYGBLD_ARCH_CPUFLAG_FPV4SPD16 == "" + # --> 1 + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# > +# Exclude Cortex-M3 build flag +# +cdl_option CYGBLD_ARCH_CPUFLAGX_M3 { + # Calculated value: CYGHWR_HAL_CORTEXM_FPU ? "-mcpu=cortex-m3" : "no_exclude" + # CYGHWR_HAL_CORTEXM_FPU == 0 + # Flavor: data + # Current_value: no_exclude + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# Exclude Cortex-M4 build flag +# +cdl_option CYGBLD_ARCH_CPUFLAGX_M4 { + # Calculated value: (CYGHWR_HAL_CORTEXM != "M4") ? "-mcpu=cortex-m4" : "no_exclude" + # CYGHWR_HAL_CORTEXM == M4 + # Flavor: data + # Current_value: no_exclude + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# Float ABI build flags +# +cdl_component CYGBLD_ARCH_CPUFLAG_FLOAT_ABI { + # Calculated value: CYGHWR_HAL_CORTEXM_FPU ? " -mfloat-abi=hard" : "" + # CYGHWR_HAL_CORTEXM_FPU == 0 + # Flavor: data + # Current_value: + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# > +# Float ABI flag to exclude +# +cdl_option CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI { + # Calculated value: CYGHWR_HAL_CORTEXM_FPU ? "-mfloat-abi=soft" : "-mfloat-abi=hard" + # CYGHWR_HAL_CORTEXM_FPU == 0 + # Flavor: data + # Current_value: -mfloat-abi=hard + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# Alt. float flag to exclude +# +cdl_option CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT { + # Calculated value: CYGHWR_HAL_CORTEXM_FPU ? "-msoft-float" : "-mhard-float" + # CYGHWR_HAL_CORTEXM_FPU == 0 + # Flavor: data + # Current_value: -mhard-float + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# FPv4-SP-D16 flags +# +cdl_component CYGBLD_ARCH_CPUFLAG_FPV4SPD16 { + # Calculated value: CYGHWR_HAL_FPV4_SP_D16 ? " -mfpu=fpv4-sp-d16" : "" + # CYGHWR_HAL_FPV4_SP_D16 == 0 + # Flavor: data + # Current_value: + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# > +# Exclude FPv4-SP-D16 flag +# +cdl_option CYGBLD_ARCH_CPUFLAGX_FPV4SPD16 { + # Calculated value: CYGHWR_HAL_FPV4_SP_D16 ? "do_not_exclude" : "-mfpu=fpv4-sp-d16" + # CYGHWR_HAL_FPV4_SP_D16 == 0 + # Flavor: data + # Current_value: -mfpu=fpv4-sp-d16 + + # The following properties are affected by this value + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_CFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # + # component CYGBLD_ARCH_CPUFLAGS + # Requires: + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M3) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_M4) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FLOAT_ABI) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_HARDSOFT_FLOAT) && + # !is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGX_FPV4SPD16) && + # + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAGS) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FLOAT_ABI) && + # is_substr(CYGBLD_GLOBAL_LDFLAGS, CYGBLD_ARCH_CPUFLAG_FPV4SPD16) + # +}; + +# < +# < +# < +# Cortex-M3/-M4 STM32 Variant +# This package provides generic support for the ST Cortex-M based STM32 +# microcontroller family. +# It is also necessary to select a variant and platform HAL package. +# +cdl_package CYGPKG_HAL_CORTEXM_STM32 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: (CYGHWR_HAL_CORTEXM == "M3") || (CYGHWR_HAL_CORTEXM == "M4") + # CYGHWR_HAL_CORTEXM == M4 + # CYGHWR_HAL_CORTEXM == M4 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_IO_SERIAL_CORTEXM_STM32 + # ActiveIf: CYGPKG_HAL_CORTEXM_STM32 +}; + +# > +# STM32 processor selection +# The options within this component allow you to select which STM32 +# processor is in use. +# +cdl_component CYGHWR_HAL_CORTEXM_STM32_SELECTION { + # There is no associated value. +}; + +# > +# STM32 processor variant in use +# The STM32 has several variants, the main differences +# being in the size of on-chip FLASH and SRAM +# and numbers of some peripherals. This option +# allows the platform HAL to select the specific +# microcontroller fitted. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32 { + # Flavor: data + user_value F407VG + # value_source user + # Default value: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1") ? CYGHWR_HAL_CORTEXM_STM32_F1 : (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") ? CYGHWR_HAL_CORTEXM_STM32_F2 : CYGHWR_HAL_CORTEXM_STM32_F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_F1 == 0 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_F2 == 0 + # CYGHWR_HAL_CORTEXM_STM32_F4 == F407VG + # --> F407VG + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32_F1 + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F1 + # option CYGHWR_HAL_CORTEXM_STM32_F2 + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F2 + # option CYGHWR_HAL_CORTEXM_STM32_F4 + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F4 + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # +}; + +# Processor family in use +# Which family of STM32 processors is in use. This will +# usually be the leading part of the processor model name. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_FAMILY { + # Flavor: data + user_value F4 + # value_source user + # Default value: F1 + # Legal values: "F1" "F2" "F4" + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32 + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1") ? CYGHWR_HAL_CORTEXM_STM32_F1 : (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") ? CYGHWR_HAL_CORTEXM_STM32_F2 : CYGHWR_HAL_CORTEXM_STM32_F4 + # option CYGHWR_HAL_CORTEXM_STM32 + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1") ? CYGHWR_HAL_CORTEXM_STM32_F1 : (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") ? CYGHWR_HAL_CORTEXM_STM32_F2 : CYGHWR_HAL_CORTEXM_STM32_F4 + # option CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE + # ActiveIf: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # option CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE + # ActiveIf: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # option CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE + # Calculated: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # option CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE + # Calculated: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # option CYGHWR_HAL_CORTEXM_STM32_F1 + # ActiveIf: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1" + # option CYGHWR_HAL_CORTEXM_STM32_F2 + # ActiveIf: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2" + # option CYGHWR_HAL_CORTEXM_STM32_F4 + # ActiveIf: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4" + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV <= 16) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") && (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == "HSI")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 2) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV >= 2) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV >= 2) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL + # Requires: (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 16) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 432) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 432) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV + # ActiveIf: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV + # ActiveIf: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV + # ActiveIf: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV + # ActiveIf: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4" && + # CYGHWR_HAL_CORTEXM_STM32_F4 == "F407VG" + # option CYGNUM_DEVS_FLASH_STM32_PARALLELISM + # ActiveIf: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4")) + # option CYGNUM_DEVS_FLASH_STM32_PARALLELISM + # ActiveIf: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4")) +}; + +# Part belongs to ST Hi-Performance family +# Indicates that this part conforms to the I/O +# definitions for the Hi-Performance family of +# devices. Currently this includes the STM32 F2 and F4 +# devices. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_FAMILY_HIPERFORMANCE { + # ActiveIf constraint: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # --> 1 + + # Calculated value: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # Flavor: bool + # Current value: 1 +}; + +# F1 processor family selection +# This option specifies which member of the STM32F1 family is +# in use. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_F1 { + # This option is not active + # ActiveIf constraint: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1" + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value F103ZE + # value_source default + # Default value: F103ZE + # Legal values: "F103RC" "F103VC" "F103ZC" + # "F103RD" "F103VD" "F103ZD" + # "F103RE" "F103VE" "F103ZE" + # "F105R8" "F105V8" + # "F105RB" "F105VB" + # "F105RC" "F105VC" + # "F107RB" "F107VB" + # "F107RC" "F107VC" + # + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F1 + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32_F1 == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32 + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1") ? CYGHWR_HAL_CORTEXM_STM32_F1 : (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") ? CYGHWR_HAL_CORTEXM_STM32_F2 : CYGHWR_HAL_CORTEXM_STM32_F4 + # option CYGHWR_HAL_CORTEXM_STM32_F1 + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F1 +}; + +# F2 processor family selection +# This option specifies which member of the STM32F2 family is +# in use. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_F2 { + # This option is not active + # ActiveIf constraint: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2" + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value F207IG + # value_source default + # Default value: F207IG + # Legal values: "F205RB" "F205RC" "F205RE" "F205RF" "F205RG" + # "F205VB" "F205VC" "F205VE" "F205VF" "F205VG" + # "F205ZB" "F205ZC" "F205ZE" "F205ZF" "F205ZG" + # "F207VB" "F207VC" "F207VE" "F207VF" "F207VG" + # "F207ZB" "F207ZC" "F207ZE" "F207ZF" "F207ZG" + # "F207IB" "F207IC" "F207IE" "F207IF" "F207IG" + # + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F2 + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32_F2 == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32 + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1") ? CYGHWR_HAL_CORTEXM_STM32_F1 : (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") ? CYGHWR_HAL_CORTEXM_STM32_F2 : CYGHWR_HAL_CORTEXM_STM32_F4 + # option CYGHWR_HAL_CORTEXM_STM32_F2 + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F2 +}; + +# F4 processor family selection +# This option specifies which member of the STM32F4 family is +# in use. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_F4 { + # ActiveIf constraint: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4" + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # --> 1 + + # Flavor: data + user_value F407VG + # value_source user + # Default value: F407IG + # Legal values: "F405RG" "F405VG" "F405ZG" + # "F415RG" "F415VG" "F415ZG" + # "F407IG" "F407VG" "F407ZG" + # "F407IE" "F407VE" "F407ZE" + # "F417IG" "F417VG" "F417ZG" + # "F417IE" "F417VE" "F417ZE" + # + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F4 + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32_F4 == F407VG + # --> 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32 + # DefaultValue: (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F1") ? CYGHWR_HAL_CORTEXM_STM32_F1 : (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") ? CYGHWR_HAL_CORTEXM_STM32_F2 : CYGHWR_HAL_CORTEXM_STM32_F4 + # option CYGHWR_HAL_CORTEXM_STM32_F4 + # Requires: CYGHWR_HAL_CORTEXM_STM32 == CYGHWR_HAL_CORTEXM_STM32_F4 + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4" && + # CYGHWR_HAL_CORTEXM_STM32_F4 == "F407VG" +}; + +# < +# Part belongs to connectivity family +# Indicates that this part belongs to the connectivity +# family of devices. These have slightly different interrupt +# and GPIO layouts to the original STM32 F103 devices. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY { + # Flavor: bool + user_value 1 + # value_source user + # Default value: (CYGHWR_HAL_CORTEXM_STM32 == "F105R8") || (CYGHWR_HAL_CORTEXM_STM32 == "F105V8") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F105RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F105VC") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RB") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VB") || + # (CYGHWR_HAL_CORTEXM_STM32 == "F107RC") || (CYGHWR_HAL_CORTEXM_STM32 == "F107VC") || + # (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4") + # + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32 == F407VG + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # --> 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: !CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV <= 2) + # option CYGHWR_HAL_STM32_SPI1_REMAP + # ActiveIf: CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # option CYGHWR_HAL_STM32_SPI3_REMAP + # ActiveIf: CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY +}; + +# CPU priority levels +# This option defines the number of bits used to +# encode the exception priority levels that this +# variant of the Cortex-M CPU implements. +# +cdl_option CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS { + # Calculated value: 4 + # Flavor: data + # Current_value: 4 + + # The following properties are affected by this value + # option CYGNUM_HAL_CORTEXM_PRIORITY_MAX + # Calculated: 1<<(8-CYGNUM_HAL_CORTEXM_PRIORITY_LEVEL_BITS) +}; + +# Clock setup calculations +# +cdl_component CYGHWR_HAL_CORTEXM_STM32_CLOCK { + # There is no associated value. +}; + +# > +# PLL input source +# This sets whether the PLL will be driven by the external +# high-speed clock (HSE), or internal high-speed clock (HSI). +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value HSE + # value_source default + # Default value: HSE + # Legal values: "HSI" "HSE" + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") && (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == "HSI")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 2) + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == "HSE" +}; + +# PLL pre-divider +# This option corresponds to the divider used before input to the PLL. +# On non-connectivity parts, you can only divide by 2 or 1. On other +# F1 parts, if using HSI as the clock source, then that is automatically +# divided by 2. If using HSE as the clock source, then this value corresponds +# to the PREDIV1 field of register RCC_CFGR2. On F2 and F4 parts, this value +# corresponds to the PLLM field of RCC_PLLCFGR. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV { + # Flavor: data + user_value 8 + # value_source user + # Default value: 1 + # Legal values: 1 to 63 + # Requires: !CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV <= 2) + # CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY == 1 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 8 + # --> 1 + # Requires: (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV <= 16) + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 8 + # --> 1 + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") && (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == "HSI")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 2) + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == HSE + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 8 + # --> 1 + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV >= 2) + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 8 + # --> 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: !CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV <= 2) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV <= 16) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") && (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == "HSI")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 2) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV >= 2) + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 8 +}; + +# PLL multiplier +# This value is used to multiply up the PLL input. On the F1 it corresponds +# to the PLLMUL field of RCC_CFGR. On the F2 and F4 it corresponds to the PLLN +# field of RCC_PLLCFGR. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL { + # Flavor: data + user_value 336 + # value_source user + # Default value: 9 + # Legal values: 2 to 432 + # Requires: (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 16) + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL == 336 + # --> 1 + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 432) + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL == 336 + # --> 1 + + # The following properties are affected by this value + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL + # Requires: (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F1") implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 16) + # option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL + # Requires: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) implies (CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL <= 432) + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL == 336 +}; + +# SYSCLK divider +# This value is used to divide down the PLL output for use as +# the SYSCLK clock. This corresponds to the PLLP field of +# RCC_PLLCFGR +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV { + # ActiveIf constraint: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # --> 1 + + # Flavor: data + user_value 4 + # value_source user + # Default value: 4 + # Legal values: 2 4 6 8 + + # The following properties are affected by this value + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV == 4 +}; + +# HCLK divider +# Divider for AHB +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Legal values: 1 2 4 8 16 64 128 256 512 + + # The following properties are affected by this value + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV == 1 +}; + +# PCLK1 divider +# Divider for APB1 +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV { + # Flavor: data + user_value 4 + # value_source user + # Default value: 2 + # Legal values: 1 2 4 8 16 + + # The following properties are affected by this value + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV == 4 +}; + +# PCLK2 divider +# Divider for APB2 +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV { + # Flavor: data + user_value 2 + # value_source user + # Default value: 1 + # Legal values: 1 2 4 8 16 + + # The following properties are affected by this value + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV == 2 +}; + +# PLLQ divider +# This PLL divider is used in the F2 and F4 families to divide down the +# PLL output clock (VCO clock) for use by the USB OTG FS, SDIO +# and RNG peripherals. USB OTG FS requires a 48MHz clock and +# other peripherals require a clock no greater than 48MHz. +# +cdl_option CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV { + # ActiveIf constraint: ((CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F2") || (CYGHWR_HAL_CORTEXM_STM32_FAMILY=="F4")) + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # --> 1 + + # Flavor: data + user_value 7 + # value_source user + # Default value: 10 + # Legal values: 4 to 15 + + # The following properties are affected by this value + # package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV == 7 +}; + +# < +# Clock interrupt ISR priority +# Set clock ISR priority to lowest priority. +# +cdl_option CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY { + # Calculated value: 0xE0 + # Flavor: data + # Current_value: 0x000000E0 + + # The following properties are affected by this value + # option CYGNUM_KERNEL_COUNTERS_CLOCK_ISR_PRIORITY + # DefaultValue: is_loaded(CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY) ? + # CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY : 1 + # option CYGNUM_KERNEL_COUNTERS_CLOCK_ISR_PRIORITY + # DefaultValue: is_loaded(CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY) ? + # CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY : 1 +}; + +# Real-time clock constants +# +cdl_component CYGNUM_HAL_RTC_CONSTANTS { + # There is no associated value. +}; + +# > +# Real-time clock numerator +# +cdl_option CYGNUM_HAL_RTC_NUMERATOR { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 1000000000 + # value_source default + # Default value: 1000000000 +}; + +# Real-time clock denominator +# +cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + # Flavor: data + user_value 1000 + # value_source user + # Default value: 100 + + # The following properties are affected by this value + # option CYGNUM_HAL_RTC_PERIOD + # DefaultValue: 1000000 / CYGNUM_HAL_RTC_DENOMINATOR +}; + +# Real-time clock period +# The period defined here is something of a fake, it is expressed +# in terms of a notional 1MHz clock. The value actually installed +# in the hardware is calculated from the current settings of the +# clock generation hardware. +# +cdl_option CYGNUM_HAL_RTC_PERIOD { + # Flavor: data + user_value 1000 + # value_source user + # Default value: 1000000 / CYGNUM_HAL_RTC_DENOMINATOR + # CYGNUM_HAL_RTC_DENOMINATOR == 1000 + # --> 1000 +}; + +# < +# Platform has UART0 serial port +# The platform has a socket on UART0. +# +cdl_interface CYGINT_HAL_STM32_UART0 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 + # DefaultValue: CYGINT_HAL_STM32_UART0>0 +}; + +# Platform has UART1 serial port +# The platform has a socket on UART1. +# +cdl_interface CYGINT_HAL_STM32_UART1 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 + # DefaultValue: CYGINT_HAL_STM32_UART1>0 +}; + +# Platform has UART2 serial port +# The platform has a socket on UART2. +# +cdl_interface CYGINT_HAL_STM32_UART2 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 + # DefaultValue: CYGINT_HAL_STM32_UART2>0 +}; + +# Platform has UART3 serial port +# The platform has a socket on UART3. +# +cdl_interface CYGINT_HAL_STM32_UART3 { + # Implemented by CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 + # DefaultValue: CYGINT_HAL_STM32_UART3>0 +}; + +# Platform has UART4 serial port +# The platform has a socket on UART4. +# +cdl_interface CYGINT_HAL_STM32_UART4 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 + # DefaultValue: CYGINT_HAL_STM32_UART4>0 +}; + +# Platform has UART5 serial port +# The platform has a socket on UART5. +# +cdl_interface CYGINT_HAL_STM32_UART5 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5 + # DefaultValue: CYGINT_HAL_STM32_UART5>0 +}; + +# Remap UART0 (USART1) pins +# Remap UART0 (USART1) to alternate set of pins. +# This will usually be set by the platform +# HAL to reflect the configuration of the hardware. +# +cdl_option CYGHWR_HAL_STM32_UART0_REMAP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Remap UART1 (USART2) pins +# Remap UART1 (USART2) to alternate set of pins. +# This will usually be set by the platform +# HAL to reflect the configuration of the hardware. +# +cdl_option CYGHWR_HAL_STM32_UART1_REMAP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Remap UART2 (USART3) pins +# Remap UART2 (USART3) to alternate set of pins. +# This will usually be set by the platform +# HAL to reflect the configuration of the hardware. +# +cdl_option CYGHWR_HAL_STM32_UART2_REMAP { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value NONE + # value_source default + # Default value: NONE + # Legal values: "NONE" "PARTIAL" "FULL" +}; + +# Remap I2C bus 1 pins +# Remap I2C bus 1 to alternate set of pins. +# This will usually be set by the platform +# HAL to reflect the configuration of the hardware. +# +cdl_option CYGHWR_HAL_STM32_I2C1_REMAP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Remap SPI bus 1 pins +# Remap SPI bus 1 to alternate set of pins. +# This will usually be set by the platform +# HAL to reflect the configuration of the hardware. +# +cdl_option CYGHWR_HAL_STM32_SPI1_REMAP { + # ActiveIf constraint: CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Remap SPI bus 3 pins +# Remap SPI bus 3 to alternate set of pins. +# This will usually be set by the platform +# HAL to reflect the configuration of the hardware. +# This option is only available on connectivity line +# devices. +# +cdl_option CYGHWR_HAL_STM32_SPI3_REMAP { + # ActiveIf constraint: CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY + # CYGHWR_HAL_CORTEXM_STM32_CONNECTIVITY == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Use TIM2 for gprof profiling +# The STM32 variant HAL can provide support for gprof-based +# profiling. This uses timer TIM2 to generate regular interrupts, +# and the interrupt handler records the PC at the time of the +# interrupt. Disable this option if you wish to provide +# an alternative profiling timer implementation. +# +cdl_option CYGFUN_HAL_CORTEXM_STM32_PROFILE_TIMER { + # This option is not active + # ActiveIf constraint: CYGPKG_PROFILE_GPROF + # CYGPKG_PROFILE_GPROF (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_HAL_CORTEXM_STM32_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the STM32 variant HAL package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_CORTEXM_STM32_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the STM32 variant HAL package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_HAL_CORTEXM_STM32_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# STM32 tests +# This option specifies the set of tests for the STM32 HAL. +# +cdl_option CYGPKG_HAL_CORTEXM_STM32_TESTS { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Calculated value: "tests/timers" + # Flavor: data + # Current_value: tests/timers +}; + +# STMicroelectronics STM32F4-Discovery board HAL +# doc: ref/hal-cortexm-stm32f4discovery-part.html +# The STM32F4-Discovery HAL package provides the support needed to run +# eCos on the STMicroelectronics STM32F4-Discovery board. +# +cdl_package CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGHWR_HAL_CORTEXM == "M4" + # CYGHWR_HAL_CORTEXM == M4 + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_FAMILY == "F4" && + # CYGHWR_HAL_CORTEXM_STM32_F4 == "F407VG" + # CYGHWR_HAL_CORTEXM_STM32_FAMILY == F4 + # CYGHWR_HAL_CORTEXM_STM32_F4 == F407VG + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == "HSE" + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_SOURCE == HSE + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 8 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_PREDIV == 8 + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL == 336 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLL_MUL == 336 + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV == 4 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_SYSCLK_DIV == 4 + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV == 7 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PLLQ_DIV == 7 + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV == 1 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_HCLK_DIV == 1 + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV == 4 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK1_DIV == 4 + # --> 1 + # Requires: CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV == 2 + # CYGHWR_HAL_CORTEXM_STM32_CLOCK_PCLK2_DIV == 2 + # --> 1 +}; + +# > +# Startup type +# Select 'JTAG' when building applications to download into on-chip RAM +# using the on-board ST-LINK/V2 serial wire debugging interface. Select +# 'ROM' when building an application which will be written to on-chip +# Flash memory for immediate execution on system reset. +# +cdl_component CYG_HAL_STARTUP { + # Flavor: data + user_value ROM + # value_source user + # Default value: JTAG + # Legal values: "JTAG" "ROM" + + # The following properties are affected by this value + # component CYGHWR_MEMORY_LAYOUT + # Calculated: (CYG_HAL_STARTUP == "ROM" ) ? "cortexm_stm32f4discovery_rom" : + # (CYG_HAL_STARTUP == "JTAG" ) ? "cortexm_stm32f4discovery_jtag" : + # "undefined" + # component CYGHWR_MEMORY_LAYOUT + # Calculated: (CYG_HAL_STARTUP == "ROM" ) ? "cortexm_stm32f4discovery_rom" : + # (CYG_HAL_STARTUP == "JTAG" ) ? "cortexm_stm32f4discovery_jtag" : + # "undefined" + # option CYGSEM_HAL_INSTALL_MMU_TABLES + # DefaultValue: CYG_HAL_STARTUP != "RAM" + # component CYGDBG_HAL_DIAG_TO_DEBUG_CHAN + # DefaultValue: (CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS || CYG_HAL_STARTUP == "RAM") ? 1 : 0 + # option CYGSEM_HAL_VIRTUAL_VECTOR_INIT_WHOLE_TABLE + # DefaultValue: CYG_HAL_STARTUP != "RAM" || !CYGSEM_HAL_USE_ROM_MONITOR +}; + +# Memory layout +# +cdl_component CYGHWR_MEMORY_LAYOUT { + # Calculated value: (CYG_HAL_STARTUP == "ROM" ) ? "cortexm_stm32f4discovery_rom" : + # (CYG_HAL_STARTUP == "JTAG" ) ? "cortexm_stm32f4discovery_jtag" : + # "undefined" + # CYG_HAL_STARTUP == ROM + # CYG_HAL_STARTUP == ROM + # Flavor: data + # Current_value: cortexm_stm32f4discovery_rom + + # The following properties are affected by this value + # option CYGHWR_MEMORY_LAYOUT_LDI + # Calculated: "<pkgconf/mlt_" . CYGHWR_MEMORY_LAYOUT . ".ldi>" + # option CYGHWR_MEMORY_LAYOUT_H + # Calculated: "<pkgconf/mlt_" . CYGHWR_MEMORY_LAYOUT . ".h>" +}; + +# > +# Memory layout linker script fragment +# +cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + # Calculated value: "<pkgconf/mlt_" . CYGHWR_MEMORY_LAYOUT . ".ldi>" + # CYGHWR_MEMORY_LAYOUT == cortexm_stm32f4discovery_rom + # Flavor: data + # Current_value: <pkgconf/mlt_cortexm_stm32f4discovery_rom.ldi> +}; + +# Memory layout header file +# +cdl_option CYGHWR_MEMORY_LAYOUT_H { + # Calculated value: "<pkgconf/mlt_" . CYGHWR_MEMORY_LAYOUT . ".h>" + # CYGHWR_MEMORY_LAYOUT == cortexm_stm32f4discovery_rom + # Flavor: data + # Current_value: <pkgconf/mlt_cortexm_stm32f4discovery_rom.h> +}; + +# < +# Input clock frequency +# Main clock input. +# +cdl_option CYGARC_HAL_CORTEXM_STM32_INPUT_CLOCK { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8000000 + # value_source default + # Default value: 8000000 + # Legal values: 0 to 1000000000 +}; + +# Flash read wait states +# This option gives the number of wait states to use for accessing +# the flash for reads. The correct setting for this value depends +# on both the CPU clock (HCLK) frequency and the voltage. Consult +# the STM32 Flash programming manual (PM0059) for appropriate +# values for different clock speeds or voltages. The default of +# 5 reflects a supply voltage of 3.3V and HCLK of 168MHz. +# +cdl_option CYGNUM_HAL_CORTEXM_STM32_FLASH_WAIT_STATES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 5 + # value_source default + # Default value: 5 + # Legal values: 0 to 7 +}; + +# Number of communication channels on the board +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + # Calculated value: 1 + # Flavor: data + # Current_value: 1 +}; + +# Debug serial port +# The STM32F4-Discovery board has one serial port enabled. This option +# informs the rest of the system which port will be used to connect +# to a host running GDB. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + # ActiveIf constraint: CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE + # CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE == 1 + # --> 1 + + # Calculated value: 0 + # Flavor: data + # Current_value: 0 +}; + +# Diagnostic serial port +# The STM32F4-Discovery board has one serial port enabled. This option +# informs the rest of the system which port will be used for +# diagnostic output. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + # ActiveIf constraint: CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE + # CYGPRI_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_CONFIGURABLE == 1 + # --> 1 + + # Calculated value: 0 + # Flavor: data + # Current_value: 0 +}; + +# Diagnostic serial port baud rate +# This option controls the default baud rate used for the +# console connection. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 115200 + # value_source default + # Default value: 115200 + # Legal values: 9600 19200 38400 57600 115200 + + # The following properties are affected by this value + # option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD + # Calculated: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL0_BAUD + # DefaultValue: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BAUD + # DefaultValue: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_BAUD + # DefaultValue: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_BAUD + # DefaultValue: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BAUD + # DefaultValue: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BAUD + # DefaultValue: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD +}; + +# Debug serial port baud rate +# This option controls the default baud rate used for the +# GDB connection. +# +cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + # Calculated value: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD == 115200 + # Flavor: data + # Current_value: 115200 +}; + +# STM32F4-Discovery HAL build options +# Package specific build options including control over +# compiler flags used only in building this HAL package. +# +cdl_component CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags +# for building this HAL. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Werror + # value_source default + # Default value: -Werror +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags +# for building this HAL. These flags are +# removed from the set of global flags if +# present. +# +cdl_option CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# STM32F4-Discovery tests +# This option specifies the set of tests for the STM32F4-Discovery HAL. +# +cdl_option CYGPKG_HAL_CORTEXM_STM32_STM32F4DISCOVERY_TESTS { + # Calculated value: "tests/gpio" + # Flavor: data + # Current_value: tests/gpio +}; + +# < +# < +# < +# < +# I/O sub-system +# doc: ref/io.html +# The eCos system is supplied with a number of different +# device drivers. This option enables the basic I/O system +# support which is the basis for all drivers. +# +cdl_package CYGPKG_IO { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ERROR + # CYGPKG_ERROR == current + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_IO_SERIAL + # ActiveIf: CYGPKG_IO + # package CYGPKG_LIBC_STDIO + # Requires: CYGPKG_IO +}; + +# > +# Debug I/O sub-system +# This option enables verbose messages to be displayed on the +# system 'diag' device during I/O system initialization. +# +cdl_option CYGDBG_IO_INIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Basic support for file based I/O +# This option control support for simple file I/O primitives. It is only +# present if the FILEIO package is not included. +# +cdl_component CYGPKG_IO_FILE_SUPPORT { + # ActiveIf constraint: !CYGPKG_IO_FILEIO + # CYGPKG_IO_FILEIO (unknown) == 0 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Number of open files +# This option controls the number of open files. +# +cdl_option CYGPKG_IO_NFILE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 +}; + +# < +# Serial device drivers +# doc: ref/io.html +# This option enables drivers for basic I/O services on +# serial devices. +# +cdl_package CYGPKG_IO_SERIAL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO + # CYGPKG_IO == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ERROR + # CYGPKG_ERROR == current + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_IO_SERIAL_CORTEXM_STM32 + # ActiveIf: CYGPKG_IO_SERIAL +}; + +# > +# Support non-blocking read and write calls +# This option enables extra code in the generic serial driver +# which allows clients to switch read() and write() call +# semantics from blocking to non-blocking. +# +cdl_option CYGOPT_IO_SERIAL_SUPPORT_NONBLOCKING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Driver requires block transfer callback functions +# Some low-level drivers can be optimized to transfer blocks +# of data instead of a single character at a time. These usually +# rely on a hardware FIFO of some sort. +# +cdl_interface CYGINT_IO_SERIAL_BLOCK_TRANSFER { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Serial driver supports line status +# +cdl_interface CYGINT_IO_SERIAL_LINE_STATUS_HW { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS + # Requires: CYGINT_IO_SERIAL_LINE_STATUS_HW > 0 + # option CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS + # DefaultValue: 0 != CYGINT_IO_SERIAL_LINE_STATUS_HW +}; + +# Support line status callbacks +# This option indicates that if the serial driver supports it, +# serial line status and modem status information should be +# propagated to higher layers via callbacks. +# +cdl_option CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 != CYGINT_IO_SERIAL_LINE_STATUS_HW + # CYGINT_IO_SERIAL_LINE_STATUS_HW == 0 + # --> 0 + # Requires: CYGINT_IO_SERIAL_LINE_STATUS_HW > 0 + # CYGINT_IO_SERIAL_LINE_STATUS_HW == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGOPT_IO_SERIAL_FLOW_CONTROL_HW + # Requires: CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS + # option CYGOPT_IO_SERIAL_FLOW_CONTROL_HW + # DefaultValue: CYGINT_IO_SERIAL_FLOW_CONTROL_HW > 0 ? CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS : 0 +}; + +# Flow control +# This component contains options related to flow control. +# +cdl_component CYGPKG_IO_SERIAL_FLOW_CONTROL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: (CYGOPT_IO_SERIAL_FLOW_CONTROL_SOFTWARE || CYGOPT_IO_SERIAL_FLOW_CONTROL_HW) + # CYGOPT_IO_SERIAL_FLOW_CONTROL_SOFTWARE == 0 + # CYGOPT_IO_SERIAL_FLOW_CONTROL_HW == 0 + # --> 0 +}; + +# > +# Software flow control +# This component enables support of software flow control. +# +cdl_component CYGOPT_IO_SERIAL_FLOW_CONTROL_SOFTWARE { + # This option is not active + # The parent CYGPKG_IO_SERIAL_FLOW_CONTROL is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_FLOW_CONTROL + # Requires: (CYGOPT_IO_SERIAL_FLOW_CONTROL_SOFTWARE || CYGOPT_IO_SERIAL_FLOW_CONTROL_HW) +}; + +# > +# Start character +# This option specifies the ascii character used to +# indicate that transmission should start. +# +cdl_option CYGDAT_IO_SERIAL_FLOW_CONTROL_XON_CHAR { + # This option is not active + # The parent CYGOPT_IO_SERIAL_FLOW_CONTROL_SOFTWARE is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 17 + # value_source default + # Default value: 17 + # Legal values: 0 to 255 +}; + +# Stop character +# This option specifies the ascii character used to +# indicate that transmission should stop. +# +cdl_option CYGDAT_IO_SERIAL_FLOW_CONTROL_XOFF_CHAR { + # This option is not active + # The parent CYGOPT_IO_SERIAL_FLOW_CONTROL_SOFTWARE is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 19 + # value_source default + # Default value: 19 + # Legal values: 0 to 255 +}; + +# < +# Hardware flow control +# If the hardware supports it, this option allows hardware +# flow control to be enabled. This may be in the form of +# either or both of RTS/CTS, or DSR/DTR flow control. +# +cdl_option CYGOPT_IO_SERIAL_FLOW_CONTROL_HW { + # This option is not active + # The parent CYGPKG_IO_SERIAL_FLOW_CONTROL is disabled + # ActiveIf constraint: CYGINT_IO_SERIAL_FLOW_CONTROL_HW > 0 + # CYGINT_IO_SERIAL_FLOW_CONTROL_HW == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_IO_SERIAL_FLOW_CONTROL_HW > 0 ? CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS : 0 + # CYGINT_IO_SERIAL_FLOW_CONTROL_HW == 0 + # CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS == 0 + # --> 0 + # Requires: CYGINT_IO_SERIAL_FLOW_CONTROL_HW > 0 + # CYGINT_IO_SERIAL_FLOW_CONTROL_HW == 0 + # --> 0 + # Requires: CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS + # CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_FLOW_CONTROL + # Requires: (CYGOPT_IO_SERIAL_FLOW_CONTROL_SOFTWARE || CYGOPT_IO_SERIAL_FLOW_CONTROL_HW) +}; + +# Serial h/w supports hardware flow control +# +cdl_interface CYGINT_IO_SERIAL_FLOW_CONTROL_HW { + # No options implement this inferface + # This option is not active + # The parent CYGPKG_IO_SERIAL_FLOW_CONTROL is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGOPT_IO_SERIAL_FLOW_CONTROL_HW + # ActiveIf: CYGINT_IO_SERIAL_FLOW_CONTROL_HW > 0 + # option CYGOPT_IO_SERIAL_FLOW_CONTROL_HW + # Requires: CYGINT_IO_SERIAL_FLOW_CONTROL_HW > 0 + # option CYGOPT_IO_SERIAL_FLOW_CONTROL_HW + # DefaultValue: CYGINT_IO_SERIAL_FLOW_CONTROL_HW > 0 ? CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS : 0 +}; + +# Default flow control method +# This option allows a default flow control method +# to be defined. Combinations of flow control methods +# may also be set, but this is only possible by +# using the cyg_io_set_config() API in source code. +# +cdl_option CYGDAT_IO_SERIAL_FLOW_CONTROL_DEFAULT { + # This option is not active + # The parent CYGPKG_IO_SERIAL_FLOW_CONTROL is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value NONE + # value_source default + # Default value: NONE + # Legal values: "NONE" "XONXOFF" "RTSCTS" "DSRDTR" +}; + +# Rx flow control low water mark +# This sets the water mark used for determining +# when to disable flow control, expressed +# as a percentage of the buffer size. When the +# receive buffer size is lower than this percentage, +# if the transmitter had previously been throttled, it +# will now be informed it can restart. +# +cdl_option CYGNUM_IO_SERIAL_FLOW_CONTROL_LOW_WATER_PERCENT { + # This option is not active + # The parent CYGPKG_IO_SERIAL_FLOW_CONTROL is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 33 + # value_source default + # Default value: 33 + # Legal values: 1 to 100 + + # The following properties are affected by this value + # option CYGNUM_IO_SERIAL_FLOW_CONTROL_HIGH_WATER_PERCENT + # Requires: CYGNUM_IO_SERIAL_FLOW_CONTROL_HIGH_WATER_PERCENT >= CYGNUM_IO_SERIAL_FLOW_CONTROL_LOW_WATER_PERCENT +}; + +# Rx flow control high water mark +# This sets the water mark used for determining +# when to enable flow control, expressed +# as a percentage of the buffer size. When the +# receive buffer size exceeds this percentage, +# signals are sent to the transmitter to tell it +# to throttle tranmission. +# +cdl_option CYGNUM_IO_SERIAL_FLOW_CONTROL_HIGH_WATER_PERCENT { + # This option is not active + # The parent CYGPKG_IO_SERIAL_FLOW_CONTROL is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 66 + # value_source default + # Default value: 66 + # Legal values: 1 to 100 + # Requires: CYGNUM_IO_SERIAL_FLOW_CONTROL_HIGH_WATER_PERCENT >= CYGNUM_IO_SERIAL_FLOW_CONTROL_LOW_WATER_PERCENT + # CYGNUM_IO_SERIAL_FLOW_CONTROL_HIGH_WATER_PERCENT == 0 + # CYGNUM_IO_SERIAL_FLOW_CONTROL_LOW_WATER_PERCENT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_IO_SERIAL_FLOW_CONTROL_HIGH_WATER_PERCENT + # Requires: CYGNUM_IO_SERIAL_FLOW_CONTROL_HIGH_WATER_PERCENT >= CYGNUM_IO_SERIAL_FLOW_CONTROL_LOW_WATER_PERCENT +}; + +# < +# TTY-mode serial device drivers +# This option enables a simple terminal-like device driver +# that can be used for serial devices that interact with humans, +# such as a system console. +# +cdl_component CYGPKG_IO_SERIAL_TTY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# HAL/diag serial device driver +# This option enables the use of the HAL diagnostic channel +# via the standard I/O drivers. +# +cdl_component CYGPKG_IO_SERIAL_HALDIAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: (CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE == "\"/dev/ttydiag\"" ? CYGPKG_IO_SERIAL_HALDIAG : 1) +}; + +# Console device name +# This option selects the TTY device to use for the console. +# +cdl_option CYGDAT_IO_SERIAL_TTY_CONSOLE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ttydiag\"" + # value_source default + # Default value: "\"/dev/ttydiag\"" + + # The following properties are affected by this value + # option CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE + # DefaultValue: CYGDAT_IO_SERIAL_TTY_CONSOLE ? CYGDAT_IO_SERIAL_TTY_CONSOLE : "\"/dev/null\"" + # option CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE + # DefaultValue: CYGDAT_IO_SERIAL_TTY_CONSOLE ? CYGDAT_IO_SERIAL_TTY_CONSOLE : "\"/dev/null\"" +}; + +# TTY mode HAL/diag channel +# This option causes '/dev/ttydiag' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TTY_TTYDIAG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# TTY mode channel #0 +# This option causes '/dev/tty0' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TTY_TTY0 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# > +# TTY mode channel #0 device +# This option selects the physical device to use for +# '/dev/tty0'. +# +cdl_option CYGDAT_IO_SERIAL_TTY_TTY0_DEV { + # Flavor: data + user_value "\"/dev/ser1\"" + # value_source user + # Default value: "\"/dev/ser0\"" +}; + +# < +# TTY mode channel #1 +# This option causes '/dev/tty1' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TTY_TTY1 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# > +# TTY mode channel #1 device +# This option selects the physical device to use for +# '/dev/tty1'. +# +cdl_option CYGDAT_IO_SERIAL_TTY_TTY1_DEV { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser1\"" + # value_source default + # Default value: "\"/dev/ser1\"" +}; + +# < +# TTY mode channel #2 +# This option causes '/dev/tty2' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TTY_TTY2 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# > +# TTY mode channel #2 device +# This option selects the physical device to use for +# '/dev/tty2'. +# +cdl_option CYGDAT_IO_SERIAL_TTY_TTY2_DEV { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser2\"" + # value_source default + # Default value: "\"/dev/ser2\"" +}; + +# < +# TTY mode channel #3 +# This option causes '/dev/tty3' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TTY_TTY3 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 +}; + +# > +# TTY mode channel #3 device +# This option selects the physical device to use for +# '/dev/tty3'. +# +cdl_option CYGDAT_IO_SERIAL_TTY_TTY3_DEV { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser3\"" + # value_source default + # Default value: "\"/dev/ser3\"" +}; + +# < +# < +# Termios compatible TTY drivers +# This option enables terminal drivers compatible with +# POSIX termios. +# +cdl_component CYGPKG_IO_SERIAL_TERMIOS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 != CYGPKG_ISOINFRA && 0 != CYGPKG_IO_FILEIO && 0 != CYGINT_ISO_ERRNO_CODES && 0 != CYGINT_ISO_ERRNO + # CYGPKG_ISOINFRA == current + # CYGPKG_IO_FILEIO (unknown) == 0 + # CYGINT_ISO_ERRNO_CODES == 1 + # CYGINT_ISO_ERRNO == 1 + # --> 0 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGPKG_IO_FILEIO + # CYGPKG_IO_FILEIO (unknown) == 0 + # --> 0 + # Requires: CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 1 + # --> 1 + # Requires: CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 1 + # --> 1 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 1 + # --> 1 +}; + +# > +# Interface for termios tty driver file enabling +# +cdl_interface CYGINT_IO_SERIAL_TERMIOS_TERMIOS_TTY { + # Implemented by CYGPKG_IO_SERIAL_TERMIOS_TERMIOS0, inactive, disabled + # Implemented by CYGPKG_IO_SERIAL_TERMIOS_TERMIOS1, inactive, disabled + # Implemented by CYGPKG_IO_SERIAL_TERMIOS_TERMIOS2, inactive, disabled + # Implemented by CYGPKG_IO_SERIAL_TERMIOS_TERMIOS3, inactive, disabled + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGBLD_IO_SERIAL_TERMIOS_TERMIOS_TTY + # ActiveIf: CYGINT_IO_SERIAL_TERMIOS_TERMIOS_TTY > 0 +}; + +# Build termios tty driver file +# +cdl_option CYGBLD_IO_SERIAL_TERMIOS_TERMIOS_TTY { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS is disabled + # ActiveIf constraint: CYGINT_IO_SERIAL_TERMIOS_TERMIOS_TTY > 0 + # CYGINT_IO_SERIAL_TERMIOS_TERMIOS_TTY == 0 + # --> 0 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Termios TTY channel #0 +# This option causes '/dev/termios0' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TERMIOS_TERMIOS0 { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Termios TTY channel #0 device +# This option selects the physical device to use for +# '/dev/termios0'. +# +cdl_option CYGDAT_IO_SERIAL_TERMIOS_TERMIOS0_DEV { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS_TERMIOS0 is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS_TERMIOS0 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser0\"" + # value_source default + # Default value: "\"/dev/ser0\"" +}; + +# < +# Termios TTY channel #1 +# This option causes '/dev/termios1' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TERMIOS_TERMIOS1 { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Termios TTY channel #1 device +# This option selects the physical device to use for +# '/dev/termios1'. +# +cdl_option CYGDAT_IO_SERIAL_TERMIOS_TERMIOS1_DEV { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS_TERMIOS1 is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS_TERMIOS1 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser1\"" + # value_source default + # Default value: "\"/dev/ser1\"" +}; + +# < +# Termios TTY channel #2 +# This option causes '/dev/termios2' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TERMIOS_TERMIOS2 { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Termios TTY channel #2 device +# This option selects the physical device to use for +# '/dev/termios2'. +# +cdl_option CYGDAT_IO_SERIAL_TERMIOS_TERMIOS2_DEV { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS_TERMIOS2 is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS_TERMIOS2 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser2\"" + # value_source default + # Default value: "\"/dev/ser2\"" +}; + +# < +# Termios TTY channel #3 +# This option causes '/dev/termios3' to be included in the standard +# drivers. +# +cdl_component CYGPKG_IO_SERIAL_TERMIOS_TERMIOS3 { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Termios TTY channel #3 device +# This option selects the physical device to use for +# '/dev/termios3'. +# +cdl_option CYGDAT_IO_SERIAL_TERMIOS_TERMIOS3_DEV { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS_TERMIOS3 is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS_TERMIOS3 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser3\"" + # value_source default + # Default value: "\"/dev/ser3\"" +}; + +# < +# Support signals +# This option selects whether those parts of the termios +# interface involving signals is supported. This includes +# BRKINT mode, the INTR and QUIT characters, and whether +# SIGHUP is sent on terminal close. +# +cdl_option CYGSEM_IO_SERIAL_TERMIOS_USE_SIGNALS { + # This option is not active + # The parent CYGPKG_IO_SERIAL_TERMIOS is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGINT_ISO_SIGNAL_NUMBERS != 0 && CYGINT_ISO_SIGNAL_IMPL != 0 + # CYGINT_ISO_SIGNAL_NUMBERS == 1 + # CYGINT_ISO_SIGNAL_IMPL == 1 + # --> 1 + # Requires: CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 1 + # --> 1 + # Requires: CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 1 + # --> 1 +}; + +# < +# Hardware serial device drivers +# This option enables the hardware device drivers +# for the current platform. +# +cdl_component CYGPKG_IO_SERIAL_DEVICES { + # Flavor: bool + user_value 1 + # value_source user + # Default value: 0 + + # The following properties are affected by this value + # option CYGPKG_IO_SERIAL_TESTS + # Calculated: CYGPKG_IO_SERIAL_DEVICES ? "tests/serial1 tests/serial2 tests/serial3 tests/serial4 tests/serial5 tests/tty1 tests/tty2 tests/flow1 tests/flow2" : "" +}; + +# > +# ST STM32 serial device drivers +# This option enables the serial device drivers for the +# ST STM32. +# +cdl_package CYGPKG_IO_SERIAL_CORTEXM_STM32 { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # ActiveIf constraint: CYGPKG_IO_SERIAL + # CYGPKG_IO_SERIAL == current + # --> 1 + # ActiveIf constraint: CYGPKG_HAL_CORTEXM_STM32 + # CYGPKG_HAL_CORTEXM_STM32 == current + # --> 1 + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ERROR + # CYGPKG_ERROR == current + # --> 1 +}; + +# > +# ST STM32 serial port 0 driver +# This option includes the serial device driver for the ST STM32 +# port 0. +# +cdl_component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGINT_HAL_STM32_UART0>0 + # CYGINT_HAL_STM32_UART0 == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME + # option CYGPRI_SER_TEST_TTY_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? "\"/dev/tty0\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? "\"/dev/tty1\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? "\"/dev/tty2\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? "\"/dev/tty3\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? "\"/dev/tty4\"" : "\"/dev/tty5\"" +}; + +# > +# Device name for ST STM32 serial port 0 driver +# This option specifies the name of the serial device for the +# ST STM32 port 0. +# +cdl_option CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser0\"" + # value_source default + # Default value: "\"/dev/ser0\"" + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME +}; + +# Baud rate for the ST STM32 serial port 0 driver +# This option specifies the default baud rate (speed) for the +# ST STM32 port 0. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL0_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 115200 + # value_source default + # Default value: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD == 115200 + # --> 115200 + # Legal values: 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600 + # 4800 7200 9600 14400 19200 38400 57600 115200 230400 + # +}; + +# Buffer size for the ST STM32 serial port 0 driver +# This option specifies the size of the internal buffers used +# for the ST STM32 port 0. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL0_BUFSIZE { + # Flavor: data + user_value 0 + # value_source user + # Default value: 128 + # Legal values: 0 to 8192 +}; + +# Interrupt priority for STM32 serial port 0 +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL0_INT_PRI { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 + # Legal values: 0 to 255 +}; + +# < +# ST STM32 serial port 1 driver +# This option includes the serial device driver for the ST STM32 +# port 1. +# +cdl_component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 { + # Flavor: bool + user_value 1 + # value_source user + # Default value: CYGINT_HAL_STM32_UART1>0 + # CYGINT_HAL_STM32_UART1 == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME + # option CYGPRI_SER_TEST_TTY_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? "\"/dev/tty0\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? "\"/dev/tty1\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? "\"/dev/tty2\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? "\"/dev/tty3\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? "\"/dev/tty4\"" : "\"/dev/tty5\"" +}; + +# > +# Device name for ST STM32 serial port 1 driver +# This option specifies the name of the serial device for the +# ST STM32 port 1. +# +cdl_option CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser1\"" + # value_source default + # Default value: "\"/dev/ser1\"" + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME +}; + +# Baud rate for the ST STM32 serial port 1 driver +# This option specifies the default baud rate (speed) for the +# ST STM32 port 1. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BAUD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 115200 + # value_source default + # Default value: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD == 115200 + # --> 115200 + # Legal values: 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600 + # 4800 7200 9600 14400 19200 38400 57600 115200 230400 + # +}; + +# Buffer size for the ST STM32 serial port 1 driver +# This option specifies the size of the internal buffers used +# for the ST STM32 port 1. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BUFSIZE { + # Flavor: data + user_value 0 + # value_source user + # Default value: 128 + # Legal values: 0 to 8192 +}; + +# Interrupt priority for STM32 serial port 1 +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_INT_PRI { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 + # Legal values: 0 to 255 +}; + +# < +# ST STM32 serial port 2 driver +# This option includes the serial device driver for the ST STM32 +# port 2. +# +cdl_component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 { + # Flavor: bool + user_value 0 + # value_source user + # Default value: CYGINT_HAL_STM32_UART2>0 + # CYGINT_HAL_STM32_UART2 == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME + # option CYGPRI_SER_TEST_TTY_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? "\"/dev/tty0\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? "\"/dev/tty1\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? "\"/dev/tty2\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? "\"/dev/tty3\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? "\"/dev/tty4\"" : "\"/dev/tty5\"" +}; + +# > +# Device name for ST STM32 serial port 2 driver +# This option specifies the name of the serial device for the +# ST STM32 port 2. +# +cdl_option CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser2\"" + # value_source default + # Default value: "\"/dev/ser2\"" + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME +}; + +# Baud rate for the ST STM32 serial port 2 driver +# This option specifies the default baud rate (speed) for the +# ST STM32 port 2. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_BAUD { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 115200 + # value_source default + # Default value: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD == 115200 + # --> 115200 + # Legal values: 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600 + # 4800 7200 9600 14400 19200 38400 57600 115200 230400 + # +}; + +# Buffer size for the ST STM32 serial port 2 driver +# This option specifies the size of the internal buffers used +# for the ST STM32 port 2. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_BUFSIZE { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 is disabled + + # Flavor: data + user_value 0 + # value_source user + # Default value: 128 + # Legal values: 0 to 8192 +}; + +# Interrupt priority for STM32 serial port 2 +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL2_INT_PRI { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 + # Legal values: 0 to 255 +}; + +# < +# ST STM32 serial port 3 driver +# This option includes the serial device driver for the ST STM32 +# port 3. +# +cdl_component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 { + # Flavor: bool + user_value 0 + # value_source user + # Default value: CYGINT_HAL_STM32_UART3>0 + # CYGINT_HAL_STM32_UART3 == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME + # option CYGPRI_SER_TEST_TTY_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? "\"/dev/tty0\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? "\"/dev/tty1\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? "\"/dev/tty2\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? "\"/dev/tty3\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? "\"/dev/tty4\"" : "\"/dev/tty5\"" +}; + +# > +# Device name for ST STM32 serial port 3 driver +# This option specifies the name of the serial device for the +# ST STM32 port 3. +# +cdl_option CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser3\"" + # value_source default + # Default value: "\"/dev/ser3\"" + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME +}; + +# Baud rate for the ST STM32 serial port 3 driver +# This option specifies the default baud rate (speed) for the +# ST STM32 port 3. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_BAUD { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 115200 + # value_source default + # Default value: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD == 115200 + # --> 115200 + # Legal values: 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600 + # 4800 7200 9600 14400 19200 38400 57600 115200 230400 + # +}; + +# Buffer size for the ST STM32 serial port 3 driver +# This option specifies the size of the internal buffers used +# for the ST STM32 port 3. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_BUFSIZE { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 is disabled + + # Flavor: data + user_value 0 + # value_source user + # Default value: 128 + # Legal values: 0 to 8192 +}; + +# Interrupt priority for STM32 serial port 3 +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL3_INT_PRI { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 + # Legal values: 0 to 255 +}; + +# < +# ST STM32 serial port 4 driver +# This option includes the serial device driver for the ST STM32 +# port 4. +# +cdl_component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 { + # Flavor: bool + user_value 0 + # value_source user + # Default value: CYGINT_HAL_STM32_UART4>0 + # CYGINT_HAL_STM32_UART4 == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME + # option CYGPRI_SER_TEST_TTY_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? "\"/dev/tty0\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? "\"/dev/tty1\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? "\"/dev/tty2\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? "\"/dev/tty3\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? "\"/dev/tty4\"" : "\"/dev/tty5\"" +}; + +# > +# Device name for ST STM32 serial port 4 driver +# This option specifies the name of the serial device for the +# ST STM32 port 4. +# +cdl_option CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser4\"" + # value_source default + # Default value: "\"/dev/ser4\"" + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME +}; + +# Baud rate for the ST STM32 serial port 4 driver +# This option specifies the default baud rate (speed) for the +# ST STM32 port 4. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BAUD { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 115200 + # value_source default + # Default value: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD == 115200 + # --> 115200 + # Legal values: 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600 + # 4800 7200 9600 14400 19200 38400 57600 115200 230400 + # +}; + +# Buffer size for the ST STM32 serial port 4 driver +# This option specifies the size of the internal buffers used +# for the ST STM32 port 4. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_BUFSIZE { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 is disabled + + # Flavor: data + user_value 128 + # value_source user + # Default value: 128 + # Legal values: 0 to 8192 +}; + +# Interrupt priority for STM32 serial port 4 +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL4_INT_PRI { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 + # Legal values: 0 to 255 +}; + +# < +# ST STM32 serial port 5 driver +# This option includes the serial device driver for the ST STM32 +# port 5. +# +cdl_component CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5 { + # Flavor: bool + user_value 0 + # value_source user + # Default value: CYGINT_HAL_STM32_UART5>0 + # CYGINT_HAL_STM32_UART5 == 0 + # --> 0 +}; + +# > +# Device name for ST STM32 serial port 5 driver +# This option specifies the name of the serial device for the +# ST STM32 port 5. +# +cdl_option CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser5\"" + # value_source default + # Default value: "\"/dev/ser5\"" + + # The following properties are affected by this value + # option CYGPRI_SER_TEST_SER_DEV + # DefaultValue: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME +}; + +# Baud rate for the ST STM32 serial port 5 driver +# This option specifies the default baud rate (speed) for the +# ST STM32 port 5. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BAUD { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 115200 + # value_source default + # Default value: CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD + # CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD == 115200 + # --> 115200 + # Legal values: 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600 + # 4800 7200 9600 14400 19200 38400 57600 115200 230400 + # +}; + +# Buffer size for the ST STM32 serial port 5 driver +# This option specifies the size of the internal buffers used +# for the ST STM32 port 5. +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_BUFSIZE { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5 is disabled + + # Flavor: data + user_value 0 + # value_source user + # Default value: 128 + # Legal values: 0 to 8192 +}; + +# Interrupt priority for STM32 serial port 5 +# +cdl_option CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL5_INT_PRI { + # This option is not active + # The parent CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL5 is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 128 + # value_source default + # Default value: 128 + # Legal values: 0 to 255 +}; + +# < +# Serial device driver build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_IO_SERIAL_CORTEXM_STM32_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building these serial device drivers. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_SERIAL_CORTEXM_STM32_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building these serial device drivers. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_IO_SERIAL_CORTEXM_STM32_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# Testing parameters +# +cdl_component CYGPKG_IO_SERIAL_CORTEXM_STM32_TESTING { + # There is no associated value. +}; + +# > +# Serial device used for testing +# +cdl_option CYGPRI_SER_TEST_SER_DEV { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/ser0\"" + # value_source default + # Default value: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME : CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 == 1 + # CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL0_NAME == "\"/dev/ser0\"" + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 == 1 + # CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL1_NAME == "\"/dev/ser1\"" + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 == 0 + # CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL2_NAME == 0 + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 == 0 + # CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL3_NAME == 0 + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 == 0 + # CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL4_NAME == 0 + # CYGDAT_IO_SERIAL_CORTEXM_STM32_SERIAL5_NAME == 0 + # --> "\"/dev/ser0\"" +}; + +# TTY-mode serial device used for testing +# +cdl_option CYGPRI_SER_TEST_TTY_DEV { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "\"/dev/tty0\"" + # value_source default + # Default value: CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 ? "\"/dev/tty0\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 ? "\"/dev/tty1\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 ? "\"/dev/tty2\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 ? "\"/dev/tty3\"" : CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 ? "\"/dev/tty4\"" : "\"/dev/tty5\"" + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL0 == 1 + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL1 == 1 + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL2 == 0 + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL3 == 0 + # CYGPKG_IO_SERIAL_CORTEXM_STM32_SERIAL4 == 0 + # --> "\"/dev/tty0\"" +}; + +# < +# < +# < +# Build extra serial tests +# This option enables the building of some extra tests which +# can be used when testing / debugging serial drivers. These +# are not built by default since they do not use the dedicated +# testing infrastructure. +# +cdl_option CYGBLD_IO_SERIAL_EXTRA_TESTS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Serial device driver build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_IO_SERIAL_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the serial device drivers. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_SERIAL_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the serial device drivers. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_IO_SERIAL_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Serial device driver tests +# This option specifies the set of tests for the serial device drivers. +# +cdl_option CYGPKG_IO_SERIAL_TESTS { + # Calculated value: CYGPKG_IO_SERIAL_DEVICES ? "tests/serial1 tests/serial2 tests/serial3 tests/serial4 tests/serial5 tests/tty1 tests/tty2 tests/flow1 tests/flow2" : "" + # CYGPKG_IO_SERIAL_DEVICES == 1 + # Flavor: data + # Current_value: tests/serial1 tests/serial2 tests/serial3 tests/serial4 tests/serial5 tests/tty1 tests/tty2 tests/flow1 tests/flow2 +}; + +# < +# Enable serial device select support +# This option enables support for the select() API function on all +# serial devices. +# +cdl_option CYGPKG_IO_SERIAL_SELECT_SUPPORT { + # This option is not active + # ActiveIf constraint: CYGPKG_IO_FILEIO + # CYGPKG_IO_FILEIO (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGFUN_IO_FILEIO_SELECT == 1 + # CYGFUN_IO_FILEIO_SELECT (unknown) == 0 + # --> 0 +}; + +# Serial testing specification +# +cdl_component CYGPKG_IO_SERIAL_TEST_SPECS { + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# > +# Skip 9600 baud testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_9600 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Skip 14400 baud testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_14400 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Skip 19200 baud testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_19200 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Skip 38400 baud testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_38400 { + # Implemented by CYGPKG_IO_SERIAL_CORTEXM_STM32_TESTING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# Skip 57600 baud testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_57600 { + # Implemented by CYGPKG_IO_SERIAL_CORTEXM_STM32_TESTING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# Skip 115200 baud testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_115200 { + # Implemented by CYGPKG_IO_SERIAL_CORTEXM_STM32_TESTING, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value +}; + +# Skip even-parity testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Skip odd-parity testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_PARITY_ODD { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# Skip 2-stop bit testing +# +cdl_interface CYGINT_IO_SERIAL_TEST_SKIP_STOP_2 { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 +}; + +# < +# < +# < +# Infrastructure +# Common types and useful macros. +# Tracing and assertion facilities. +# Package startup options. +# +cdl_package CYGPKG_INFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # package CYGPKG_HAL + # Requires: CYGPKG_INFRA +}; + +# > +# Asserts & Tracing +# The eCos source code contains a significant amount of +# internal debugging support, in the form of assertions and +# tracing. +# Assertions check at runtime that various conditions are as +# expected; if not, execution is halted. +# Tracing takes the form of text messages that are output +# whenever certain events occur, or whenever functions are +# called or return. +# The most important property of these checks and messages is +# that they are not required for the program to run. +# It is prudent to develop software with assertions enabled, +# but disable them when making a product release, thus +# removing the overhead of that checking. +# It is possible to enable assertions and tracing +# independently. +# There are also options controlling the exact behaviour of +# the assertion and tracing facilities, thus giving users +# finer control over the code and data size requirements. +# +cdl_component CYGPKG_INFRA_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGNUM_INFRA_EMPTY_DELETE_THRESHOLD + # ActiveIf: CYGPKG_INFRA_DEBUG + # component CYGFUN_KERNEL_THREADS_STACK_CHECKING + # ActiveIf: CYGPKG_INFRA_DEBUG + # component CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT + # DefaultValue: 0 != CYGPKG_INFRA_DEBUG + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # +}; + +# > +# Use asserts +# If this option is defined, asserts in the code are tested. +# Assert functions (CYG_ASSERT()) are defined in +# 'include/cyg/infra/cyg_ass.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no checking of the asserted conditions. +# +cdl_component CYGDBG_USE_ASSERTS { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # component CYGFUN_KERNEL_THREADS_STACK_CHECKING + # ActiveIf: CYGDBG_USE_ASSERTS + # option CYGDBG_MEMALLOC_ALLOCATOR_DLMALLOC_DEBUG + # Requires: CYGDBG_USE_ASSERTS + # option CYGDBG_MEMALLOC_ALLOCATOR_DLMALLOC_DEBUG + # DefaultValue: 0 != CYGDBG_USE_ASSERTS + # option CYGSEM_LIBC_SIGNALS_BAD_SIGNAL_FATAL + # Requires: CYGDBG_USE_ASSERTS +}; + +# > +# Preconditions +# This option allows individual control of preconditions. +# A precondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_PRECONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_PRECONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Postconditions +# This option allows individual control of postconditions. +# A postcondition is one type of assert, which it is +# useful to control separately from more general asserts. +# The function is CYG_POSTCONDITION(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_POSTCONDITIONS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Loop invariants +# This option allows individual control of loop invariants. +# A loop invariant is one type of assert, which it is +# useful to control separately from more general asserts, +# particularly since a loop invariant is typically evaluated +# a great many times when used correctly. +# The function is CYG_LOOP_INVARIANT(condition,msg). +# +cdl_option CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use assert text +# All assertions within eCos contain a text message +# which should give some information about the condition +# being tested. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information if an assertion actually gets +# triggered. +# +cdl_option CYGDBG_INFRA_DEBUG_ASSERT_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_ASSERTS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use tracing +# If this option is defined, tracing operations +# result in output or logging, depending on other options. +# This may have adverse effects on performance, if the time +# taken to output message overwhelms the available CPU +# power or output bandwidth. +# Trace functions (CYG_TRACE()) are defined in +# 'include/cyg/infra/cyg_trac.h' within the 'install' tree. +# If it is not defined, these result in no additional +# object code and no trace information. +# +cdl_component CYGDBG_USE_TRACING { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # CYGINT_INFRA_DEBUG_TRACE_IMPL == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT + # ActiveIf: CYGDBG_USE_TRACING + # option CYGDBG_KERNEL_TRACE_TIMESLICE + # ActiveIf: CYGDBG_USE_TRACING + # component CYGPKG_LIBM_TRACE + # Requires: CYGDBG_USE_TRACING +}; + +# > +# Trace function reports +# This option allows individual control of +# function entry/exit tracing, independent of +# more general tracing output. +# This may be useful to remove clutter from a +# trace log. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use trace text +# All trace calls within eCos contain a text message +# which should give some information about the circumstances. +# These text messages will end up being embedded in the +# application image and hence there is a significant penalty +# in terms of image size. +# It is possible to suppress the use of these messages by +# disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_MESSAGE { + # This option is not active + # The parent CYGDBG_USE_TRACING is not active + # The parent CYGDBG_USE_TRACING is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Trace output implementations +# +cdl_interface CYGINT_INFRA_DEBUG_TRACE_IMPL { + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY, inactive, disabled + # Implemented by CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER, inactive, enabled + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGDBG_USE_ASSERTS + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL + # component CYGDBG_USE_TRACING + # Requires: 1 == CYGINT_INFRA_DEBUG_TRACE_IMPL +}; + +# Null output +# A null output module which is useful when +# debugging interactively; the output routines +# can be breakpointed rather than have them actually +# 'print' something. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_NULL { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple output +# An output module which produces simple output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGDBG_KERNEL_TRACE_TIMESLICE + # Requires: !CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE +}; + +# Fancy output +# An output module which produces fancy output +# from tracing and assertion events. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGDBG_KERNEL_TRACE_TIMESLICE + # Requires: !CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY +}; + +# Buffered tracing +# An output module which buffers output +# from tracing and assertion events. The stored +# messages are output when an assert fires, or +# CYG_TRACE_PRINT() (defined in <cyg/infra/cyg_trac.h>) +# is called. +# Of course, there will only be stored messages +# if tracing per se (CYGDBG_USE_TRACING) +# is enabled above. +# +cdl_component CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Trace buffer size +# The size of the trace buffer. This counts the number +# of trace records stored. When the buffer fills it +# either wraps, stops recording, or generates output. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 5 to 65535 +}; + +# Wrap trace buffer when full +# When the trace buffer has filled with records it +# starts again at the beginning. Hence only the last +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_WRAP { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Halt trace buffer when full +# When the trace buffer has filled with records it +# stops recording. Hence only the first +# CYGDBG_INFRA_DEBUG_TRACE_BUFFER_SIZE messages will +# be recorded. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_HALT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer when full +# When the trace buffer has filled with records it +# prints the contents of the buffer. The buffer is then +# emptied and the system continues. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Print trace buffer on assert fail +# When an assertion fails the trace buffer will be +# printed to the default diagnostic device. +# +cdl_option CYGDBG_INFRA_DEBUG_TRACE_BUFFER_PRINT_ON_ASSERT { + # This option is not active + # The parent CYGDBG_INFRA_DEBUG_TRACE_ASSERT_BUFFER is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use function names +# All trace and assert calls within eCos contain a +# reference to the builtin macro '__PRETTY_FUNCTION__', +# which evaluates to a string containing +# the name of the current function. +# This is useful when reading a trace log. +# It is possible to suppress the use of the function name +# by disabling this option. +# This results in smaller code size, but there is less +# human-readable information available in the trace output, +# possibly only filenames and line numbers. +# +cdl_option CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO { + # This option is not active + # The parent CYGPKG_INFRA_DEBUG is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Startup options +# Some packages require a startup routine to be called. +# This can be carried out by application code, by supplying +# a routine called cyg_package_start() which calls the +# appropriate package startup routine(s). +# Alternatively, this routine can be constructed automatically +# and configured to call the startup routines of your choice. +# +cdl_component CYGPKG_INFRA_STARTUP { + # There is no associated value. +}; + +# > +# Start uITRON subsystem +# Generate a call to initialize the +# uITRON compatibility subsystem +# within the system version of cyg_package_start(). +# This enables compatibility with uITRON. +# You must configure uITRON with the correct tasks before +# starting the uItron subsystem. +# If this is disabled, and you want to use uITRON, +# you must call cyg_uitron_start() from your own +# cyg_package_start() or cyg_userstart(). +# +cdl_option CYGSEM_START_UITRON_COMPATIBILITY { + # This option is not active + # ActiveIf constraint: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_UITRON + # CYGPKG_UITRON (unknown) == 0 + # --> 0 +}; + +# < +# Smaller slower memcpy() +# Enabling this option causes the implementation of +# the standard memcpy() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memcpy() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Smaller slower memset() +# Enabling this option causes the implementation of +# the standard memset() routine to reduce code +# size at the expense of execution speed. This +# option is automatically enabled with the use of +# the -Os option to the compiler. Also note that +# the compiler will try to use its own builtin +# version of memset() if possible, ignoring the +# implementation in this package, unless given +# the -fno-builtin compiler option. +# +cdl_option CYGIMP_INFRA_PREFER_SMALL_TO_FAST_MEMSET { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide empty C++ delete functions +# To deal with virtual destructors, where the correct delete() +# function must be called for the derived class in question, the +# underlying delete is called when needed, from destructors. This +# is regardless of whether the destructor is called by delete itself. +# So there is a reference to delete() from all destructors. The +# default builtin delete() attempts to call free() if there is +# one defined. So, if you have destructors, and you have free(), +# as in malloc() and free(), any destructor counts as a reference +# to free(). So the dynamic memory allocation code is linked +# in regardless of whether it gets explicitly called. This +# increases code and data size needlessly. +# To defeat this undesirable behaviour, we define empty versions +# of delete and delete[]. But doing this prevents proper use +# of dynamic memory in C++ programs via C++'s new and delete +# operators. +# Therefore, this option is provided +# for explicitly disabling the provision of these empty functions, +# so that new and delete can be used, if that is what is required. +# +cdl_option CYGFUN_INFRA_EMPTY_DELETE_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Threshold for valid number of delete calls +# Some users don't know about the empty delete function and then +# wonder why their C++ classes are leaking memory. If +# INFRA_DEBUG is enabled we keep a counter for the number of +# times delete is called. If it goes above this threshold we throw +# an assertion failure. This should point heavy users of +# delete in the right direction without upsetting those who want +# an empty delete function. +# +cdl_option CYGNUM_INFRA_EMPTY_DELETE_THRESHOLD { + # This option is not active + # ActiveIf constraint: CYGPKG_INFRA_DEBUG + # CYGPKG_INFRA_DEBUG == 0 + # --> 0 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 100 + # value_source default + # Default value: 100 +}; + +# Provide dummy abort() function +# This option controls the inclusion of a dummy abort() function. +# Parts of the C and C++ compiler runtime systems contain references +# to abort(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. It is not expected that this function +# will ever be called, so its current behaviour is to simply loop. +# +cdl_option CYGFUN_INFRA_DUMMY_ABORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_EXIT == 0 + # CYGINT_ISO_EXIT == 1 + # --> 0 + # Requires: !CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 1 + # --> 0 +}; + +# Reset platform at end of test case execution +# If this option is set then test case programs will reset the platform +# when they terminate, as opposed to the default which is to just hang +# in a loop. +# +cdl_option CYGSEM_INFRA_RESET_ON_TEST_EXIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide dummy strlen() function +# This option controls the inclusion of a dummy strlen() function. +# Parts of the C and C++ compiler runtime systems contain references +# to strlen(), particulary in the C++ exception handling code. It is +# not possible to eliminate these references, so this dummy function +# in included to satisfy them. While it is not expected that this function +# will ever be called, it is functional but uses the simplest, smallest +# algorithm. There is a faster version of strlen() in the C library. +# +cdl_option CYGFUN_INFRA_DUMMY_STRLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGINT_ISO_STRING_STRFUNCS == 0 + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 0 +}; + +# Make all compiler warnings show as errors +# Enabling this option will cause all compiler warnings to show +# as errors and bring the library build to a halt. This is used +# to ensure that the code base is warning free, and thus ensure +# that newly introduced warnings stand out and get fixed before +# they show up as weird run-time behavior. +# +cdl_option CYGBLD_INFRA_CFLAGS_WARNINGS_AS_ERRORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -Werror") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # --> 0 +}; + +# Make compiler and assembler communicate by pipe +# Enabling this option will cause the compiler to feed the +# assembly output the the assembler via a pipe instead of +# via a temporary file. This normally reduces the build +# time. +# +cdl_option CYGBLD_INFRA_CFLAGS_PIPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: is_substr(CYGBLD_GLOBAL_CFLAGS, " -pipe") + # CYGBLD_GLOBAL_CFLAGS == "-Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions" + # --> 0 +}; + +# Infra build options +# Package specific build options including control over +# compiler flags used only in building this package. +# +cdl_component CYGPKG_INFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are used +# in addition to the set of global flags. +# +cdl_option CYGPKG_INFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos infra package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--gc-sections + # value_source default + # Default value: -Wl,--gc-sections +}; + +# Additional linker flags +# This option modifies the set of linker flags for +# building the eCos infra package tests. These flags are added to +# the set of global flags if present. +# +cdl_option CYGPKG_INFRA_LDFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wl,--fatal-warnings + # value_source default + # Default value: -Wl,--fatal-warnings +}; + +# Infra package tests +# +cdl_component CYGPKG_INFRA_TESTS { + # Calculated value: "tests/cxxsupp tests/diag_sprintf1 tests/diag_sprintf2" + # Flavor: data + # Current_value: tests/cxxsupp tests/diag_sprintf1 tests/diag_sprintf2 +}; + +# > +# Number of times a test runs +# This option controls the number of times tests will execute their +# basic function. Not all tests will honor this setting, but those +# that do will execute the test N times before terminating. A value +# less than 0 indicates to run forever. +# +cdl_option CYGNUM_TESTS_RUN_COUNT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# < +# eCos kernel +# doc: ref/kernel.html +# This package contains the core functionality of the eCos +# kernel. It relies on functionality provided by various HAL +# packages and by the eCos infrastructure. In turn the eCos +# kernel provides support for other packages such as the device +# drivers and the uITRON compatibility layer. +# +cdl_package CYGPKG_KERNEL { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # option CYGFUN_HAL_COMMON_KERNEL_SUPPORT + # Requires: CYGPKG_KERNEL + # option CYGFUN_HAL_COMMON_KERNEL_SUPPORT + # DefaultValue: CYGPKG_KERNEL + # option CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE + # DefaultValue: CYGPKG_KERNEL ? 4096 : 32768 + # option CYGSEM_MEMALLOC_ALLOCATOR_FIXED_THREADAWARE + # ActiveIf: CYGPKG_KERNEL + # option CYGSEM_MEMALLOC_ALLOCATOR_VARIABLE_THREADAWARE + # ActiveIf: CYGPKG_KERNEL + # option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_THREADAWARE + # ActiveIf: CYGPKG_KERNEL + # option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_THREADAWARE + # Requires: CYGPKG_KERNEL + # option CYGSEM_MEMALLOC_ALLOCATOR_SEPMETA_THREADAWARE + # ActiveIf: CYGPKG_KERNEL + # option CYGFUN_MEMALLOC_KAPI + # ActiveIf: CYGPKG_KERNEL + # option CYGSEM_LIBC_I18N_PER_THREAD_MB + # ActiveIf: CYGPKG_KERNEL + # option CYGSEM_LIBC_SIGNALS_THREAD_SAFE + # Requires: CYGPKG_KERNEL + # option CYGSEM_LIBC_STARTUP_MAIN_INITCONTEXT + # DefaultValue: 0 == CYGPKG_KERNEL && 0 == + # CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # component CYGSEM_LIBC_STARTUP_MAIN_THREAD + # Requires: CYGPKG_KERNEL + # component CYGSEM_LIBC_STARTUP_MAIN_THREAD + # DefaultValue: 0 != CYGPKG_KERNEL && 0 == CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # option CYGSEM_LIBC_EXIT_STOPS_SYSTEM + # Requires: CYGPKG_KERNEL + # option CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS + # ActiveIf: CYGPKG_KERNEL + # option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK + # ActiveIf: CYGPKG_KERNEL + # option CYGPKG_WALLCLOCK_EMULATE + # Requires: CYGPKG_KERNEL + # option CYGIMP_WALLCLOCK_NONE + # DefaultValue: !CYGPKG_KERNEL && 0 == CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS + # option CYGPKG_IO_WALLCLOCK_TESTS + # Calculated: CYGPKG_KERNEL ? "tests/wallclock tests/wallclock2" : "" + # option CYGHWR_HAL_CORTEXM_FPU_SWITCH + # Requires: is_active (CYGPKG_KERNEL) implies + # CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST == + # (CYGHWR_HAL_CORTEXM_FPU_SWITCH == "NONE") + # option CYGPKG_HAL_CORTEXM_STM32_TESTS + # ActiveIf: CYGPKG_KERNEL +}; + +# > +# Kernel interrupt handling +# doc: ref/kernel-interrupts.html +# The majority of configuration options related to interrupt +# handling are in the HAL packages, since usually the code has +# to be platform-specific. There are a number of options +# provided within the kernel related to slightly higher-level +# concepts, for example Delayed Service Routines. +# +cdl_component CYGPKG_KERNEL_INTERRUPTS { + # There is no associated value. + + # The following properties are affected by this value + # option CYGDBG_KERNEL_INSTRUMENT_INTR + # ActiveIf: CYGPKG_KERNEL_INTERRUPTS +}; + +# > +# Use delayed service routines (DSRs) +# In eCos the recommended way to handle device interrupts is to +# do a minimum amount of work inside the low level interrupt +# handler itself, and instead do as much as possible in a +# Delayed Service Routine or DSR. If an application does not +# make use of DSRs directly or indirectly then it is possible +# to disable the DSR support completely, which reduces the +# overheads of context switches and interrupt handling. Note +# that the kernel real-time clock makes use of DSRs, as do many +# of the device drivers. +# +cdl_component CYGIMP_KERNEL_INTERRUPTS_DSRS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGVAR_KERNEL_COUNTERS_CLOCK + # Requires: CYGIMP_KERNEL_INTERRUPTS_DSRS +}; + +# > +# +cdl_interface CYGINT_KERNEL_INTERRUPTS_DSRS { + # Implemented by CYGIMP_KERNEL_INTERRUPTS_DSRS_LIST, active, enabled + # Implemented by CYGIMP_KERNEL_INTERRUPTS_DSRS_TABLE, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 == CYGINT_KERNEL_INTERRUPTS_DSRS + # CYGINT_KERNEL_INTERRUPTS_DSRS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_KERNEL_INTERRUPTS_DSRS + # Requires: 1 == CYGINT_KERNEL_INTERRUPTS_DSRS +}; + +# Use linked lists for DSRs +# When DSR support is enabled the kernel must keep track of all +# the DSRs that are pending. This information can be kept in a +# fixed-size table or in a linked list. The list implementation +# requires that the kernel disable interrupts for a very short +# period of time outside interrupt handlers, but there is no +# possibility of a table overflow occurring. +# +cdl_component CYGIMP_KERNEL_INTERRUPTS_DSRS_LIST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Schedule DSRs in FIFO order +# When this option is set, DSRs are scheduled +# in the natural FIFO (first in, first out) order, +# otherwise they are scheduled in LIFO (last in, first +# out) order. Applications should not rely on any +# particular order of scheduling of DSRs. LIFO +# scheduling is kept for backward compatibility only and +# is not recommended as it may lead to high (up to 2 +# times higher then FIFO) IRQ-to-DSR latencies at some +# (typically rare) conditions. If unsure, leave this set. +# +cdl_option CYGSEM_KERNEL_INTERRUPTS_DSRS_LIST_FIFO { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Use fixed-size table for DSRs +# When DSR support is enabled the kernel must keep track of all +# the DSRs that are pending. This information can be kept in a +# fixed-size table or in a linked list. The table +# implementation involves a very small risk of overflow at +# run-time if a given interrupt source is able to have more +# than one pending DSR. However it has the advantage that +# the kernel does not need to disable interrupts outside +# interrupt handlers. +# +cdl_component CYGIMP_KERNEL_INTERRUPTS_DSRS_TABLE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Number of entries in fixed-size DSR table +# When DSR support is enabled the kernel must keep track of all +# the DSRs that are pending. One approach involves a fixed-size +# table, which involves a very small risk of overflow at +# run-time. By increasing the table size it is possible to reduce +# this risk. +# +cdl_option CYGNUM_KERNEL_INTERRUPTS_DSRS_TABLE_SIZE { + # This option is not active + # The parent CYGIMP_KERNEL_INTERRUPTS_DSRS_TABLE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 2 to 1024 +}; + +# < +# Chain all interrupts together +# Interrupts can be attached to vectors either singly, or be +# chained together. The latter is necessary if there is no way +# of discovering which device has interrupted without +# inspecting the device itself. It can also reduce the amount +# of RAM needed for interrupt decoding tables and code. +# +cdl_option CYGIMP_KERNEL_INTERRUPTS_CHAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN + # CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN == 0 + # --> 0 +}; + +# < +# < +# Exception handling +# doc: ref/kernel-exceptions.html +# In the context of the eCos kernel exceptions are unexpected +# events detected by the hardware, for example an attempt to +# execute an illegal instruction. There is no relation with +# other forms of exception, for example the catch and throw +# facilities of languages like C++. It is possible to disable +# all support for exceptions and thus save some memory. +# +cdl_component CYGPKG_KERNEL_EXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGPKG_HAL_EXCEPTIONS + # CYGPKG_HAL_EXCEPTIONS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGPKG_HAL_EXCEPTIONS + # Requires: CYGPKG_KERNEL_EXCEPTIONS + # option CYGPKG_HAL_EXCEPTIONS + # DefaultValue: CYGPKG_KERNEL_EXCEPTIONS +}; + +# > +# Decode exception types in kernel +# On targets where several different types of exception are +# possible, for example executing an illegal instruction and +# division by zero, it is possible for the kernel to do some +# decoding of the exception type and deliver the different +# types of exception to different handlers in the application +# code. Alternatively the kernel can simply pass all +# exceptions directly to application code, leaving the +# decoding to be done by the application +# +cdl_option CYGSEM_KERNEL_EXCEPTIONS_DECODE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS + # Requires: CYGSEM_KERNEL_EXCEPTIONS_DECODE +}; + +# Use global exception handlers +# In the context of the eCos kernel exceptions are +# unexpected events detected by the hardware, for +# example an attempt to execute an illegal +# instruction. If the kernel is configured +# to support exceptions then two implementations are +# possible. The default implementation involves a single set +# of exception handlers that are in use for the entire +# system. The alternative implementation allows different +# exception handlers to be specified for each thread. +# +cdl_option CYGSEM_KERNEL_EXCEPTIONS_GLOBAL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS + # Requires: CYGSEM_KERNEL_EXCEPTIONS_GLOBAL +}; + +# < +# Kernel schedulers +# doc: ref/kernel-overview.html#KERNEL-OVERVIEW-SCHEDULERS +# The eCos kernel provides a choice of schedulers. In addition +# there are a number of configuration options to control the +# detailed behaviour of these schedulers. +# +cdl_component CYGPKG_KERNEL_SCHED { + # There is no associated value. + + # The following properties are affected by this value + # option CYGDBG_KERNEL_INSTRUMENT_SCHED + # ActiveIf: CYGPKG_KERNEL_SCHED +}; + +# > +# Number of schedulers in this configuration +# +cdl_interface CYGINT_KERNEL_SCHEDULER { + # Implemented by CYGSEM_KERNEL_SCHED_MLQUEUE, active, enabled + # Implemented by CYGSEM_KERNEL_SCHED_BITMAP, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 == CYGINT_KERNEL_SCHEDULER + # CYGINT_KERNEL_SCHEDULER == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_KERNEL_SCHEDULER + # Requires: 1 == CYGINT_KERNEL_SCHEDULER +}; + +# Non-zero if the active schedule only has unique priorities +# Not all schedulers allow mutiple threads to use the same +# priority. That property is signalled via this option, allowing +# scheduler and tests to behave accordingly. +# +cdl_interface CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES { + # Implemented by CYGSEM_KERNEL_SCHED_BITMAP, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # component CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL + # Requires: CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES == 0 +}; + +# Multi-level queue scheduler +# The multi-level queue scheduler supports multiple priority +# levels and multiple threads at each priority level. +# Preemption between priority levels is automatic. Timeslicing +# within a given priority level is controlled by a separate +# configuration option. +# +cdl_component CYGSEM_KERNEL_SCHED_MLQUEUE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGPRI_KERNEL_SCHED_IMPL_HXX + # Calculated: CYGSEM_KERNEL_SCHED_BITMAP ? "<cyg/kernel/bitmap.hxx>" : CYGSEM_KERNEL_SCHED_MLQUEUE ? "<cyg/kernel/mlqueue.hxx>" : CYGSEM_KERNEL_SCHED_LOTTERY ? "<cyg/kernel/lottery.hxx>" : "!!!-- Configuration broken - no scheduler selected --!!!" + # component CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL + # ActiveIf: CYGSEM_KERNEL_SCHED_MLQUEUE + # option CYGDBG_KERNEL_INSTRUMENT_MLQ + # ActiveIf: CYGSEM_KERNEL_SCHED_MLQUEUE +}; + +# > +# Output timeslices when tracing +# When tracing is enabled, output trace messages every +# timeslice. This can be quite verbose so is disabled by +# default. +# +cdl_option CYGDBG_KERNEL_TRACE_TIMESLICE { + # This option is not active + # ActiveIf constraint: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE + # CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE == 0 + # --> 1 + # Requires: !CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY + # CYGDBG_INFRA_DEBUG_TRACE_ASSERT_FANCY == 0 + # --> 1 +}; + +# < +# Bitmap scheduler +# The bitmap scheduler supports multiple priority levels but +# only one thread can exist at each priority level. This means +# that scheduling decisions are very simple and hence the +# scheduler is efficient. Preemption between priority levels is +# automatic. Timeslicing within a given priority level is +# irrelevant since there can be only one thread at each +# priority level. +# +cdl_option CYGSEM_KERNEL_SCHED_BITMAP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGPKG_KERNEL_SMP_SUPPORT + # CYGPKG_KERNEL_SMP_SUPPORT == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGPRI_KERNEL_SCHED_IMPL_HXX + # Calculated: CYGSEM_KERNEL_SCHED_BITMAP ? "<cyg/kernel/bitmap.hxx>" : CYGSEM_KERNEL_SCHED_MLQUEUE ? "<cyg/kernel/mlqueue.hxx>" : CYGSEM_KERNEL_SCHED_LOTTERY ? "<cyg/kernel/lottery.hxx>" : "!!!-- Configuration broken - no scheduler selected --!!!" + # component CYGSEM_KERNEL_SCHED_TIMESLICE + # Requires: !CYGSEM_KERNEL_SCHED_BITMAP + # option CYGDBG_KERNEL_INSTRUMENT_BITMAP + # ActiveIf: CYGSEM_KERNEL_SCHED_BITMAP +}; + +# Scheduler header file +# This option sets a preprocessor symbol which names the header +# file for the selected scheduler. It is used internally by the +# common scheduler code to include the correct header file. +# +cdl_option CYGPRI_KERNEL_SCHED_IMPL_HXX { + # Calculated value: CYGSEM_KERNEL_SCHED_BITMAP ? "<cyg/kernel/bitmap.hxx>" : CYGSEM_KERNEL_SCHED_MLQUEUE ? "<cyg/kernel/mlqueue.hxx>" : CYGSEM_KERNEL_SCHED_LOTTERY ? "<cyg/kernel/lottery.hxx>" : "!!!-- Configuration broken - no scheduler selected --!!!" + # CYGSEM_KERNEL_SCHED_BITMAP == 0 + # CYGSEM_KERNEL_SCHED_MLQUEUE == 1 + # CYGSEM_KERNEL_SCHED_LOTTERY (unknown) == 0 + # Flavor: data + # Current_value: <cyg/kernel/mlqueue.hxx> +}; + +# Number of priority levels +# This option controls the number of priority levels that are +# available. For some types of scheduler including the bitmap +# scheduler this may impose an upper bound on the number of +# threads in the system. For other schedulers such as the +# mlqueue scheduler the number of threads is independent from +# the number of priority levels. Note that the lowest priority +# level is normally used only by the idle thread, although +# application threads can run at this priority if necessary. +# +cdl_component CYGNUM_KERNEL_SCHED_PRIORITIES { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 1 to 32 + + # The following properties are affected by this value + # option CYGIMP_IDLE_THREAD_YIELD + # ActiveIf: (CYGNUM_KERNEL_SCHED_PRIORITIES == 1) + # option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT_PRIORITY + # LegalValues: 0 to CYGNUM_KERNEL_SCHED_PRIORITIES - 1 +}; + +# > +# Bitmap size +# This option automatically defines the size of bitmap +# used to track occupied priority levels. +# +cdl_option CYGNUM_KERNEL_SCHED_BITMAP_SIZE { + # Calculated value: "CYGNUM_KERNEL_SCHED_PRIORITIES" + # Flavor: data + # Current_value: CYGNUM_KERNEL_SCHED_PRIORITIES +}; + +# Dequeue highest priority threads first +# With this option enabled, threads queued in a thread queue +# will be dequeued in priority order, rather than first in, +# first out (FIFO). Threads of equal priority are dequeued +# oldest first. The only exception is the scheduler run +# queues where order is less important as each is already +# sorted by priority. Note that this makes the thread queueing +# less deterministic. +# +cdl_option CYGIMP_KERNEL_SCHED_SORTED_QUEUES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Scheduler timeslicing +# Some schedulers including the mlqueue scheduler support +# timeslicing. This means that the kernel will check regularly +# whether or not there is another runnable thread with the +# same priority, and if there is such a thread there will be +# an automatic context switch. Not all applications require +# timeslicing, for example because every thread performs a +# blocking operation regularly. For these applications it is +# possible to disable timeslicing, which reduces the overheads +# associated with timer interrupts. +# +cdl_component CYGSEM_KERNEL_SCHED_TIMESLICE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: !CYGSEM_KERNEL_SCHED_BITMAP + # CYGSEM_KERNEL_SCHED_BITMAP == 0 + # --> 1 + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # --> 1 +}; + +# > +# Number of clock ticks between timeslices +# Assuming timeslicing is enabled, how frequently should it +# take place? The value of this option corresponds to the +# number of clock ticks that should occur before a timeslice +# takes place, so increasing the value reduces the frequency +# of timeslices. +# +cdl_option CYGNUM_KERNEL_SCHED_TIMESLICE_TICKS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 5 + # value_source default + # Default value: 5 + # Legal values: 1 to 65535 +}; + +# Support runtime enable of timeslice per-thread +# This option makes timslicing a per-thread runtime +# option. When enabled, threads may have timeslicing +# turned on or off dynamically. This is generally used +# by higher level APIs (such as POSIX) to implement +# differing scheduling policies. +# +cdl_option CYGSEM_KERNEL_SCHED_TIMESLICE_ENABLE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: false + # false (unknown) == 0 + # --> 0 +}; + +# < +# Enable ASR support +# This component controls support for Asynchronous Service +# Routines (ASRs). This is a function that may be called +# from the scheduler when it has just exited the scheduler +# lock. This is primarily for use by API compatibility layers. +# +cdl_component CYGSEM_KERNEL_SCHED_ASR_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: false + # false (unknown) == 0 + # --> 0 +}; + +# > +# Make ASR function global +# This option controls whether the ASR function is shared by +# all threads, or whether each thread may have its own ASR +# function. +# +cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBAL { + # This option is not active + # The parent CYGSEM_KERNEL_SCHED_ASR_SUPPORT is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: true + # true (unknown) == 0 + # --> 0 +}; + +# Make ASR data global +# This option controls whether the ASR data is shared by +# all threads, or whether each thread may have its own ASR +# data. This is independent of the previous option because +# it may be useful to pass per-thread data to a shared ASR +# function. +# +cdl_option CYGSEM_KERNEL_SCHED_ASR_DATA_GLOBAL { + # This option is not active + # The parent CYGSEM_KERNEL_SCHED_ASR_SUPPORT is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: true + # true (unknown) == 0 + # --> 0 +}; + +# < +# < +# SMP support +# +cdl_component CYGPKG_KERNEL_SMP_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_HAL_SMP_SUPPORT + # CYGPKG_HAL_SMP_SUPPORT (unknown) == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGSEM_KERNEL_SCHED_BITMAP + # Requires: !CYGPKG_KERNEL_SMP_SUPPORT + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # +}; + +# Counters and clocks +# doc: ref/kernel-counters.html +# The counter objects provided by the kernel provide an +# abstraction of the clock facility that is generally provided. +# Application code can associate alarms with counters, where an +# alarm is identified by the number of ticks until it triggers, +# the action to be taken on triggering, and whether or not the +# alarm should be repeated. +# +cdl_component CYGPKG_KERNEL_COUNTERS { + # There is no associated value. +}; + +# > +# Provide real-time clock +# On all current target systems the kernel can provide a +# real-time clock. This clock serves two purposes. First it is +# necessary to support clock and alarm related functions. +# Second it is needed to implement timeslicing in some of the +# schedulers including the mlqueue scheduler. If the +# application does not require any of these facilities then it +# is possible to disable the real time clock support +# completely. +# +cdl_option CYGVAR_KERNEL_COUNTERS_CLOCK { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGIMP_KERNEL_INTERRUPTS_DSRS + # CYGIMP_KERNEL_INTERRUPTS_DSRS == 1 + # --> 1 + + # The following properties are affected by this value + # component CYGSEM_KERNEL_SCHED_TIMESLICE + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK + # option CYGNUM_KERNEL_COUNTERS_CLOCK_ISR_PRIORITY + # ActiveIf: CYGVAR_KERNEL_COUNTERS_CLOCK + # option CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK + # option CYGFUN_KERNEL_THREADS_TIMER + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK + # option CYGDBG_KERNEL_INSTRUMENT_CLOCK + # ActiveIf: CYGVAR_KERNEL_COUNTERS_CLOCK + # option CYGDBG_KERNEL_INSTRUMENT_ALARM + # ActiveIf: CYGVAR_KERNEL_COUNTERS_CLOCK + # option CYGDBG_KERNEL_INSTRUMENT_SMP + # ActiveIf: CYGVAR_KERNEL_COUNTERS_CLOCK + # component CYGPKG_HAL_TESTS + # Calculated: "tests/context tests/basic" + # . ((!CYGINT_HAL_TESTS_NO_CACHES) ? " tests/cache" : "") + # . ((CYGPKG_HAL_BUILD_COMPILER_TESTS) ? " tests/cpp1 tests/vaargs" : "") + # . ((!CYGVAR_KERNEL_COUNTERS_CLOCK) ? " tests/intr" : "") + # option CYGSEM_LIBC_TIME_CLOCK_WORKING + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK +}; + +# Interrupt priority for the real-time clock +# The implementation of the kernel's real-time clock typically +# involves installing an interrupt handler on a suitable hardware +# timer. This option controls the priority level used for that +# interrupt. On most platforms the value is not important because +# the clock ISR leaves most of the work to be done by the DSR. +# However some processors have interrupt controllers with special +# requirements for the interrupt priorities, in which case +# application developers must be able to manipulate the clock's +# priority. +# +cdl_option CYGNUM_KERNEL_COUNTERS_CLOCK_ISR_PRIORITY { + # ActiveIf constraint: CYGVAR_KERNEL_COUNTERS_CLOCK + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # --> 1 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0x000000E0 + # value_source default + # Default value: is_loaded(CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY) ? + # CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY : 1 + # CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY == 0x000000E0 + # CYGNUM_HAL_KERNEL_COUNTERS_CLOCK_ISR_DEFAULT_PRIORITY == 0x000000E0 + # --> 0x000000E0 +}; + +# +cdl_interface CYGINT_KERNEL_COUNTERS { + # Implemented by CYGIMP_KERNEL_COUNTERS_SINGLE_LIST, active, enabled + # Implemented by CYGIMP_KERNEL_COUNTERS_MULTI_LIST, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 == CYGINT_KERNEL_COUNTERS + # CYGINT_KERNEL_COUNTERS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_KERNEL_COUNTERS + # Requires: 1 == CYGINT_KERNEL_COUNTERS +}; + +# Implement counters using a single list +# There are two different implementations of the counter +# objects. The first implementation stores all alarms in a +# single linked list. The alternative implementation uses a +# table of linked lists. A single list is more efficient in +# terms of memory usage and is generally adequate when the +# application only makes use of a small number of alarms. +# +cdl_option CYGIMP_KERNEL_COUNTERS_SINGLE_LIST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Implement counters using a table of lists +# There are two different implementations of the counter +# objects. The first implementation stores all alarms in a +# single linked list. The alternative implementation uses a +# table of linked lists, with the size of the table being a +# separate configurable option. For more complicated +# operations it is better to have a table of lists since this +# reduces the amount of computation whenever the timer goes +# off. Assuming a table size of 8 (the default value) on +# average the timer code will only need to check 1/8 of the +# pending alarms instead of all of them. +# +cdl_component CYGIMP_KERNEL_COUNTERS_MULTI_LIST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Size of counter list table +# If counters are implemented using an array of linked lists +# then this option controls the size of the array. A larger +# size reduces the amount of computation that needs to take +# place whenever the timer goes off, but requires extra +# memory. +# +cdl_option CYGNUM_KERNEL_COUNTERS_MULTI_LIST_SIZE { + # This option is not active + # The parent CYGIMP_KERNEL_COUNTERS_MULTI_LIST is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 + # Legal values: 1 to 1024 +}; + +# < +# Sort the counter list +# Sorting the counter lists reduces the amount of work that +# has to be done when a counter tick is processed, since the +# next alarm to expire is always at the front of the list. +# However, it makes adding an alarm to the list more expensive +# since a search must be done for the correct place to put it. +# Many alarms are used to implement timeouts, which seldom trigger, +# so it is worthwhile optimizing this case. For this reason +# sorted list are disabled by default. +# +cdl_option CYGIMP_KERNEL_COUNTERS_SORT_LIST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Measure real-time [clock] interrupt latency +# Measure the interrupt latency as seen by the real-time clock +# timer interrupt. This requires hardware support, defined by +# the HAL_CLOCK_LATENCY() macro. +# +cdl_option CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY + # option CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY + # DefaultValue: CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY +}; + +# Measure real-time [clock] DSR latency +# Measure the DSR latency as seen by the real-time clock +# timer interrupt. This requires hardware support, defined by +# the HAL_CLOCK_LATENCY() macro. +# +cdl_option CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY + # CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY == 0 + # --> 0 + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY + # CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY == 0 + # --> 0 +}; + +# RTC resolution +# This option automatically defines the tuple which is used to +# initialize the RTC resolution, consisting of a numerator and +# denominator. The values of the numerator and denominator are +# defined by the HAL. +# +cdl_option CYGNUM_KERNEL_COUNTERS_RTC_RESOLUTION { + # Calculated value: "{CYGNUM_HAL_RTC_NUMERATOR, CYGNUM_HAL_RTC_DENOMINATOR}" + # Flavor: data + # Current_value: {CYGNUM_HAL_RTC_NUMERATOR, CYGNUM_HAL_RTC_DENOMINATOR} +}; + +# RTC period +# This option defines the RTC period to be used in +# setting the system clock hardware. It is essentially +# an alias for CYGNUM_HAL_RTC_PERIOD, which is defined +# in the HAL. +# +cdl_option CYGNUM_KERNEL_COUNTERS_RTC_PERIOD { + # Calculated value: "CYGNUM_HAL_RTC_PERIOD" + # Flavor: data + # Current_value: CYGNUM_HAL_RTC_PERIOD +}; + +# < +# Thread-related options +# There are a number of configuration options related to the +# implementation of threads, for example whether or not the +# eCos kernel supports per-thread data. +# +cdl_component CYGPKG_KERNEL_THREADS { + # There is no associated value. + + # The following properties are affected by this value + # option CYGDBG_KERNEL_INSTRUMENT_THREAD + # ActiveIf: CYGPKG_KERNEL_THREADS +}; + +# > +# Allow per-thread timers +# This option controls whether or not the kernel should support +# per-thread clock and alarm related functions. Also some of +# the synchronization primitives such as semaphore and +# condition variable timed wait operations require per-thread +# timer support. If none of these facilities are required then +# the option can be disabled. +# +cdl_option CYGFUN_KERNEL_THREADS_TIMER { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT + # Requires: CYGFUN_KERNEL_THREADS_TIMER + # option CYGSEM_LIBC_TIME_CLOCK_WORKING + # Requires: CYGFUN_KERNEL_THREADS_TIMER +}; + +# Support optional name for each thread +# Threads may optionally be supplied with a name string that is +# used to identify them during debugging. This name is only +# present if `this option is defined. Disabling it reduces both +# code and data size. +# +cdl_option CYGVAR_KERNEL_THREADS_NAME { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Keep track of all threads using a linked list +# Threads may optionally be placed on a housekeeping list so +# that all threads may be located easily. This is useful mainly +# in conjunction with source-level debugging. +# +cdl_option CYGVAR_KERNEL_THREADS_LIST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGFUN_KERNEL_ALL_THREADS_STACK_CHECKING + # Requires: CYGVAR_KERNEL_THREADS_LIST + # option CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT + # Requires: CYGVAR_KERNEL_THREADS_LIST +}; + +# Keep track of the base of each thread's stack +# This option makes the kernel keep track of the lower limit on +# each thread's stack. It allows the kernel to adjust the lower +# limit, thus making space for per-thread data. Note that it +# does not imply any form of run-time stack overflow checking. +# +cdl_option CYGFUN_KERNEL_THREADS_STACK_LIMIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGVAR_KERNEL_THREADS_DATA + # Requires: CYGFUN_KERNEL_THREADS_STACK_LIMIT +}; + +# Check thread stacks for overflows +# This option enables a variety of checks for stack overflow +# including signatures at the top and base of thread stacks, +# which are asserted for correctness whenever a thread switches. +# +cdl_component CYGFUN_KERNEL_THREADS_STACK_CHECKING { + # This option is not active + # ActiveIf constraint: CYGPKG_INFRA_DEBUG + # CYGPKG_INFRA_DEBUG == 0 + # --> 0 + # ActiveIf constraint: CYGDBG_USE_ASSERTS + # CYGDBG_USE_ASSERTS == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Check all threads whenever possible +# This option enables more active checking of all threads for +# wrongdoing. In theory, checking threads other than the old and new +# executing threads in a thread-switch is pointless, because no other +# thread has run, so no other stack can be exceeded. But errors such +# as memory scribbling, dangling pointers, overlapping use of store +# or errors accessing objects adjacent to a stack which can be very +# hard to find can be detected this way, saving debug time. +# +cdl_option CYGFUN_KERNEL_ALL_THREADS_STACK_CHECKING { + # This option is not active + # The parent CYGFUN_KERNEL_THREADS_STACK_CHECKING is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGVAR_KERNEL_THREADS_LIST + # CYGVAR_KERNEL_THREADS_LIST == 1 + # --> 1 +}; + +# Signature size in bytes, at stack top and bottom +# This is the size of the area reserved for a signature at the top +# and bottom of all stacks. It also provides a buffer zone for +# detecting overflow before external objects are corrupted, hence the +# ability to vary it here. But if you are short of stack, increasing +# this value will make the overflow more, not less likely, of course. +# +cdl_option CYGNUM_KERNEL_THREADS_STACK_CHECK_DATA_SIZE { + # This option is not active + # The parent CYGFUN_KERNEL_THREADS_STACK_CHECKING is not active + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 8 to 512 +}; + +# < +# Measure stack usage +# This option allows measurement of each thread's stack by initializing +# it to a predefined value at thread creation time. Later use of the +# cyg_thread_measure_stack_usage() function allows the maximum stack +# usage of the thread so far to be obtained. Note that this is not +# necessarily the true maximum stack usage that the thread will ever +# use since all that has been measured is the stack usage corresponding +# to the code path followed this time, and not the code path that may +# be followed in future. +# +cdl_component CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 != CYGPKG_INFRA_DEBUG + # CYGPKG_INFRA_DEBUG == 0 + # --> 0 +}; + +# > +# Output stack usage on thread exit +# This will output the measured stack usage on the diagnostic +# output when a thread exits. +# +cdl_option CYGDBG_KERNEL_THREADS_STACK_MEASUREMENT_VERBOSE_EXIT { + # This option is not active + # The parent CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Support for per-thread data +# doc: ref/kernel-thread-data.html +# It is possible for the kernel to support per-thread data, in +# other words an area of memory specific to each thread which +# can be used to store data for that thread. This per-thread +# data can be used by applications or by other packages such as +# the ISO C library. +# +cdl_component CYGVAR_KERNEL_THREADS_DATA { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGFUN_KERNEL_THREADS_STACK_LIMIT + # CYGFUN_KERNEL_THREADS_STACK_LIMIT == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_LIBC_I18N_PER_THREAD_MB + # Requires: CYGVAR_KERNEL_THREADS_DATA + # option CYGSEM_LIBC_I18N_PER_THREAD_MB + # DefaultValue: CYGVAR_KERNEL_THREADS_DATA != 0 + # option CYGSEM_LIBC_PER_THREAD_RAND + # Requires: CYGVAR_KERNEL_THREADS_DATA + # option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK + # Requires: CYGVAR_KERNEL_THREADS_DATA + # option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK + # DefaultValue: CYGVAR_KERNEL_THREADS_DATA + # option CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE + # Requires: CYGVAR_KERNEL_THREADS_DATA + # option CYGSEM_LIBM_THREAD_SAFE_GAMMA_FUNCTIONS + # Requires: CYGVAR_KERNEL_THREADS_DATA + # option CYGSEM_ERROR_PER_THREAD_ERRNO + # Requires: CYGVAR_KERNEL_THREADS_DATA +}; + +# > +# Number of words of per-thread data +# It is possible for the kernel to support per-thread data, in +# other words an area of memory specific to each thread which +# can be used to store data for that thread. This per-thread +# data can be used by applications or by other packages such as +# the ISO C library. This configuration option controls the +# number of words of per-thread data that the kernel will +# allow. In the current implementation a bitmask is used to identify +# used per-thread data slots and so the maximum legal value must +# remain 32. +# +cdl_option CYGNUM_KERNEL_THREADS_DATA_MAX { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 6 + # value_source default + # Default value: 6 + # Legal values: 4 to 32 +}; + +# Bitmap of preallocated slots of thread data +# Per thread data options. Per thread data support is based loosely +# on that defined by POSIX. Each thread has an array of slots, up to +# CYGNUM_KERNEL_THREADS_DATA_MAX, that may contain data. Some of the +# slots have been preallocated to specific packages. Others may be +# allocated dynamically. +# +cdl_component CYGNUM_KERNEL_THREADS_DATA_ALL { + # Calculated value: 15 + # Flavor: data + # Current_value: 15 +}; + +# > +# Slot 0 preallocated for the kernel +# This option defines the index of a per-thread data +# slot which is reserved by +# the eCos kernel +# for private use. +# +cdl_option CYGNUM_KERNEL_THREADS_DATA_KERNEL { + # Calculated value: 0 + # Flavor: data + # Current_value: 0 +}; + +# Slot 1 preallocated for uITRON +# This option defines the index of a per-thread data +# slot which is reserved by +# the uITRON compatibility layer +# for private use. +# +cdl_option CYGNUM_KERNEL_THREADS_DATA_ITRON { + # Calculated value: 1 + # Flavor: data + # Current_value: 1 +}; + +# Slot 2 preallocated for errno +# This option defines the index of a per-thread data +# slot which is reserved for use by an errno variable. +# +cdl_option CYGNUM_KERNEL_THREADS_DATA_ERRNO { + # Calculated value: 2 + # Flavor: data + # Current_value: 2 +}; + +# Slot 3 preallocated for POSIX +# This option defines the index of a per-thread data +# slot which is reserved by +# POSIX +# for private use. +# +cdl_option CYGNUM_KERNEL_THREADS_DATA_POSIX { + # Calculated value: 3 + # Flavor: data + # Current_value: 3 +}; + +# < +# < +# Thread destructors +# doc: ref/kernel-thread-destructors.html +# This option enables support for registered destructor functions to +# be called on thread exit. +# +cdl_component CYGPKG_KERNEL_THREADS_DESTRUCTORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# > +# Number of possible destructors +# This option gives the number of possible destructors allowed. +# Increasing this will increase the size of every +# thread control structure if per-thread destructors are +# enabled. +# +cdl_option CYGNUM_KERNEL_THREADS_DESTRUCTORS { + # This option is not active + # The parent CYGPKG_KERNEL_THREADS_DESTRUCTORS is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 + # Legal values: 1 to 65535 +}; + +# Per-thread destructors +# Enabling this option makes the thread destructors a per-thread +# property, with each thread having its own list of destructors. +# Disabling this option makes the thread destructor list +# global so all threads have the same destructors. +# +cdl_option CYGSEM_KERNEL_THREADS_DESTRUCTORS_PER_THREAD { + # This option is not active + # The parent CYGPKG_KERNEL_THREADS_DESTRUCTORS is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Stack size for the idle thread +# This configuration option specifies the stack size in bytes +# for the idle thread. Unless the HAL is configured to use a +# separate interrupt stack this size must be sufficient to meet +# the requirements of all interrupt handlers - these +# requirements are cumulative if nested interrupted are +# enabled. Depending on the target architecture, the stack size +# typically has to be a multiple of eight or sixteen bytes. +# This will be overridden where it is used if the +# architectural HAL requires a minimum stack size +# to handle interrupts correctly. +# +cdl_option CYGNUM_KERNEL_THREADS_IDLE_STACK_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2048 + # value_source default + # Default value: 2048 + # Legal values: 512 to 65536 +}; + +# Maximal suspend count +# This option provides for an assertion that the count value for +# counted thread suspends do not exceed set limits. This is to help +# with debugging, to allow a runaway loop, for example, to be +# detected more easily. +# If the option is not defined, no assert is included. Whether asserts +# are themselves included depends on infrastructure configury in +# infra.h +# +cdl_option CYGNUM_KERNEL_MAX_SUSPEND_COUNT_ASSERT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# Maximal wake count +# This option provides for an assertion that the count value for +# counted thread wakeups do not exceed set limits. This is to +# help with debugging, to allow a runaaway loop, for example, to +# be detected more easily. +# If the option is not defined, no assert is included. Whether asserts +# are themselves included depends on infrastructure configury in +# infra.h +# +cdl_option CYGNUM_KERNEL_MAX_COUNTED_WAKE_COUNT_ASSERT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 500 + # value_source default + # Default value: 500 +}; + +# Idle thread must always yield +# If the scheduler configuration only has a single priority +# level, then the idle thread must yield each time around its loop. +# +cdl_option CYGIMP_IDLE_THREAD_YIELD { + # This option is not active + # ActiveIf constraint: (CYGNUM_KERNEL_SCHED_PRIORITIES == 1) + # CYGNUM_KERNEL_SCHED_PRIORITIES == 32 + # --> 0 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# < +# Synchronization primitives +# The eCos kernel supports a number of different +# synchronization primitives such as mutexes, semaphores, +# condition variables, and message boxes. There are +# configuration options to control the exact behaviour of some +# of these synchronization primitives. +# +cdl_component CYGPKG_KERNEL_SYNCH { + # There is no associated value. + + # The following properties are affected by this value + # option CYGDBG_KERNEL_INSTRUMENT_MUTEX + # ActiveIf: CYGPKG_KERNEL_SYNCH + # option CYGDBG_KERNEL_INSTRUMENT_CONDVAR + # ActiveIf: CYGPKG_KERNEL_SYNCH + # option CYGDBG_KERNEL_INSTRUMENT_BINSEM + # ActiveIf: CYGPKG_KERNEL_SYNCH + # option CYGDBG_KERNEL_INSTRUMENT_CNTSEM + # ActiveIf: CYGPKG_KERNEL_SYNCH + # option CYGDBG_KERNEL_INSTRUMENT_MBOXT + # ActiveIf: CYGPKG_KERNEL_SYNCH + # option CYGDBG_KERNEL_INSTRUMENT_FLAG + # ActiveIf: CYGPKG_KERNEL_SYNCH +}; + +# > +# Priority inversion protection protocols +# doc: ref/kernel-mutexes.html +# This component controls the protocols used to protect mutexes against +# priority inversion. If this option is enabled it defines which +# algorithm is used to implement this protection. At present only +# one such algorithm is defined: "SIMPLE". The implementation +# will only work in the mlqueue scheduler, and it does not handle the +# rare case of nested mutexes completely correctly. However it is +# both fast and deterministic. +# +cdl_component CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL { + # ActiveIf constraint: CYGSEM_KERNEL_SCHED_MLQUEUE + # CYGSEM_KERNEL_SCHED_MLQUEUE == 1 + # --> 1 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 SIMPLE + # value_source default + # Default value: 1 SIMPLE + # Legal values: "SIMPLE" + # Requires: CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES == 0 + # CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES == 0 + # --> 1 +}; + +# > +# Enable priority inheritance protocol +# This option enables priority inheritance protocol. This protocol +# causes the owner of a mutex to be executed at the highest priority +# of the threads waiting for access to the mutex. +# +cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT + # DefaultValue: CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT ? + # "INHERIT" : + # CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING ? + # "CEILING" : "NONE" +}; + +# Enable priority ceiling protocol +# This option enables priority ceiling protocol. This protocol +# causes the owner of a mutex to be executed at a priority +# associated with the mutex. +# +cdl_component CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT_PRIORITY + # ActiveIf: CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING + # option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT + # DefaultValue: CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT ? + # "INHERIT" : + # CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING ? + # "CEILING" : "NONE" +}; + +# > +# Default priority ceiling +# This option defines the default priority ceiling to be +# used if the chosen default priority inversion protocol is +# priority ceoptioniling protocol. The default value for this is zero, +# making all such mutexes boost threads to the maximum priority. +# +cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT_PRIORITY { + # ActiveIf constraint: CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING + # CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING == 1 + # --> 1 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to CYGNUM_KERNEL_SCHED_PRIORITIES - 1 + # CYGNUM_KERNEL_SCHED_PRIORITIES == 32 +}; + +# < +# No priority inversion protocol +# This option enables the ability to have no priority inversion protocol. +# It is equivalent to disabling the priority inversion protocol at +# the top level, but is necessary for the runtime and default +# selection options. +# +cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_NONE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Default priority inversion protocol +# This option defines the default inversion protocol used for mutexes that +# are created without an explicit protocol being specified. The protocol +# chosen by default is to use priority inheritance if it is present otherwise +# priority ceiling, or none if neither is present. +# +cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT { + # ActiveIf constraint: CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT > 1 + # CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT == 3 + # --> 1 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value INHERIT + # value_source default + # Default value: CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT ? + # "INHERIT" : + # CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING ? + # "CEILING" : "NONE" + # CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT == 1 + # CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING == 1 + # --> INHERIT + # Legal values: "INHERIT" "CEILING" "NONE" +}; + +# Specify mutex priority inversion protocol at runtime +# This option controls whether the priority inversion protocol used by +# a mutex can be specified when that mutex is created. +# +cdl_option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DYNAMIC { + # ActiveIf constraint: CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT > 1 + # CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT == 3 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Number of protocols selected +# +cdl_interface CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT { + # Implemented by CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_INHERIT, active, enabled + # Implemented by CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING, active, enabled + # Implemented by CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_NONE, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 3 + + # The following properties are affected by this value + # option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DEFAULT + # ActiveIf: CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT > 1 + # option CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DYNAMIC + # ActiveIf: CYGINT_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_COUNT > 1 +}; + +# < +# Use mboxt_plain mbox implementation +# Use the plain mboxt implementation instead of the mboxt2 +# implementation. The mboxt2 version is designed to provide +# semantics compatible with UITRON, the plain implementation +# is adquate in most other situations. +# +cdl_option CYGIMP_MBOX_USE_MBOXT_PLAIN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Message box blocking put support +# doc: ref/kernel-mail-boxes.html +# Message boxes can support three different versions of the +# put-message operation. The first is tryput(), which will fail +# if the message box is already full. The other two are the +# ordinary put() function which will block if the message box +# is full, and a timed put() operation which will block for +# upto a certain length of time if the message box is currently +# full. The blocking versions require extra memory in the +# message box data structure and extra code in the other +# message box functions, so they can be disabled if the +# application does not require them. If this option is enabled +# then the system will always provide the blocking put() +# function, and it will also provide the timed put() function +# if thread timers are enabled. +# +cdl_option CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Message box queue size +# doc: ref/kernel-mail-boxes.html +# This configuration option controls the number of messages +# that can be queued in a message box before a non-blocking +# put() operation will fail or a blocking put() operation will +# block. The cost in memory is one pointer per message box for +# each possible message. +# +cdl_option CYGNUM_KERNEL_SYNCH_MBOX_QUEUE_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 + # Legal values: 1 to 65535 +}; + +# Condition variable timed-wait support +# doc: ref/kernel-condition-variables.html +# This option enables the condition variable timed wait +# facility. +# +cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGFUN_KERNEL_THREADS_TIMER + # CYGFUN_KERNEL_THREADS_TIMER == 1 + # --> 1 +}; + +# Condition variable explicit mutex wait support +# doc: ref/kernel-condition-variables.html +# This option enables the condition variable explicit mutex wait +# facility. By default condition variables in eCos are created with +# a statically associated mutex. This option permits wait (and timed wait +# if CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT is enabled) to provide a +# different mutex as an argument. This makes no difference to the semantics +# the wait operation except that a different mutex will be used during it. +# +cdl_option CYGMFN_KERNEL_SYNCH_CONDVAR_WAIT_MUTEX { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Avoid inlines in mqueue implementation +# With this option disabled, the 'mqueue' message queue implementation +# provides most of its implementation via inlines. However this can +# adversely affect code size in application that make lots of mqueue +# calls from different places, so enabling this option provides +# non-inline versions to be used instead. +# +cdl_option CYGIMP_KERNEL_SYNCH_MQUEUE_NOT_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Kernel instrumentation +# doc: user-guide/kernel-instrumentation.html +# The current release of the kernel contains an initial version +# of instrumentation support. The various parts of the kernel +# will invoke instrumentation routines whenever appropriate +# events occur, and these will be stored in a circular buffer +# for later reference. +# +cdl_component CYGPKG_KERNEL_INSTRUMENT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # +}; + +# > +# Use buffer provided by the application +# In most circumstances the kernel should provide the +# instrumentation circular buffer itself. Occasionally +# application code may wish to provide the buffer instead, +# giving the application code more convenient access to the +# buffer. This also makes it possible to put the circular +# buffer in special areas of memory, for example a region that +# is shared with the host. +# +cdl_option CYGVAR_KERNEL_INSTRUMENT_EXTERNAL_BUFFER { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Instrumentation buffer size +# If kernel instrumentation is enabled then the instrumentation +# data goes into a circular buffer. A larger buffer allows +# more data to be stored, but at a significant cost in memory. +# The value of this option corresponds to the number of entries +# in the table, and typically each entry will require 16 bytes +# of memory. +# +cdl_option CYGNUM_KERNEL_INSTRUMENT_BUFFER_SIZE { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 + # Legal values: 16 to 0x100000 +}; + +# Wrap instrumentation buffer +# When the instrumentation buffer is full it can either be restarted +# from the beginning, overwriting older data, or it can stop at the +# end. The former is useful if you want to look at the last entries +# made while the latter is useful if you want to look at the first +# few. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_BUFFER_WRAP { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Perform selective instrumentation +# The kernel can either collect all instrumentation events, or +# it can filter out events at runtime based on a set of flags. +# For example it would be possible to decide at runtime that +# only scheduler and interrupt instrumentation flags are of +# interest and that all other flags should be ignored. This +# flag mechanism involves extra code and processor cycle +# overhead in the instrumentation code, so it can be disabled +# if the application developer is interested in all +# instrumentation events. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_FLAGS { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument common scheduler operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the scheduling code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_SCHED { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_SCHED + # CYGPKG_KERNEL_SCHED == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument thread operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the code that manipulates threads. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_THREAD { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_THREADS + # CYGPKG_KERNEL_THREADS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument interrupt-related operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the interrupt handling code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_INTR { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_INTERRUPTS + # CYGPKG_KERNEL_INTERRUPTS == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument mutex operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the mutex code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_MUTEX { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_SYNCH + # CYGPKG_KERNEL_SYNCH == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument condition variable operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the condition variable code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_CONDVAR { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_SYNCH + # CYGPKG_KERNEL_SYNCH == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument binary semaphore operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the binary semaphore code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_BINSEM { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_SYNCH + # CYGPKG_KERNEL_SYNCH == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument counting semaphore operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the counting semaphore code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_CNTSEM { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_SYNCH + # CYGPKG_KERNEL_SYNCH == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument message box operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the message box code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_MBOXT { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_SYNCH + # CYGPKG_KERNEL_SYNCH == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument event flag operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the event flag code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_FLAG { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGPKG_KERNEL_SYNCH + # CYGPKG_KERNEL_SYNCH == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument clock operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the real-time clock code. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_CLOCK { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGVAR_KERNEL_COUNTERS_CLOCK + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument alarm-related operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the code related to alarm operations. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_ALARM { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGVAR_KERNEL_COUNTERS_CLOCK + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument SMP-related operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the code related to SMP operations. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_SMP { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGVAR_KERNEL_COUNTERS_CLOCK + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument multi-level queue scheduler operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the code for the multi-level queue scheduler. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_MLQ { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGSEM_KERNEL_SCHED_MLQUEUE + # CYGSEM_KERNEL_SCHED_MLQUEUE == 1 + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Instrument bitmap scheduler operations +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not instrumentation support is compiled into +# the code for the bitmap scheduler. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_BITMAP { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + # ActiveIf constraint: CYGSEM_KERNEL_SCHED_BITMAP + # CYGSEM_KERNEL_SCHED_BITMAP == 0 + # --> 0 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Support application-level instrumentation +# It is possible to perform selective instrumentation at +# run-time. It is also possible to disable instrumentation +# in various kernel components at compile-time, thus +# reducing the code size overheads. This option controls +# whether or not application-level instrumentation gets +# compiled in. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_USER { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Provide user-friendly instrumentation messages +# Include code which will convert the instrument type field +# into a more human understandable string +# +cdl_component CYGDBG_KERNEL_INSTRUMENT_MSGS { + # This option is not active + # The parent CYGPKG_KERNEL_INSTRUMENT is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Rebuild the header file +# Make (using a shell script) include/cyg/kernel/instrument_desc.h in +# your build tree; this is normally simply copied from the repository. +# If you make a permanent change to include/instrmnt.h, such that +# instrument_desc.h needs updating, it's up to you to first delete the +# master file +# ECOS_REPOSITORY/kernel/VERSION/include/instrument_desc.h +# in your source repository, make the new version by enabling this +# option then copy the new file +# back from your build place to its source in +# ECOS_REPOSITORY/kernel/VERSION/include/instrument_desc.h +# and/or commit this to any version control system that you use. +# +cdl_option CYGDBG_KERNEL_INSTRUMENT_MSGS_BUILD_HEADERFILE { + # This option is not active + # The parent CYGDBG_KERNEL_INSTRUMENT_MSGS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Build the host tool to print out a dump +# Generate a host program which can dump the instrumentation +# data in a human readable format. You have to somehow get the +# instrumentation buffer into a file on the host. 'Exercise for +# the reader' as university lecturers tend to say. +# +cdl_component CYGDBG_KERNEL_INSTRUMENT_BUILD_HOST_DUMP { + # This option is not active + # The parent CYGDBG_KERNEL_INSTRUMENT_MSGS is not active + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# < +# Source-level debugging support +# If the source level debugger gdb is to be used for debugging +# application code then it may be necessary to configure in support +# for this in the kernel. +# +cdl_component CYGPKG_KERNEL_DEBUG { + # There is no associated value. +}; + +# > +# Include GDB multi-threading debug support +# This option enables some extra kernel code which is needed +# to support multi-threaded source level debugging. +# +cdl_option CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGVAR_KERNEL_THREADS_LIST + # CYGVAR_KERNEL_THREADS_LIST == 1 + # --> 1 + # Requires: CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + # ActiveIf: CYGSEM_HAL_ROM_MONITOR || CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT +}; + +# < +# Kernel APIs +# The eCos kernel is implemented in C++, so a C++ interface +# to the kernel is always available. There is also an optional +# C API. Additional API's may be provided in future versions. +# +cdl_component CYGPKG_KERNEL_API { + # There is no associated value. +}; + +# > +# Provide C API +# The eCos kernel is implemented in C++, but there is an +# optional C API for use by application code. This C API can be +# disabled if the application code does not invoke the kernel +# directly, but instead uses higher level code such as the +# uITRON compatibility layer. +# +cdl_option CYGFUN_KERNEL_API_C { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # + # option CYGFUN_MEMALLOC_KAPI + # DefaultValue: CYGFUN_KERNEL_API_C +}; + +# < +# Kernel build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_KERNEL_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the eCos kernel. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_KERNEL_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the eCos kernel. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_KERNEL_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Kernel tests +# This option specifies the set of tests for the eCos kernel. +# +cdl_component CYGPKG_KERNEL_TESTS { + # Calculated value: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # + # CYGFUN_KERNEL_API_C == 1 + # CYGPKG_INFRA_DEBUG == 0 + # CYGPKG_KERNEL_INSTRUMENT == 0 + # CYGFUN_KERNEL_API_C == 1 + # CYGPKG_KERNEL_SMP_SUPPORT == 0 + # CYGFUN_KERNEL_API_C == 1 + # CYGINT_HAL_TESTS_NO_CACHES == 0 + # CYGFUN_KERNEL_API_C == 1 + # CYGFUN_KERNEL_API_C == 1 + # CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST == 0 + # Flavor: data + # Current_value: tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2 tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0 tests/dhrystone tests/kcache1 tests/kcache2 tests/fpint_thread_switch tests/fptest tests/fpinttestf tests/fpinttestf2 +}; + +# > +# Suppress multi thread floating point test +# Hardware floating point configurations that do not +# preserve FPU context are supposed to fail multi thread FPU +# integrity tests. Setting this option to 1 shall suppress +# building of such tests and shall build single thread fpu +# integrity test instead. +# +cdl_option CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # component CYGPKG_KERNEL_TESTS + # Calculated: + # "tests/bin_sem0 tests/bin_sem1 tests/bin_sem2 tests/bin_sem3 tests/clock0 tests/clock1 tests/clockcnv tests/clocktruth tests/cnt_sem0 tests/cnt_sem1 tests/except1 tests/flag0 tests/flag1 tests/intr0 tests/kill tests/mbox1 tests/mqueue1 tests/mutex0 tests/mutex1 tests/mutex2 tests/mutex3 tests/release tests/sched1 tests/sync2 tests/sync3 tests/thread0 tests/thread1 tests/thread2" + # . ((CYGFUN_KERNEL_API_C) ? " tests/kclock0 tests/kclock1 tests/kexcept1 tests/kflag0 tests/kflag1 tests/kintr0 tests/klock tests/kmbox1 tests/kmutex0 tests/kmutex1 tests/kmutex3 tests/kmutex4 tests/ksched1 tests/ksem0 tests/ksem1 tests/kthread0 tests/kthread1 tests/stress_threads tests/thread_gdb tests/timeslice tests/timeslice2 tests/tm_basic tests/kalarm0" : "") + # . ((!CYGPKG_INFRA_DEBUG && !CYGPKG_KERNEL_INSTRUMENT && CYGFUN_KERNEL_API_C) ? " tests/dhrystone" : "") + # . ((CYGPKG_KERNEL_SMP_SUPPORT && CYGFUN_KERNEL_API_C) ? " tests/smp" : "") + # . ((!CYGINT_HAL_TESTS_NO_CACHES && CYGFUN_KERNEL_API_C) ? " tests/kcache1 tests/kcache2" : "") + # . ((CYGFUN_KERNEL_API_C) ? (" tests/fpint_thread_switch" . (CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST ? " tests/fpinttestf1" : + # " tests/fptest tests/fpinttestf tests/fpinttestf2")) : "") + # + # option CYGHWR_HAL_CORTEXM_FPU_SWITCH + # Requires: is_active (CYGPKG_KERNEL) implies + # CYGTST_KERNEL_SKIP_MULTI_THREAD_FP_TEST == + # (CYGHWR_HAL_CORTEXM_FPU_SWITCH == "NONE") +}; + +# < +# < +# < +# Dynamic memory allocation +# doc: ref/memalloc.html +# This package provides memory allocator infrastructure required for +# dynamic memory allocators, including the ISO standard malloc +# interface. It also contains some sample implementations. +# +cdl_package CYGPKG_MEMALLOC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current +}; + +# > +# Memory allocator implementations +# This component contains configuration options related to the +# various memory allocators available. +# +cdl_component CYGPKG_MEMALLOC_ALLOCATORS { + # There is no associated value. +}; + +# > +# Fixed block allocator +# This component contains configuration options related to the +# fixed block memory allocator. +# +cdl_component CYGPKG_MEMALLOC_ALLOCATOR_FIXED { + # There is no associated value. +}; + +# > +# Make thread safe +# With this option enabled, this allocator will be +# made thread-safe. Additionally allocation functions +# are made available that allow a thread to wait +# until memory is available. +# +cdl_option CYGSEM_MEMALLOC_ALLOCATOR_FIXED_THREADAWARE { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Simple variable block allocator +# This component contains configuration options related to the +# simple variable block memory allocator. This allocator is not +# very fast, and in particular does not scale well with large +# numbers of allocations. It is however very compact in terms of +# code size and does not have very much overhead per allocation. +# +cdl_component CYGPKG_MEMALLOC_ALLOCATOR_VARIABLE { + # There is no associated value. +}; + +# > +# Make thread safe +# With this option enabled, this allocator will be +# made thread-safe. Additionally allocation functions +# are added that allow a thread to wait until memory +# are made available that allow a thread to wait +# until memory is available. +# +cdl_option CYGSEM_MEMALLOC_ALLOCATOR_VARIABLE_THREADAWARE { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Coalesce memory +# The variable-block memory allocator can perform coalescing +# of memory whenever the application code releases memory back +# to the pool. This coalescing reduces the possibility of +# memory fragmentation problems, but involves extra code and +# processor cycles. +# +cdl_option CYGSEM_MEMALLOC_ALLOCATOR_VARIABLE_COALESCE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGIMP_MEMALLOC_MALLOC_VARIABLE_SIMPLE + # Requires: CYGSEM_MEMALLOC_ALLOCATOR_VARIABLE_COALESCE +}; + +# < +# Doug Lea's malloc +# This component contains configuration options related to the +# port of Doug Lea's memory allocator, normally known as +# dlmalloc. dlmalloc has a reputation for being both fast +# and space-conserving, as well as resisting fragmentation well. +# It is a common choice for a general purpose allocator and +# has been used in both newlib and Linux glibc. +# +cdl_component CYGPKG_MEMALLOC_ALLOCATOR_DLMALLOC { + # There is no associated value. +}; + +# > +# Debug build +# Doug Lea's malloc implementation has substantial amounts +# of internal checking in order to verify the operation +# and consistency of the allocator. However this imposes +# substantial overhead on each operation. Therefore this +# checking may be individually disabled. +# +cdl_option CYGDBG_MEMALLOC_ALLOCATOR_DLMALLOC_DEBUG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 != CYGDBG_USE_ASSERTS + # CYGDBG_USE_ASSERTS == 0 + # --> 0 + # Requires: CYGDBG_USE_ASSERTS + # CYGDBG_USE_ASSERTS == 0 + # --> 0 +}; + +# Make thread safe +# With this option enabled, this allocator will be +# made thread-safe. Additionally allocation functions +# are made available that allow a thread to wait +# until memory is available. +# +cdl_option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_THREADAWARE { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 +}; + +# Support more than one instance +# Having this option disabled allows important +# implementation structures to be declared as a single +# static instance, allowing faster access. However this +# would fail if there is more than one instance of +# the dlmalloc allocator class. Therefore this option can +# be enabled if multiple instances are required. Note: as +# a special case, if this allocator is used as the +# implementation of malloc, and it can be determined there +# is more than one malloc pool, then this option will be +# silently enabled. +# +cdl_option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_SAFE_MULTIPLE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Use system memmove() and memset() +# This may be used to control whether memset() and memmove() +# are used within the implementation. The alternative is +# to use some macro equivalents, which have been reported +# to be faster in some circumstances. The use of "MEMCPY" +# in the CDL option name is an anachronism and only +# present for backwards compatibility. +# +cdl_option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_USE_MEMCPY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: (0 != CYGPKG_ISOINFRA) && (0 != CYGINT_ISO_STRING_MEMFUNCS) + # CYGPKG_ISOINFRA == current + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 +}; + +# Minimum alignment of allocated blocks +# This option controls the minimum alignment that the +# allocated memory blocks are aligned on, specified as +# 2^N. Note that using large mininum alignments can lead +# to excessive memory wastage. +# +cdl_option CYGNUM_MEMALLOC_ALLOCATOR_DLMALLOC_ALIGNMENT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 3 + # value_source default + # Default value: 3 + # Legal values: 3 to 10 +}; + +# < +# Variable block allocator with separate metadata +# This component contains configuration options related to the +# variable block memory allocator with separate metadata. +# +cdl_component CYGPKG_MEMALLOC_ALLOCATOR_SEPMETA { + # There is no associated value. +}; + +# > +# Make thread safe +# With this option enabled, this allocator will be +# made thread-safe. Additionally allocation functions +# are made available that allow a thread to wait +# until memory is available. +# +cdl_option CYGSEM_MEMALLOC_ALLOCATOR_SEPMETA_THREADAWARE { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# < +# Kernel C API support for memory allocation +# This option must be enabled to provide the extensions required +# to support integration into the kernel C API. +# +cdl_option CYGFUN_MEMALLOC_KAPI { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGFUN_KERNEL_API_C + # CYGFUN_KERNEL_API_C == 1 + # --> 1 +}; + +# malloc(0) returns NULL +# This option controls the behavior of malloc(0) ( or calloc with +# either argument 0 ). It is permitted by the standard to return +# either a NULL pointer or a unique pointer. Enabling this option +# forces a NULL pointer to be returned. +# +cdl_option CYGSEM_MEMALLOC_MALLOC_ZERO_RETURNS_NULL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Breakpoint site when running out of memory +# Whenever the system runs out of memory, it invokes this function +# before either going to sleep waiting for memory to become +# available or returning failure. +# +cdl_option CYGSEM_MEMALLOC_INVOKE_OUT_OF_MEMORY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# malloc() and supporting allocators +# This component enables support for dynamic memory +# allocation as supplied by the functions malloc(), +# free(), calloc() and realloc(). As these +# functions are often used, but can have quite an +# overhead, disabling them here can ensure they +# cannot even be used accidentally when static +# allocation is preferred. Within this component are +# various allocators that can be selected for use +# as the underlying implementation of the dynamic +# allocation functions. +# +cdl_component CYGPKG_MEMALLOC_MALLOC_ALLOCATORS { + # ActiveIf constraint: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Use external heap definition +# This option allows other components in the +# system to override the default system +# provision of heap memory pools. This should +# be set to a header which provides the equivalent +# definitions to <pkgconf/heaps.hxx>. +# +cdl_component CYGBLD_MEMALLOC_MALLOC_EXTERNAL_HEAP_H { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Use external implementation of joining multiple heaps +# The default implementation of joining multiple heaps +# is fine for the case where there are multiple disjoint +# memory regions of the same type. However, in a system +# there might be e.g. a small amount of internal SRAM and +# a large amount of external DRAM. The SRAM is faster and +# the DRAM is slower. An application can implement some +# heuristic to choose which pool to allocate from. This +# heuristic can be highly application specific. +# +cdl_component CYGBLD_MEMALLOC_MALLOC_EXTERNAL_JOIN_H { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# malloc() allocator implementations +# +cdl_interface CYGINT_MEMALLOC_MALLOC_ALLOCATORS { + # Implemented by CYGIMP_MEMALLOC_MALLOC_VARIABLE_SIMPLE, active, disabled + # Implemented by CYGIMP_MEMALLOC_MALLOC_DLMALLOC, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: CYGINT_MEMALLOC_MALLOC_ALLOCATORS == 1 + # CYGINT_MEMALLOC_MALLOC_ALLOCATORS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_MEMALLOC_MALLOC_ALLOCATORS + # Requires: CYGINT_MEMALLOC_MALLOC_ALLOCATORS == 1 +}; + +# malloc() implementation instantiation data +# Memory allocator implementations that are capable of being +# used underneath malloc() must be instantiated. The code +# to do this is set in this option. It is only intended to +# be set by the implementation, not the user. +# +cdl_option CYGBLD_MEMALLOC_MALLOC_IMPLEMENTATION_HEADER { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value <cyg/memalloc/dlmalloc.hxx> + # value_source default + # Default value: <cyg/memalloc/dlmalloc.hxx> + + # The following properties are affected by this value + # option CYGIMP_MEMALLOC_MALLOC_VARIABLE_SIMPLE + # Requires: CYGBLD_MEMALLOC_MALLOC_IMPLEMENTATION_HEADER == "<cyg/memalloc/memvar.hxx>" + # option CYGIMP_MEMALLOC_MALLOC_DLMALLOC + # Requires: CYGBLD_MEMALLOC_MALLOC_IMPLEMENTATION_HEADER == "<cyg/memalloc/dlmalloc.hxx>" +}; + +# Simple variable block implementation +# This causes malloc() to use the simple +# variable block allocator. +# +cdl_option CYGIMP_MEMALLOC_MALLOC_VARIABLE_SIMPLE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGBLD_MEMALLOC_MALLOC_IMPLEMENTATION_HEADER == "<cyg/memalloc/memvar.hxx>" + # CYGBLD_MEMALLOC_MALLOC_IMPLEMENTATION_HEADER == <cyg/memalloc/dlmalloc.hxx> + # --> 0 + # Requires: CYGSEM_MEMALLOC_ALLOCATOR_VARIABLE_COALESCE + # CYGSEM_MEMALLOC_ALLOCATOR_VARIABLE_COALESCE == 1 + # --> 1 +}; + +# Doug Lea's malloc implementation +# This causes malloc() to use a version of Doug Lea's +# malloc (dlmalloc) as the underlying implementation. +# +cdl_option CYGIMP_MEMALLOC_MALLOC_DLMALLOC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGBLD_MEMALLOC_MALLOC_IMPLEMENTATION_HEADER == "<cyg/memalloc/dlmalloc.hxx>" + # CYGBLD_MEMALLOC_MALLOC_IMPLEMENTATION_HEADER == <cyg/memalloc/dlmalloc.hxx> + # --> 1 +}; + +# < +# Size of the fallback dynamic memory pool in bytes +# If *no* heaps are configured in your memory layout, +# dynamic memory allocation by +# malloc() and calloc() must be from a fixed-size, +# contiguous memory pool (note here that it is the +# pool that is of a fixed size, but malloc() is still +# able to allocate variable sized chunks of memory +# from it). This option is the size +# of that pool, in bytes. Note that not all of +# this is available for programs to +# use - some is needed for internal information +# about memory regions, and some may be lost to +# ensure that memory allocation only returns +# memory aligned on word (or double word) +# boundaries - a very common architecture +# constraint. +# +cdl_option CYGNUM_MEMALLOC_FALLBACK_MALLOC_POOL_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16384 + # value_source default + # Default value: 16384 + # Legal values: 32 to 0x7fffffff +}; + +# Common memory allocator package build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_MEMALLOC_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building this package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_MEMALLOC_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building this package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_MEMALLOC_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Tests +# This option specifies the set of tests for this package. +# +cdl_option CYGPKG_MEMALLOC_TESTS { + # Calculated value: "tests/dlmalloc1 tests/dlmalloc2 tests/heaptest tests/kmemfix1 tests/kmemvar1 tests/malloc1 tests/malloc2 tests/malloc3 tests/malloc4 tests/memfix1 tests/memfix2 tests/memvar1 tests/memvar2 tests/realloc tests/sepmeta1 tests/sepmeta2" + # Flavor: data + # Current_value: tests/dlmalloc1 tests/dlmalloc2 tests/heaptest tests/kmemfix1 tests/kmemvar1 tests/malloc1 tests/malloc2 tests/malloc3 tests/malloc4 tests/memfix1 tests/memfix2 tests/memvar1 tests/memvar2 tests/realloc tests/sepmeta1 tests/sepmeta2 +}; + +# < +# < +# ISO C and POSIX infrastructure +# eCos supports implementations of ISO C libraries and POSIX +# implementations. This package provides infrastructure used by +# all such implementations. +# +cdl_package CYGPKG_ISOINFRA { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGPKG_IO_SERIAL_TERMIOS + # Requires: CYGPKG_ISOINFRA + # component CYGPKG_IO_SERIAL_TERMIOS + # DefaultValue: 0 != CYGPKG_ISOINFRA && 0 != CYGPKG_IO_FILEIO && 0 != CYGINT_ISO_ERRNO_CODES && 0 != CYGINT_ISO_ERRNO + # option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_USE_MEMCPY + # Requires: CYGPKG_ISOINFRA + # option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_USE_MEMCPY + # DefaultValue: (0 != CYGPKG_ISOINFRA) && (0 != CYGINT_ISO_STRING_MEMFUNCS) + # component CYGPKG_MEMALLOC_MALLOC_ALLOCATORS + # ActiveIf: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_I18N + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_SETJMP + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_SIGNALS + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STARTUP + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STDIO + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STDLIB + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_STRING + # Requires: CYGPKG_ISOINFRA + # package CYGPKG_LIBC_TIME + # Requires: CYGPKG_ISOINFRA +}; + +# > +# Startup and termination +# +cdl_component CYGPKG_ISO_STARTUP { + # There is no associated value. +}; + +# > +# main() startup implementations +# Implementations of this interface arrange for a user-supplied +# main() to be called in an ISO compatible environment. +# +cdl_interface CYGINT_ISO_MAIN_STARTUP { + # Implemented by CYGPKG_LIBC_STARTUP, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP + # CYGINT_ISO_MAIN_STARTUP == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MAIN_STARTUP + # Requires: 1 >= CYGINT_ISO_MAIN_STARTUP +}; + +# environ implementations +# Implementations of this interface provide the environ +# variable required by POSIX. +# +cdl_interface CYGINT_ISO_ENVIRON { + # Implemented by CYGPKG_LIBC_STARTUP, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_ENVIRON + # CYGINT_ISO_ENVIRON == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ENVIRON + # Requires: 1 >= CYGINT_ISO_ENVIRON +}; + +# < +# ctype.h functions +# +cdl_component CYGPKG_ISO_CTYPE_H { + # There is no associated value. +}; + +# > +# Number of implementations of ctype functions +# +cdl_interface CYGINT_ISO_CTYPE { + # Implemented by CYGPKG_LIBC_I18N, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_CTYPE + # Requires: 1 >= CYGINT_ISO_CTYPE + # package CYGPKG_LIBC_STDLIB + # Requires: CYGINT_ISO_CTYPE + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGINT_ISO_CTYPE +}; + +# Ctype implementation header +# +cdl_option CYGBLD_ISO_CTYPE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/i18n/ctype.inl> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_LIBC_I18N_NEWLIB_CTYPE + # Requires: CYGBLD_ISO_CTYPE_HEADER == "<cyg/libc/i18n/newlibctype.h>" + # option CYGIMP_LIBC_I18N_CTYPE_INLINES + # Requires: CYGBLD_ISO_CTYPE_HEADER == "<cyg/libc/i18n/ctype.inl>" +}; + +# < +# Error handling +# +cdl_component CYGPKG_ISO_ERRNO { + # There is no associated value. +}; + +# > +# Number of implementations of error codes +# +cdl_interface CYGINT_ISO_ERRNO_CODES { + # Implemented by CYGPKG_ERROR, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO_CODES + # Requires: 1 >= CYGINT_ISO_ERRNO_CODES + # component CYGPKG_IO_SERIAL_TERMIOS + # Requires: CYGINT_ISO_ERRNO_CODES + # component CYGPKG_IO_SERIAL_TERMIOS + # DefaultValue: 0 != CYGPKG_ISOINFRA && 0 != CYGPKG_IO_FILEIO && 0 != CYGINT_ISO_ERRNO_CODES && 0 != CYGINT_ISO_ERRNO + # option CYGSEM_LIBC_SIGNALS_RAISE_SETS_ERRNO + # Requires: CYGINT_ISO_ERRNO_CODES + # option CYGSEM_LIBC_SIGNALS_SIGNAL_SETS_ERRNO + # Requires: CYGINT_ISO_ERRNO_CODES + # package CYGPKG_LIBC_STDIO + # Requires: CYGINT_ISO_ERRNO_CODES +}; + +# Error codes implementation header +# +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/error/codes.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_ERROR + # Requires: CYGBLD_ISO_ERRNO_CODES_HEADER == "<cyg/error/codes.h>" +}; + +# Number of implementations of errno variable +# +cdl_interface CYGINT_ISO_ERRNO { + # Implemented by CYGPKG_ERROR_ERRNO, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_ERRNO + # Requires: 1 >= CYGINT_ISO_ERRNO + # component CYGPKG_IO_SERIAL_TERMIOS + # Requires: CYGINT_ISO_ERRNO + # component CYGPKG_IO_SERIAL_TERMIOS + # DefaultValue: 0 != CYGPKG_ISOINFRA && 0 != CYGPKG_IO_FILEIO && 0 != CYGINT_ISO_ERRNO_CODES && 0 != CYGINT_ISO_ERRNO + # option CYGSEM_LIBC_SIGNALS_RAISE_SETS_ERRNO + # Requires: CYGINT_ISO_ERRNO + # option CYGSEM_LIBC_SIGNALS_SIGNAL_SETS_ERRNO + # Requires: CYGINT_ISO_ERRNO + # package CYGPKG_LIBC_STDIO + # Requires: CYGINT_ISO_ERRNO +}; + +# errno variable implementation header +# +cdl_option CYGBLD_ISO_ERRNO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/error/errno.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # component CYGPKG_ERROR_ERRNO + # Requires: CYGBLD_ISO_ERRNO_HEADER == "<cyg/error/errno.h>" +}; + +# < +# Locale-related functions +# +cdl_component CYGPKG_ISO_LOCALE { + # There is no associated value. +}; + +# > +# Number of implementations of locale functions +# +cdl_interface CYGINT_ISO_LOCALE { + # Implemented by CYGPKG_LIBC_I18N, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_LOCALE + # CYGINT_ISO_LOCALE == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_LOCALE + # Requires: 1 >= CYGINT_ISO_LOCALE +}; + +# Locale implementation header +# +cdl_option CYGBLD_ISO_LOCALE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard I/O-related functionality +# +cdl_component CYGPKG_ISO_STDIO { + # There is no associated value. +}; + +# > +# Number of implementations of stdio file types +# +cdl_interface CYGINT_ISO_STDIO_FILETYPES { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES + # CYGINT_ISO_STDIO_FILETYPES == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILETYPES + # Requires: 1 >= CYGINT_ISO_STDIO_FILETYPES +}; + +# Stdio file types implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_FILETYPES_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# Stdio standard streams implementations +# +cdl_interface CYGINT_ISO_STDIO_STREAMS { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS + # CYGINT_ISO_STDIO_STREAMS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_STREAMS + # Requires: 1 >= CYGINT_ISO_STDIO_STREAMS +}; + +# Stdio standard streams implementation header +# This header file must define stdin, stdout +# and stderr. +# +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_STREAMS_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# Number of implementations of stdio file operations +# +cdl_interface CYGINT_ISO_STDIO_FILEOPS { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS + # CYGINT_ISO_STDIO_FILEOPS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEOPS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEOPS +}; + +# Stdio file operations implementation header +# This header controls the file system operations on a file +# such as remove(), rename(), tmpfile(), tmpnam() and associated +# constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_FILEOPS_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# Number of implementations of stdio file access functionals +# +cdl_interface CYGINT_ISO_STDIO_FILEACCESS { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEACCESS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEACCESS + # option CYGSEM_LIBC_EXIT_CALLS_FFLUSH + # Requires: CYGINT_ISO_STDIO_FILEACCESS + # option CYGSEM_LIBC_EXIT_CALLS_FFLUSH + # DefaultValue: 0 != CYGINT_ISO_STDIO_FILEACCESS +}; + +# Stdio file access implementation header +# This header controls the file access operations +# such as fclose(), fflush(), fopen(), freopen(), setbuf(), +# setvbuf(), and associated constants. +# +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_FILEACCESS_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# Number of implementations of stdio formatted I/O +# +cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO + # CYGINT_ISO_STDIO_FORMATTED_IO == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FORMATTED_IO + # Requires: 1 >= CYGINT_ISO_STDIO_FORMATTED_IO +}; + +# Stdio formatted I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# Number of implementations of stdio character I/O +# +cdl_interface CYGINT_ISO_STDIO_CHAR_IO { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO + # CYGINT_ISO_STDIO_CHAR_IO == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_CHAR_IO + # Requires: 1 >= CYGINT_ISO_STDIO_CHAR_IO +}; + +# Stdio character I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_CHAR_IO_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# Number of implementations of stdio direct I/O +# +cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO + # CYGINT_ISO_STDIO_DIRECT_IO == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_DIRECT_IO + # Requires: 1 >= CYGINT_ISO_STDIO_DIRECT_IO +}; + +# Stdio direct I/O implementation header +# +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_DIRECT_IO_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# Number of implementations of stdio file positioning +# +cdl_interface CYGINT_ISO_STDIO_FILEPOS { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS + # CYGINT_ISO_STDIO_FILEPOS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_FILEPOS + # Requires: 1 >= CYGINT_ISO_STDIO_FILEPOS +}; + +# Stdio file positioning implementation header +# +cdl_option CYGBLD_ISO_STDIO_FILEPOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_FILEPOS_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# Number of implementations of stdio error handling +# +cdl_interface CYGINT_ISO_STDIO_ERROR { + # Implemented by CYGPKG_LIBC_STDIO, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR + # CYGINT_ISO_STDIO_ERROR == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_ERROR + # Requires: 1 >= CYGINT_ISO_STDIO_ERROR +}; + +# Stdio error handling implementation header +# +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdio/stdio.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGBLD_ISO_STDIO_ERROR_HEADER == "<cyg/libc/stdio/stdio.h>" +}; + +# POSIX fd-related function implementations +# +cdl_interface CYGINT_ISO_STDIO_POSIX_FDFUNCS { + # Implemented by CYGFUN_LIBC_STDIO_OPEN_POSIX_FDFUNCS, inactive, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS + # CYGINT_ISO_STDIO_POSIX_FDFUNCS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDIO_POSIX_FDFUNCS + # Requires: 1 >= CYGINT_ISO_STDIO_POSIX_FDFUNCS +}; + +# POSIX fd-related function implementation header +# +cdl_option CYGBLD_ISO_STDIO_POSIX_FDFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Standard general utility functions +# +cdl_component CYGPKG_ISO_STDLIB { + # There is no associated value. +}; + +# > +# String conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV { + # Implemented by CYGPKG_LIBC_STDLIB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV + # package CYGPKG_LIBC_STDIO + # Requires: CYGINT_ISO_STDLIB_STRCONV +}; + +# String conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdlib/atox.inl> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGIMP_LIBC_STDLIB_INLINE_ATOX + # Requires: CYGBLD_ISO_STDLIB_STRCONV_HEADER == "<cyg/libc/stdlib/atox.inl>" +}; + +# String to FP conversion function implementations +# +cdl_interface CYGINT_ISO_STDLIB_STRCONV_FLOAT { + # Implemented by CYGFUN_LIBC_strtod, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_STRCONV_FLOAT + # Requires: 1 >= CYGINT_ISO_STDLIB_STRCONV_FLOAT + # option CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT + # Requires: CYGINT_ISO_STDLIB_STRCONV_FLOAT + # option CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT + # DefaultValue: 0 != CYGPKG_LIBM && + # 0 != CYGINT_ISO_STDLIB_STRCONV_FLOAT +}; + +# String to FP conversion function implementation header +# +cdl_option CYGBLD_ISO_STDLIB_STRCONV_FLOAT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Random number generator implementations +# +cdl_interface CYGINT_ISO_RAND { + # Implemented by CYGIMP_LIBC_RAND_SIMPLEST, active, disabled + # Implemented by CYGIMP_LIBC_RAND_SIMPLE1, active, enabled + # Implemented by CYGIMP_LIBC_RAND_KNUTH1, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_RAND + # CYGINT_ISO_RAND == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_RAND + # Requires: 1 >= CYGINT_ISO_RAND +}; + +# Random number generator implementation header +# +cdl_option CYGBLD_ISO_RAND_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Malloc implementations +# +cdl_interface CYGINT_ISO_MALLOC { + # Implemented by CYGPKG_MEMALLOC_MALLOC_ALLOCATORS, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLOC + # Requires: 1 >= CYGINT_ISO_MALLOC + # component CYGPKG_IO_SERIAL_TERMIOS + # Requires: CYGINT_ISO_MALLOC + # option CYGSEM_LIBC_STDIO_SETVBUF_MALLOC + # Requires: CYGINT_ISO_MALLOC + # option CYGSEM_LIBC_STDIO_SETVBUF_MALLOC + # DefaultValue: 0 != CYGINT_ISO_MALLOC + # component CYGPKG_LIBC_STDIO_OPEN + # Requires: CYGINT_ISO_MALLOC + # component CYGPKG_LIBC_STDIO_OPEN + # DefaultValue: 0 != CYGINT_ISO_MALLOC + # option CYGFUN_LIBC_STRING_STRDUP + # ActiveIf: CYGINT_ISO_MALLOC +}; + +# Malloc implementation header +# +cdl_option CYGBLD_ISO_MALLOC_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Mallinfo() implementations +# +cdl_interface CYGINT_ISO_MALLINFO { + # Implemented by CYGPKG_MEMALLOC_MALLOC_ALLOCATORS, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_MALLINFO + # CYGINT_ISO_MALLINFO == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MALLINFO + # Requires: 1 >= CYGINT_ISO_MALLINFO +}; + +# Mallinfo() implementation header +# +cdl_option CYGBLD_ISO_MALLINFO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program exit functionality implementations +# +cdl_interface CYGINT_ISO_EXIT { + # Implemented by CYGPKG_LIBC_STARTUP, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_EXIT + # CYGINT_ISO_EXIT == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_EXIT + # Requires: 1 >= CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # Requires: !CYGINT_ISO_EXIT + # option CYGFUN_INFRA_DUMMY_ABORT + # DefaultValue: CYGINT_ISO_EXIT == 0 +}; + +# Program exit functionality implementation header +# +cdl_option CYGBLD_ISO_EXIT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Program environment implementations +# +cdl_interface CYGINT_ISO_STDLIB_ENVIRON { + # Implemented by CYGPKG_LIBC_STDLIB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON + # CYGINT_ISO_STDLIB_ENVIRON == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_ENVIRON + # Requires: 1 >= CYGINT_ISO_STDLIB_ENVIRON +}; + +# Program environment implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ENVIRON_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# system() implementations +# +cdl_interface CYGINT_ISO_STDLIB_SYSTEM { + # Implemented by CYGPKG_LIBC_STDLIB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM + # CYGINT_ISO_STDLIB_SYSTEM == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_SYSTEM + # Requires: 1 >= CYGINT_ISO_STDLIB_SYSTEM +}; + +# system() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_SYSTEM_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# bsearch() implementations +# +cdl_interface CYGINT_ISO_BSEARCH { + # Implemented by CYGPKG_LIBC_STDLIB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_BSEARCH + # CYGINT_ISO_BSEARCH == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSEARCH + # Requires: 1 >= CYGINT_ISO_BSEARCH +}; + +# bsearch() implementation header +# +cdl_option CYGBLD_ISO_BSEARCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# qsort() implementations +# +cdl_interface CYGINT_ISO_QSORT { + # Implemented by CYGPKG_LIBC_STDLIB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_STDLIB_QSORT + # CYGINT_ISO_STDLIB_QSORT (unknown) == 0 + # --> 1 + + # The following properties are affected by this value +}; + +# qsort() implementation header +# +cdl_option CYGBLD_ISO_QSORT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# abs()/labs() implementations +# +cdl_interface CYGINT_ISO_ABS { + # Implemented by CYGPKG_LIBC_STDLIB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_STDLIB_ABS + # CYGINT_ISO_STDLIB_ABS (unknown) == 0 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_LIBC_TIME + # Requires: CYGINT_ISO_ABS +}; + +# abs()/labs() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdlib/abs.inl> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGIMP_LIBC_STDLIB_INLINE_ABS + # Requires: CYGBLD_ISO_STDLIB_ABS_HEADER == "<cyg/libc/stdlib/abs.inl>" +}; + +# div()/ldiv() implementations +# +cdl_interface CYGINT_ISO_DIV { + # Implemented by CYGPKG_LIBC_STDLIB, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_STDLIB_DIV + # CYGINT_ISO_STDLIB_DIV (unknown) == 0 + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_LIBC_TIME + # Requires: CYGINT_ISO_DIV +}; + +# div()/ldiv() implementation header +# +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/stdlib/div.inl> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGIMP_LIBC_STDLIB_INLINE_DIV + # Requires: CYGBLD_ISO_STDLIB_DIV_HEADER == "<cyg/libc/stdlib/div.inl>" +}; + +# Header defining the implementation's MB_CUR_MAX +# +cdl_option CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 + + # The following properties are affected by this value + # interface CYGINT_LIBC_I18N_MB_REQUIRED + # Requires: CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER == "<cyg/libc/i18n/mb.h>" +}; + +# Multibyte character implementations +# +cdl_interface CYGINT_ISO_STDLIB_MULTIBYTE { + # Implemented by CYGPKG_LIBC_I18N, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE + # CYGINT_ISO_STDLIB_MULTIBYTE == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STDLIB_MULTIBYTE + # Requires: 1 >= CYGINT_ISO_STDLIB_MULTIBYTE +}; + +# Multibyte character implementation header +# +cdl_option CYGBLD_ISO_STDLIB_MULTIBYTE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# String functions +# +cdl_component CYGPKG_ISO_STRING { + # There is no associated value. +}; + +# > +# Number of implementations of strerror() function +# +cdl_interface CYGINT_ISO_STRERROR { + # Implemented by CYGPKG_ERROR_STRERROR, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRERROR + # Requires: 1 >= CYGINT_ISO_STRERROR + # package CYGPKG_LIBC_STDIO + # Requires: CYGINT_ISO_STRERROR +}; + +# strerror() implementation header +# +cdl_option CYGBLD_ISO_STRERROR_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/error/strerror.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGPKG_ERROR_STRERROR + # Requires: CYGBLD_ISO_STRERROR_HEADER == "<cyg/error/strerror.h>" +}; + +# memcpy() implementation header +# +cdl_option CYGBLD_ISO_MEMCPY_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# memset() implementation header +# +cdl_option CYGBLD_ISO_MEMSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of strtok_r() function +# +cdl_interface CYGINT_ISO_STRTOK_R { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRTOK_R + # CYGINT_ISO_STRTOK_R == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRTOK_R + # Requires: 1 >= CYGINT_ISO_STRTOK_R +}; + +# strtok_r() implementation header +# +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/string/string.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "<cyg/libc/string/string.h>" +}; + +# Number of implementations of locale-specific string functions +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_interface CYGINT_ISO_STRING_LOCALE_FUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS + # CYGINT_ISO_STRING_LOCALE_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_LOCALE_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_LOCALE_FUNCS +}; + +# Locale-specific string functions' implementation header +# This covers locale-dependent string functions such as strcoll() +# and strxfrm(). +# +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/string/string.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "<cyg/libc/string/string.h>" +}; + +# Number of implementations of BSD string functions +# +cdl_interface CYGINT_ISO_STRING_BSD_FUNCS { + # Implemented by CYGFUN_LIBC_STRING_BSD_FUNCS, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_BSD_FUNCS + # Requires: 1 >= CYGINT_ISO_STRING_BSD_FUNCS + # option CYGFUN_LIBC_TIME_POSIX + # Requires: CYGINT_ISO_STRING_BSD_FUNCS +}; + +# BSD string functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/string/bsdstring.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STRING_BSD_FUNCS + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "<cyg/libc/string/bsdstring.h>" +}; + +# Number of implementations of other mem*() functions +# +cdl_interface CYGINT_ISO_STRING_MEMFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_MEMFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_MEMFUNCS + # option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_USE_MEMCPY + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # option CYGIMP_MEMALLOC_ALLOCATOR_DLMALLOC_USE_MEMCPY + # DefaultValue: (0 != CYGPKG_ISOINFRA) && (0 != CYGINT_ISO_STRING_MEMFUNCS) + # package CYGPKG_LIBC_STDIO + # Requires: CYGINT_ISO_STRING_MEMFUNCS +}; + +# Other mem*() functions' implementation header +# +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/string/string.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "<cyg/libc/string/string.h>" +}; + +# Number of implementations of other ISO C str*() functions +# This covers the other str*() functions defined by ISO C. +# +cdl_interface CYGINT_ISO_STRING_STRFUNCS { + # Implemented by CYGPKG_LIBC_STRING, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_STRING_STRFUNCS + # Requires: 1 >= CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # Requires: !CYGINT_ISO_STRING_STRFUNCS + # option CYGFUN_INFRA_DUMMY_STRLEN + # DefaultValue: CYGINT_ISO_STRING_STRFUNCS == 0 + # package CYGPKG_LIBC_STDIO + # Requires: CYGINT_ISO_STRING_STRFUNCS + # package CYGPKG_LIBC_STDLIB + # Requires: CYGINT_ISO_STRING_STRFUNCS +}; + +# Other ISO C str*() functions' implementation header +# This covers the other str*() functions defined by ISO C. +# +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/string/string.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STRING + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "<cyg/libc/string/string.h>" +}; + +# < +# Clock and time functionality +# +cdl_component CYGPKG_ISO_TIME { + # There is no associated value. +}; + +# > +# time_t implementation header +# +cdl_option CYGBLD_ISO_TIME_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# clock_t implementation header +# +cdl_option CYGBLD_ISO_CLOCK_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# struct timeval implementation header +# +cdl_option CYGBLD_ISO_STRUCTTIMEVAL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# fnmatch implementation header +# +cdl_option CYGBLD_ISO_FNMATCH_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX timer types +# +cdl_interface CYGINT_ISO_POSIX_TIMER_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES + # CYGINT_ISO_POSIX_TIMER_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_TYPES +}; + +# POSIX timer types implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clock types +# +cdl_interface CYGINT_ISO_POSIX_CLOCK_TYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES + # CYGINT_ISO_POSIX_CLOCK_TYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCK_TYPES + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCK_TYPES +}; + +# POSIX clock types implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCK_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C types +# +cdl_interface CYGINT_ISO_C_TIME_TYPES { + # Implemented by CYGPKG_LIBC_TIME, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES + # CYGINT_ISO_C_TIME_TYPES == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_TIME_TYPES + # Requires: 1 >= CYGINT_ISO_C_TIME_TYPES +}; + +# ISO C time types implementation header +# +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/time/time.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_TIME + # Requires: CYGBLD_ISO_C_TIME_TYPES_HEADER == "<cyg/libc/time/time.h>" +}; + +# Number of implementations of POSIX timers +# +cdl_interface CYGINT_ISO_POSIX_TIMERS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS + # CYGINT_ISO_POSIX_TIMERS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMERS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMERS +}; + +# POSIX timer implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of POSIX clocks +# +cdl_interface CYGINT_ISO_POSIX_CLOCKS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS + # CYGINT_ISO_POSIX_CLOCKS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_CLOCKS + # Requires: 1 >= CYGINT_ISO_POSIX_CLOCKS +}; + +# POSIX clocks implementation header +# +cdl_option CYGBLD_ISO_POSIX_CLOCKS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Number of implementations of ISO C clock functions +# +cdl_interface CYGINT_ISO_C_CLOCK_FUNCS { + # Implemented by CYGPKG_LIBC_TIME, active, enabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 1 + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS + # CYGINT_ISO_C_CLOCK_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_C_CLOCK_FUNCS + # Requires: 1 >= CYGINT_ISO_C_CLOCK_FUNCS +}; + +# ISO C clock functions' implementation header +# +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/time/time.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_TIME + # Requires: CYGBLD_ISO_C_CLOCK_FUNCS_HEADER == "<cyg/libc/time/time.h>" +}; + +# Number of implementations of tzset() function +# +cdl_interface CYGINT_ISO_TZSET { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_TZSET + # CYGINT_ISO_TZSET == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TZSET + # Requires: 1 >= CYGINT_ISO_TZSET +}; + +# tzset() implementation header +# +cdl_option CYGBLD_ISO_TZSET_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Signal functionality +# +cdl_component CYGPKG_ISO_SIGNAL { + # There is no associated value. +}; + +# > +# Number of implementations of signal numbers +# +cdl_interface CYGINT_ISO_SIGNAL_NUMBERS { + # Implemented by CYGPKG_LIBC_SIGNALS, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # CYGINT_ISO_SIGNAL_NUMBERS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_NUMBERS + # Requires: 1 >= CYGINT_ISO_SIGNAL_NUMBERS + # option CYGSEM_IO_SERIAL_TERMIOS_USE_SIGNALS + # Requires: CYGINT_ISO_SIGNAL_NUMBERS + # option CYGSEM_IO_SERIAL_TERMIOS_USE_SIGNALS + # DefaultValue: CYGINT_ISO_SIGNAL_NUMBERS != 0 && CYGINT_ISO_SIGNAL_IMPL != 0 +}; + +# Signal numbering implementation header +# This header provides the mapping of signal +# names (e.g. SIGBUS) to numbers. +# +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/signals/signal.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_SIGNALS + # Requires: CYGBLD_ISO_SIGNAL_NUMBERS_HEADER == "<cyg/libc/signals/signal.h>" +}; + +# Number of signal implementations +# +cdl_interface CYGINT_ISO_SIGNAL_IMPL { + # Implemented by CYGPKG_LIBC_SIGNALS, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # CYGINT_ISO_SIGNAL_IMPL == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGNAL_IMPL + # Requires: 1 >= CYGINT_ISO_SIGNAL_IMPL + # option CYGSEM_IO_SERIAL_TERMIOS_USE_SIGNALS + # Requires: CYGINT_ISO_SIGNAL_IMPL + # option CYGSEM_IO_SERIAL_TERMIOS_USE_SIGNALS + # DefaultValue: CYGINT_ISO_SIGNAL_NUMBERS != 0 && CYGINT_ISO_SIGNAL_IMPL != 0 +}; + +# Signals implementation header +# +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/signals/signal.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_SIGNALS + # Requires: CYGBLD_ISO_SIGNAL_IMPL_HEADER == "<cyg/libc/signals/signal.h>" +}; + +# POSIX real time signals feature test macro +# This defines the POSIX feature test macro +# that indicates that the POSIX real time signals +# are present. +# +cdl_interface CYGINT_POSIX_REALTIME_SIGNALS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS + # CYGINT_POSIX_REALTIME_SIGNALS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_POSIX_REALTIME_SIGNALS + # Requires: 1 >= CYGINT_POSIX_REALTIME_SIGNALS +}; + +# < +# Non-local jumps functionality +# +cdl_component CYGPKG_ISO_SETJMP { + # There is no associated value. +}; + +# > +# setjmp() / longjmp() implementations +# +cdl_interface CYGINT_ISO_SETJMP { + # Implemented by CYGPKG_LIBC_SETJMP, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 >= CYGINT_ISO_SETJMP + # CYGINT_ISO_SETJMP == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SETJMP + # Requires: 1 >= CYGINT_ISO_SETJMP +}; + +# setjmp() / longjmp() implementation header +# +cdl_option CYGBLD_ISO_SETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # The inferred value should not be edited directly. + inferred_value 1 <cyg/libc/setjmp/setjmp.h> + # value_source inferred + # Default value: 0 0 + + # The following properties are affected by this value + # package CYGPKG_LIBC_SETJMP + # Requires: CYGBLD_ISO_SETJMP_HEADER == "<cyg/libc/setjmp/setjmp.h>" +}; + +# sigsetjmp() / siglongjmp() implementations +# +cdl_interface CYGINT_ISO_SIGSETJMP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SIGSETJMP + # CYGINT_ISO_SIGSETJMP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SIGSETJMP + # Requires: 1 >= CYGINT_ISO_SIGSETJMP +}; + +# sigsetjmp() / siglongjmp() implementation header +# +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Assertions implementation header +# +cdl_option CYGBLD_ISO_ASSERT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file control +# This covers the POSIX file control definitions, +# normally found in <fcntl.h> +# +cdl_component CYGPKG_ISO_POSIX_FCNTL { + # There is no associated value. +}; + +# > +# POSIX open flags implementation header +# +cdl_option CYGBLD_ISO_OFLAG_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX fcntl() implementations +# +cdl_interface CYGINT_ISO_FCNTL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_FCNTL + # CYGINT_ISO_FCNTL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_FCNTL + # Requires: 1 >= CYGINT_ISO_FCNTL +}; + +# POSIX fcntl() implementation header +# +cdl_option CYGBLD_ISO_FCNTL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX file open implementations +# +cdl_interface CYGINT_ISO_OPEN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_OPEN + # CYGINT_ISO_OPEN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_OPEN + # Requires: 1 >= CYGINT_ISO_OPEN +}; + +# POSIX file open implementation header +# +cdl_option CYGBLD_ISO_OPEN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# <sys/stat.h> definitions implementation header +# +cdl_option CYGBLD_ISO_STAT_DEFS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX directory reading implementation +# +cdl_interface CYGINT_ISO_DIRENT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DIRENT + # CYGINT_ISO_DIRENT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DIRENT + # Requires: 1 >= CYGINT_ISO_DIRENT +}; + +# <dirent.h> definitions implementation header +# +cdl_option CYGBLD_ISO_DIRENT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX <sys/types.h> contents +# This covers the types required by POSIX to be in +# <sys/types.h> +# +cdl_component CYGPKG_ISO_POSIX_TYPES { + # There is no associated value. +}; + +# > +# POSIX thread types implementations +# +cdl_interface CYGINT_ISO_PTHREADTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREADTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # interface CYGINT_ISO_PMUTEXTYPES + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES +}; + +# POSIX thread types implementation header +# +cdl_option CYGBLD_ISO_PTHREADTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex types implementations +# +cdl_interface CYGINT_ISO_PMUTEXTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_PTHREADTYPES + # CYGINT_ISO_PTHREADTYPES == 0 + # --> 1 +}; + +# POSIX mutex types implementation header +# +cdl_option CYGBLD_ISO_PMUTEXTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# ssize_t implementation header +# +cdl_option CYGBLD_ISO_SSIZE_T_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Filesystem types implementation header +# +cdl_option CYGBLD_ISO_FSTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# gid_t, pid_t, uid_t implementation header +# +cdl_option CYGBLD_ISO_SCHEDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Non-POSIX <sys/types.h> contents +# This covers the extra types required by non-POSIX +# packages to be in <sys/types.h>. These would normally +# only be visible if _POSIX_SOURCE is not defined. +# +cdl_component CYGPKG_ISO_EXTRA_TYPES { + # There is no associated value. +}; + +# > +# BSD compatible types +# +cdl_interface CYGINT_ISO_BSDTYPES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_BSDTYPES + # CYGINT_ISO_BSDTYPES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_BSDTYPES + # Requires: 1 >= CYGINT_ISO_BSDTYPES +}; + +# BSD types header +# +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Utsname structure +# +cdl_component CYGPKG_ISO_UTSNAME { + # There is no associated value. +}; + +# > +# Utsname header +# +cdl_option CYGBLD_ISO_UTSNAME_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX scheduler +# +cdl_component CYGPKG_ISO_SCHED { + # There is no associated value. +}; + +# > +# POSIX scheduler implementations +# +cdl_interface CYGINT_ISO_SCHED_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL + # CYGINT_ISO_SCHED_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SCHED_IMPL + # Requires: 1 >= CYGINT_ISO_SCHED_IMPL +}; + +# POSIX scheduler implementation header +# +cdl_option CYGBLD_ISO_SCHED_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX semaphores +# +cdl_component CYGPKG_ISO_SEMAPHORES { + # There is no associated value. +}; + +# > +# POSIX semaphore implementations +# +cdl_interface CYGINT_ISO_SEMAPHORES { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_SEMAPHORES + # CYGINT_ISO_SEMAPHORES == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SEMAPHORES + # Requires: 1 >= CYGINT_ISO_SEMAPHORES +}; + +# POSIX semaphore implementation header +# +cdl_option CYGBLD_ISO_SEMAPHORES_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX message queues +# +cdl_component CYGPKG_ISO_MQUEUE { + # There is no associated value. +}; + +# > +# Implementations +# +cdl_interface CYGINT_ISO_MQUEUE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_MQUEUE + # Requires: 1 >= CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_OPEN_MAX + # ActiveIf: CYGINT_ISO_MQUEUE + # option CYGNUM_ISO_MQUEUE_PRIO_MAX + # ActiveIf: CYGINT_ISO_MQUEUE +}; + +# Implementation header +# +cdl_option CYGBLD_ISO_MQUEUE_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Maximum number of open message queues +# +cdl_option CYGNUM_ISO_MQUEUE_OPEN_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: CYGNUM_POSIX_MQUEUE_OPEN_MAX > 0 ? CYGNUM_POSIX_MQUEUE_OPEN_MAX : 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # CYGNUM_POSIX_MQUEUE_OPEN_MAX (unknown) == 0 + # --> 0 0 +}; + +# Maximum number of message priorities +# +cdl_option CYGNUM_ISO_MQUEUE_PRIO_MAX { + # This option is not active + # ActiveIf constraint: CYGINT_ISO_MQUEUE + # CYGINT_ISO_MQUEUE == 0 + # --> 0 + + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 65535 + # value_source default + # Default value: 1 65535 +}; + +# < +# POSIX threads +# +cdl_component CYGPKG_ISO_PTHREAD { + # There is no associated value. +}; + +# > +# POSIX pthread implementations +# +cdl_interface CYGINT_ISO_PTHREAD_IMPL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL + # CYGINT_ISO_PTHREAD_IMPL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_IMPL + # Requires: 1 >= CYGINT_ISO_PTHREAD_IMPL +}; + +# POSIX pthread implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX mutex/cond var implementations +# +cdl_interface CYGINT_ISO_PTHREAD_MUTEX { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX + # CYGINT_ISO_PTHREAD_MUTEX == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_PTHREAD_MUTEX + # Requires: 1 >= CYGINT_ISO_PTHREAD_MUTEX +}; + +# POSIX mutex/cond var implementation header +# +cdl_option CYGBLD_ISO_PTHREAD_MUTEX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Limits +# +cdl_component CYGPKG_ISO_LIMITS { + # There is no associated value. +}; + +# > +# POSIX pthread limits implementations +# +cdl_interface CYGINT_ISO_POSIX_LIMITS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS + # CYGINT_ISO_POSIX_LIMITS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_LIMITS + # Requires: 1 >= CYGINT_ISO_POSIX_LIMITS +}; + +# POSIX pthread limits implementation header +# +cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# OPEN_MAX implementation header +# +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# LINK_MAX implementation header +# +cdl_option CYGBLD_ISO_LINK_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# NAME_MAX implementation header +# +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# PATH_MAX implementation header +# +cdl_option CYGBLD_ISO_PATH_MAX_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# POSIX termios +# +cdl_component CYGPKG_ISO_TERMIOS { + # There is no associated value. +}; + +# > +# POSIX termios implementations +# +cdl_interface CYGINT_ISO_TERMIOS { + # Implemented by CYGPKG_IO_SERIAL_TERMIOS, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_TERMIOS + # CYGINT_ISO_TERMIOS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_TERMIOS + # Requires: 1 >= CYGINT_ISO_TERMIOS +}; + +# POSIX termios implementation header +# +cdl_option CYGBLD_ISO_TERMIOS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Dynamic load API +# +cdl_component CYGPKG_ISO_DLFCN { + # There is no associated value. +}; + +# > +# Dynamic load implementations +# +cdl_interface CYGINT_ISO_DLFCN { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + # Requires: 1 >= CYGINT_ISO_DLFCN + # CYGINT_ISO_DLFCN == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DLFCN + # Requires: 1 >= CYGINT_ISO_DLFCN +}; + +# Dynamic load implementation header +# +cdl_option CYGBLD_ISO_DLFCN_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# UNIX standard functions +# +cdl_component CYGPKG_ISO_UNISTD { + # There is no associated value. +}; + +# > +# POSIX timer operations implementations +# +cdl_interface CYGINT_ISO_POSIX_TIMER_OPS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS + # CYGINT_ISO_POSIX_TIMER_OPS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_TIMER_OPS + # Requires: 1 >= CYGINT_ISO_POSIX_TIMER_OPS +}; + +# POSIX timer operations implementation header +# +cdl_option CYGBLD_ISO_POSIX_TIMER_OPS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# POSIX sleep() implementations +# +cdl_interface CYGINT_ISO_POSIX_SLEEP { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP + # CYGINT_ISO_POSIX_SLEEP == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POSIX_SLEEP + # Requires: 1 >= CYGINT_ISO_POSIX_SLEEP +}; + +# POSIX sleep() implementation header +# +cdl_option CYGBLD_ISO_POSIX_SLEEP_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# select()/poll() functions +# +cdl_component CYGPKG_ISO_SELECT { + # There is no associated value. +}; + +# > +# select() implementations +# +cdl_interface CYGINT_ISO_SELECT { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_SELECT + # CYGINT_ISO_SELECT == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_SELECT + # Requires: 1 >= CYGINT_ISO_SELECT +}; + +# select() implementation header +# +cdl_option CYGBLD_ISO_SELECT_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# poll() implementations +# +cdl_interface CYGINT_ISO_POLL { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: 1 >= CYGINT_ISO_POLL + # CYGINT_ISO_POLL == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_POLL + # Requires: 1 >= CYGINT_ISO_POLL +}; + +# poll() implementation header +# +cdl_option CYGBLD_ISO_POLL_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# NetDB utility functions +# +cdl_component CYGPKG_ISO_NETDB { + # There is no associated value. +}; + +# > +# DNS implementations +# +cdl_interface CYGINT_ISO_DNS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_DNS + # CYGINT_ISO_DNS == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_DNS + # Requires: 1 >= CYGINT_ISO_DNS +}; + +# DNS implementation header +# +cdl_option CYGBLD_ISO_DNS_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Protocol network database implementations +# +cdl_interface CYGINT_ISO_NETDB_PROTO { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO + # CYGINT_ISO_NETDB_PROTO == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_PROTO + # Requires: 1 >= CYGINT_ISO_NETDB_PROTO +}; + +# Protocol network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# Services network database implementations +# +cdl_interface CYGINT_ISO_NETDB_SERV { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + # Requires: 1 >= CYGINT_ISO_NETDB_SERV + # CYGINT_ISO_NETDB_SERV == 0 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_ISO_NETDB_SERV + # Requires: 1 >= CYGINT_ISO_NETDB_SERV +}; + +# Services network database implementation header +# +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 0 0 + # value_source default + # Default value: 0 0 +}; + +# < +# Build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ISOINFRA_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are used in addition to the set of global flags. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the ISO C and POSIX infrastructure package. +# These flags are removed from the set of global flags +# if present. +# +cdl_option CYGPKG_ISOINFRA_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# ISO C library +# doc: ref/libc.html +# The packages under this package enable compatibility with the ISO C +# standard - ISO/IEC 9899:1990. This allows the user application to use +# well known standard C library functions, and in eCos starts a thread +# to invoke the user function main(). This package is a top-level placeholder +# to contain the implementations. +# +cdl_package CYGPKG_LIBC { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # component CYGNUM_LIBM_COMPATIBILITY + # Requires: CYGPKG_LIBC +}; + +# > +# ISO C library internationalization functions +# doc: ref/libc.html +# This package provides internationalization functions specified by the +# ISO C standard - ISO/IEC 9899:1990. These include locale-related +# functionality and <ctype.h> functionality. +# +cdl_package CYGPKG_LIBC_I18N { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: CYGPKG_LIBC_I18N +}; + +# > +# Supported locales +# These options determine which locales other than the "C" locale +# are supported and hence contribute to the size of the executable. +# +cdl_component CYGPKG_LIBC_I18N_LOCALES { + # There is no associated value. +}; + +# > +# Support for multiple locales required +# +cdl_interface CYGINT_LIBC_I18N_MB_REQUIRED { + # Implemented by CYGFUN_LIBC_I18N_LOCALE_C_SJIS, active, disabled + # Implemented by CYGFUN_LIBC_I18N_LOCALE_C_JIS, active, disabled + # Implemented by CYGFUN_LIBC_I18N_LOCALE_C_EUCJP, active, disabled + # This value cannot be modified here. + # Flavor: booldata + # Current value: 0 0 + # Requires: CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER == "<cyg/libc/i18n/mb.h>" + # CYGBLD_ISO_STDLIB_MB_CUR_MAX_HEADER == 0 + # --> 0 + + # The following properties are affected by this value +}; + +# C-SJIS locale support +# This option controls if the "C-SJIS" locale will be +# supported by setlocale(). The locale is a hybrid locale +# that is mostly the "C" locale with Japanese SJIS multibyte +# support added. +# +cdl_option CYGFUN_LIBC_I18N_LOCALE_C_SJIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGNUM_LIBC_I18N_MAX_LOCALE_NAME_SIZE + # LegalValues: (CYGFUN_LIBC_I18N_LOCALE_C_EUCJP ? 8 : (CYGFUN_LIBC_I18N_LOCALE_C_SJIS ? 7 : (CYGFUN_LIBC_I18N_LOCALE_C_JIS ? 6 : 2))) to 0x7fffffff + # option CYGNUM_LIBC_I18N_MAX_LOCALE_NAME_SIZE + # DefaultValue: (CYGFUN_LIBC_I18N_LOCALE_C_EUCJP ? 8 : (CYGFUN_LIBC_I18N_LOCALE_C_SJIS ? 7 : (CYGFUN_LIBC_I18N_LOCALE_C_JIS ? 6 : 2))) +}; + +# C-JIS locale support +# This option controls if the "C-JIS" locale will be +# supported by setlocale(). The locale is a hybrid locale +# that is mostly the "C" locale with Japanese JIS multibyte +# support added. +# +cdl_option CYGFUN_LIBC_I18N_LOCALE_C_JIS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGNUM_LIBC_I18N_MAX_LOCALE_NAME_SIZE + # LegalValues: (CYGFUN_LIBC_I18N_LOCALE_C_EUCJP ? 8 : (CYGFUN_LIBC_I18N_LOCALE_C_SJIS ? 7 : (CYGFUN_LIBC_I18N_LOCALE_C_JIS ? 6 : 2))) to 0x7fffffff + # option CYGNUM_LIBC_I18N_MAX_LOCALE_NAME_SIZE + # DefaultValue: (CYGFUN_LIBC_I18N_LOCALE_C_EUCJP ? 8 : (CYGFUN_LIBC_I18N_LOCALE_C_SJIS ? 7 : (CYGFUN_LIBC_I18N_LOCALE_C_JIS ? 6 : 2))) +}; + +# C-EUCJP locale support +# This option controls if the "C-EUCJP" locale will be +# supported by setlocale(). The locale is a hybrid locale +# that is mostly the "C" locale with Japanese EUCJP multibyte +# support added. +# +cdl_option CYGFUN_LIBC_I18N_LOCALE_C_EUCJP { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGNUM_LIBC_I18N_MAX_LOCALE_NAME_SIZE + # LegalValues: (CYGFUN_LIBC_I18N_LOCALE_C_EUCJP ? 8 : (CYGFUN_LIBC_I18N_LOCALE_C_SJIS ? 7 : (CYGFUN_LIBC_I18N_LOCALE_C_JIS ? 6 : 2))) to 0x7fffffff + # option CYGNUM_LIBC_I18N_MAX_LOCALE_NAME_SIZE + # DefaultValue: (CYGFUN_LIBC_I18N_LOCALE_C_EUCJP ? 8 : (CYGFUN_LIBC_I18N_LOCALE_C_SJIS ? 7 : (CYGFUN_LIBC_I18N_LOCALE_C_JIS ? 6 : 2))) +}; + +# < +# Newlib's ctype implementation +# This option enables the implementation of the ctype functions +# that comes with newlib. It is table driven and therefore +# exhibits different performance characteristics. It also offers +# a limited amount of binary compatibility +# with newlib so that programs linked against newlib ctype/locale +# do not need to be recompiled when linked with eCos. +# +cdl_option CYGPKG_LIBC_I18N_NEWLIB_CTYPE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGBLD_ISO_CTYPE_HEADER == "<cyg/libc/i18n/newlibctype.h>" + # CYGBLD_ISO_CTYPE_HEADER == <cyg/libc/i18n/ctype.inl> + # --> 0 +}; + +# Per-thread multibyte state +# This option controls whether the multibyte character +# handling functions mblen(), mbtowc(), and wctomb(), +# have their state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Enabling this option will use three slots +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_I18N_PER_THREAD_MB { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA != 0 + # CYGVAR_KERNEL_THREADS_DATA == 1 + # --> 1 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA == 1 + # --> 1 +}; + +# Size of locale name strings +# This option controls the maximum size of +# locale names and is used, among other things +# to instantiate a static string used +# as a return value from the +# setlocale() function. When requesting the +# current locale settings with LC_ALL, a string +# must be constructed to contain this data, rather +# than just returning a constant string. This +# string data is stored in the static string. +# This depends on the length of locale names, +# hence this option. If just the C locale is +# present, this option can be set as low as 2. +# +cdl_option CYGNUM_LIBC_I18N_MAX_LOCALE_NAME_SIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 2 + # value_source default + # Default value: (CYGFUN_LIBC_I18N_LOCALE_C_EUCJP ? 8 : (CYGFUN_LIBC_I18N_LOCALE_C_SJIS ? 7 : (CYGFUN_LIBC_I18N_LOCALE_C_JIS ? 6 : 2))) + # CYGFUN_LIBC_I18N_LOCALE_C_EUCJP == 0 + # CYGFUN_LIBC_I18N_LOCALE_C_SJIS == 0 + # CYGFUN_LIBC_I18N_LOCALE_C_JIS == 0 + # --> 2 + # Legal values: (CYGFUN_LIBC_I18N_LOCALE_C_EUCJP ? 8 : (CYGFUN_LIBC_I18N_LOCALE_C_SJIS ? 7 : (CYGFUN_LIBC_I18N_LOCALE_C_JIS ? 6 : 2))) to 0x7fffffff + # CYGFUN_LIBC_I18N_LOCALE_C_EUCJP == 0 + # CYGFUN_LIBC_I18N_LOCALE_C_SJIS == 0 + # CYGFUN_LIBC_I18N_LOCALE_C_JIS == 0 +}; + +# Inline versions of <ctype.h> functions +# This option chooses whether the simple character +# classification and conversion functions (e.g. +# isupper(), isalpha(), toupper(), etc.) +# from <ctype.h> are available as inline +# functions. This may improve performance and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_I18N_CTYPE_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGBLD_ISO_CTYPE_HEADER == "<cyg/libc/i18n/ctype.inl>" + # CYGBLD_ISO_CTYPE_HEADER == <cyg/libc/i18n/ctype.inl> + # --> 1 +}; + +# C library i18n functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_I18N_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_I18N_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_I18N_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library i18n function tests +# This option specifies the set of tests for the C library +# i18n functions. +# +cdl_option CYGPKG_LIBC_I18N_TESTS { + # Calculated value: "tests/ctype tests/setlocale tests/i18nmb" + # Flavor: data + # Current_value: tests/ctype tests/setlocale tests/i18nmb +}; + +# < +# < +# ISO C library setjmp/longjmp functions +# doc: ref/libc.html +# This package provides non-local jumps based on setjmp() and +# longjmp() in <setjmp.h> as specified by the ISO C +# standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_SETJMP { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGBLD_ISO_SETJMP_HEADER == "<cyg/libc/setjmp/setjmp.h>" + # CYGBLD_ISO_SETJMP_HEADER == <cyg/libc/setjmp/setjmp.h> + # --> 1 +}; + +# > +# C library setjmp build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_SETJMP_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building this package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_SETJMP_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building this package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_SETJMP_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library setjmp tests +# This option specifies the set of tests for this package. +# +cdl_option CYGPKG_LIBC_SETJMP_TESTS { + # Calculated value: "tests/setjmp" + # Flavor: data + # Current_value: tests/setjmp +}; + +# < +# < +# ISO C library signal functions +# doc: ref/libc.html +# This component controls signal functionality, +# as implemented in ISO/IEC 9899:1990 chapter 7.7 with +# the signal() and raise() functions. As well as +# allowing a program to send itself signals, it is +# also possible to cause hardware exceptions to +# be signalled to the program in a similar way. +# +cdl_package CYGPKG_LIBC_SIGNALS { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_SIGNAL_NUMBERS_HEADER == "<cyg/libc/signals/signal.h>" + # CYGBLD_ISO_SIGNAL_NUMBERS_HEADER == <cyg/libc/signals/signal.h> + # --> 1 + # Requires: CYGBLD_ISO_SIGNAL_IMPL_HEADER == "<cyg/libc/signals/signal.h>" + # CYGBLD_ISO_SIGNAL_IMPL_HEADER == <cyg/libc/signals/signal.h> + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Thread safe signals +# Because signal handlers are global, and not +# thread-specific (as mandated by POSIX 1003.1) +# it is possible for multiple threads to clash +# and corrupt data if setting the same signal +# handler at the same time. With this option +# enabled, a kernel mutex will be used to protect +# the shared data. +# +cdl_option CYGSEM_LIBC_SIGNALS_THREAD_SAFE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 +}; + +# Hardware exceptions cause signals +# This causes hardware exceptions like +# arithmetic exceptions (e.g. divide by zero) +# or bad memory accesses to be passed through as +# signals. It is thus possible for a program to +# handle these exceptions in a generic way using +# the appropriate signal handlers. The details of +# exactly which exceptions are passed through +# under what circumstances depend on the +# underlying HAL implementation. Consequently it +# must be remembered that signal handlers cannot +# be guaranteed to be invoked in the expected +# circumstances if you do not know about the +# underlying HAL implementation - it is possible +# that the architecture is unable to detect that +# exception. +# +cdl_component CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_KERNEL_EXCEPTIONS_GLOBAL + # CYGSEM_KERNEL_EXCEPTIONS_GLOBAL == 1 + # --> 1 + # Requires: CYGSEM_KERNEL_EXCEPTIONS_DECODE + # CYGSEM_KERNEL_EXCEPTIONS_DECODE == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGPKG_LIBC_SIGNALS_TESTS + # Calculated: + # "tests/signal1" + # . ((CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS) ? " tests/signal2" : "") + # +}; + +# > +# Chain old exception handlers +# When hardware exceptions are generated, it +# is possible to chain into the old kernel exception +# handler before calling any registered signal +# handler. If this is not required, disable this +# option and only the signal handler will be +# called when this exception occurs. Disabling +# this option will also save some space and code +# usage. +# +cdl_option CYGSEM_LIBC_SIGNALS_CHAIN_HWEXCEPTIONS { + # This option is not active + # The parent CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Inline versions of functions +# Some functions can be made inline instead of +# being function calls. These can be set here. +# +cdl_component CYGPKG_LIBC_SIGNALS_INLINE { + # There is no associated value. +}; + +# > +# raise() +# Enabling this option makes raise() an inline function. +# +cdl_option CYGIMP_LIBC_SIGNALS_RAISE_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# signal() +# Enabling this option makes signal() an inline function. +# +cdl_option CYGIMP_LIBC_SIGNALS_SIGNAL_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# < +# Error handling +# You may or may not want errno to be set by +# certain functions. Not using errno could save +# both space, code, and avoid worrying about +# interactions between multiple threads when +# setting it. +# +cdl_component CYGPKG_LIBC_SIGNALS_ERROR_HANDLING { + # There is no associated value. +}; + +# > +# Bad signal fatal +# Enabling this option will cause an assertion +# failure if the signal handling code is +# passed a bad signal. Otherwise an error will +# be returned, or in the case of a +# hardware-generated exception it will be silently +# ignored. +# +cdl_option CYGSEM_LIBC_SIGNALS_BAD_SIGNAL_FATAL { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_USE_ASSERTS + # CYGDBG_USE_ASSERTS == 0 + # --> 0 +}; + +# raise() sets errno +# You may or may not want errno to be set by +# raise() on error conditions. Not using errno +# could save both space, code, and avoid worrying +# about interactions between multiple threads when +# setting it. Strictly ISO C does not mandate +# that errno be set by raise(). +# +cdl_option CYGSEM_LIBC_SIGNALS_RAISE_SETS_ERRNO { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 1 + # --> 1 + # Requires: CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 1 + # --> 1 +}; + +# signal() sets errno +# You may or may not want errno to be set by +# signal() on error conditions. Not using errno +# could save both space, code, and avoid worrying +# about interactions between multiple threads when +# setting it. Strictly ISO C mandates +# that errno be set by signal(). +# +cdl_option CYGSEM_LIBC_SIGNALS_SIGNAL_SETS_ERRNO { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 1 + # --> 1 + # Requires: CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 1 + # --> 1 +}; + +# < +# Tracing +# These options control the trace output for the C +# library internal signal implementation. +# +cdl_component CYGPKG_LIBC_SIGNALS_TRACING { + # There is no associated value. +}; + +# > +# Default trace level for raise() +# This gives the default tracing level for the +# raise() function. Higher numbers are more +# verbose. +# +cdl_option CYGNUM_LIBC_SIGNALS_RAISE_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# Default hardware exception handler trace level +# This gives the default tracing level for the +# hardware exception handler function (if enabled). +# Higher numbers are more verbose. +# +cdl_option CYGNUM_LIBC_SIGNALS_HWHANDLER_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# C library signal functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_SIGNALS_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_SIGNALS_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_SIGNALS_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library signal function tests +# This option specifies the set of tests for the C library +# signal functions. +# +cdl_option CYGPKG_LIBC_SIGNALS_TESTS { + # Calculated value: + # "tests/signal1" + # . ((CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS) ? " tests/signal2" : "") + # + # CYGSEM_LIBC_SIGNALS_HWEXCEPTIONS == 0 + # Flavor: data + # Current_value: tests/signal1 +}; + +# < +# < +# ISO environment startup/termination +# doc: ref/c-library-startup.html +# This package manages the control of the +# environment (in the general sense) that an +# application would require for full ISO C / POSIX +# compatibility, including a main() entry point +# supplied with arguments and an environment +# (as retrievable by the getenv() function). +# It also includes at the other end of things, +# what happens when main() returns or exit() is +# called. +# +cdl_package CYGPKG_LIBC_STARTUP { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_LIBC_STARTUP_CONTEXT == 1 + # CYGINT_LIBC_STARTUP_CONTEXT == 1 + # --> 1 +}; + +# > +# main() can be invoked elsewhere +# Implementors of this interface show that they +# allow main() to be invoked elsewhere. +# +cdl_interface CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + + # The following properties are affected by this value + # option CYGSEM_LIBC_STARTUP_MAIN_INITCONTEXT + # DefaultValue: 0 == CYGPKG_KERNEL && 0 == + # CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # component CYGSEM_LIBC_STARTUP_MAIN_THREAD + # DefaultValue: 0 != CYGPKG_KERNEL && 0 == CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # option CYGSEM_LIBC_STARTUP_MAIN_OTHER + # DefaultValue: 0 != CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # option CYGSEM_LIBC_STARTUP_MAIN_OTHER + # Requires: CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE +}; + +# Arguments to main() +# This option allows the setting of the arguments +# to the main function. This only has any effect +# when cyg_iso_c_start() is used to start the +# ISO C compatibility. This will automatically +# invoke main() in an ISO C compatible fashion. +# This option is in fact used as argv, and so is +# an n-tuple of string constants. The final +# entry must be NULL. Conventionally if argv[0] +# is supplied, it is used to inform the program +# of its name. +# +cdl_option CYGDAT_LIBC_ARGUMENTS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{(char *)\"\", (char *)NULL}" + # value_source default + # Default value: "{(char *)\"\", (char *)NULL}" +}; + +# Startup context for main() +# This component describes the options available for +# what context main() is invoked in, such as in a thread +# etc. +# +cdl_component CYGPKG_LIBC_STARTUP_CONTEXT { + # There is no associated value. +}; + +# > +# Startup context implementors +# +cdl_interface CYGINT_LIBC_STARTUP_CONTEXT { + # Implemented by CYGSEM_LIBC_STARTUP_MAIN_INITCONTEXT, active, disabled + # Implemented by CYGSEM_LIBC_STARTUP_MAIN_THREAD, active, enabled + # Implemented by CYGSEM_LIBC_STARTUP_MAIN_OTHER, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + + # The following properties are affected by this value + # package CYGPKG_LIBC_STARTUP + # Requires: CYGINT_LIBC_STARTUP_CONTEXT == 1 +}; + +# Invoked from initialization context +# With this option selected, main() will be +# called via cyg_user_start() (unless the program +# overrides the default cyg_user_start()). This +# means it is run in the context of the system +# initialization code, without the eCos kernel +# scheduler running, and using the startup stack. +# This means that any functions that may require +# interactions with a running kernel will not +# work (including libc functions, if configured +# to be thread safe for example), so you should +# restrict yourself to only calling fully +# re-entrant functions from within main() in +# this case. +# +cdl_option CYGSEM_LIBC_STARTUP_MAIN_INITCONTEXT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 == CYGPKG_KERNEL && 0 == + # CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # CYGPKG_KERNEL == current + # CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE == 0 + # --> 0 +}; + +# Invoked as eCos thread +# With this option selected, main() is invoked from an eCos +# thread. +# +cdl_component CYGSEM_LIBC_STARTUP_MAIN_THREAD { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_KERNEL && 0 == CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # CYGPKG_KERNEL == current + # CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE == 0 + # --> 1 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # Requires: CYGSEM_LIBC_STARTUP_MAIN_THREAD || (CYGSEM_LIBC_STARTUP_MAIN_OTHER && CYGPKG_POSIX_PTHREAD) +}; + +# > +# System provides stack for main()'s thread +# This option controls whether the stack of +# main()'s thread is provided by the application or +# provided by the system. When disabled, the +# application must declare a pointer variable +# cyg_libc_main_stack which is a pointer to an +# appropriately aligned region of memory. The +# application must also declare a variable of +# type `int' called cyg_libc_main_stack_size +# which contains the size of the stack in bytes. +# This must be a multiple of 8. +# +cdl_option CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Priority of main()'s thread +# This option is used to provide the thread +# priority which main()'s thread runs at. Be +# sure to check that this number is appropriate +# for the kernel scheduler chosen. Different +# kernel schedulers impose different restrictions +# on the usable priorities. +# +cdl_option CYGNUM_LIBC_MAIN_THREAD_PRIORITY { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 10 + # value_source default + # Default value: 10 + # Legal values: 0 to 0x7fffffff +}; + +# < +# Invoked elsewhere +# With this option selected, main() must be +# invoked by a separate package, or by the user. +# +cdl_option CYGSEM_LIBC_STARTUP_MAIN_OTHER { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 != CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE == 0 + # --> 0 + # Requires: CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE + # CYGINT_LIBC_STARTUP_EXTERNAL_INVOKE_MAIN_POSSIBLE == 0 + # --> 0 + + # The following properties are affected by this value + # option CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS + # Requires: CYGSEM_LIBC_STARTUP_MAIN_THREAD || (CYGSEM_LIBC_STARTUP_MAIN_OTHER && CYGPKG_POSIX_PTHREAD) +}; + +# < +# Don't allow main()'s stack size to be set +# This interface describes whether the stack size +# value set in this package is supported by the +# implementation that invokes main. If not, that +# option is disabled. +# +cdl_interface CYGINT_LIBC_STARTUP_MAIN_NO_STACK_SIZE { + # Implemented by CYGSEM_LIBC_STARTUP_MAIN_INITCONTEXT, active, disabled + # This value cannot be modified here. + # Flavor: bool + # Current value: 0 + + # The following properties are affected by this value + # option CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE + # ActiveIf: !CYGINT_LIBC_STARTUP_MAIN_NO_STACK_SIZE +}; + +# main()'s default thread stack size +# This option sets the size of the stack used +# in the context that invokes main(). For example, +# with an eCos kernel, when the cyg_iso_c_start() +# function is used to invoke the user-supplied +# main() function in an ISO C compatible fashion, +# a separate thread is created to call main(). +# This option controls the size of that thread's +# stack, which is allocated in the BSS. It +# must be a multiple of 8. Note, a low number +# here may be overriden by the HAL if there is +# a minimum requirement to process interrupts +# etc. This option cannot be set if the implementation +# that invokes main() does not use it. +# +cdl_option CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE { + # ActiveIf constraint: !CYGINT_LIBC_STARTUP_MAIN_NO_STACK_SIZE + # CYGINT_LIBC_STARTUP_MAIN_NO_STACK_SIZE == 0 + # --> 1 + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8192 + # value_source default + # Default value: 8192 + # Legal values: 16 to 0x7fffffff +}; + +# Include atexit() function +# This option enables the use of the atexit() +# function, and ensure that the atexit handlers +# are invoked from within exit() as defined in +# the ISO C standard. +# +cdl_component CYGFUN_LIBC_ATEXIT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# > +# Number of functions atexit() supports +# This option sets the number of functions +# that atexit() has room for. In other words, +# the number of separate atexit() calls that +# can be made before calling exit() or returning +# from main() ( in an environment controlled by +# cyg_iso_c_start() ). For strict compliance +# with the ISO C standard this should be at +# least 32. +# +cdl_option CYGNUM_LIBC_ATEXIT_HANDLERS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 32 + # value_source default + # Default value: 32 + # Legal values: 1 to 0x7fffffff +}; + +# < +# Make exit() call fflush() +# This option will ensure that all output +# streams are flushed when exitting using +# exit() as prescribed by the ISO C standard. +# +cdl_option CYGSEM_LIBC_EXIT_CALLS_FFLUSH { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 1 + # --> 1 + # Requires: CYGINT_ISO_STDIO_FILEACCESS + # CYGINT_ISO_STDIO_FILEACCESS == 1 + # --> 1 +}; + +# _exit() stops all threads +# If this option is enabled then _exit(), +# which is called from exit() which itself is +# called on return from main(), stops the eCos +# scheduler. For strict POSIX 1003.1 +# compatibility this would be the normal +# behaviour. To allow the thread to simply +# exit, without affecting other threads, simply +# leave this option disabled. If there is no eCos +# scheduler, then _exit() simply loops +# irrespective of the setting of this option. +# +cdl_option CYGSEM_LIBC_EXIT_STOPS_SYSTEM { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 +}; + +# Default environment +# This option allows the setting of the default +# contents of the environment. This is in fact +# the contents of the global environment pointer +# char **environ defined by POSIX 1003.1. Strings +# must be of the form NAME=VALUE, and the final +# entry must be NULL. +# +cdl_option CYGDAT_LIBC_DEFAULT_ENVIRONMENT { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "{ NULL }" + # value_source default + # Default value: "{ NULL }" +}; + +# Invoke default static constructors +# This option causes the C library to call +# static constructors with default priority +# from within the context of the main() thread, +# working with the co-operation of the HAL. +# This may be needed for environments that +# expect static constructors to be run in a +# thread context. Note that this uses an object +# with priority 65534. Therefore do not use +# priority 65534 for any other static objects +# with this option enabled. +# +cdl_option CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + # CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG == 0 + # --> 0 + # Requires: CYGSEM_LIBC_STARTUP_MAIN_THREAD || (CYGSEM_LIBC_STARTUP_MAIN_OTHER && CYGPKG_POSIX_PTHREAD) + # CYGSEM_LIBC_STARTUP_MAIN_THREAD == 1 + # CYGSEM_LIBC_STARTUP_MAIN_OTHER == 0 + # CYGPKG_POSIX_PTHREAD (unknown) == 0 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + # Requires: CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS +}; + +# ISO environment startup/termination build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STARTUP_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building this package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STARTUP_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building this package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STARTUP_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# ISO environment startup/termination tests +# This option specifies the set of tests for this package. +# +cdl_option CYGPKG_LIBC_STARTUP_TESTS { + # Calculated value: "tests/atexit" + # Flavor: data + # Current_value: tests/atexit +}; + +# < +# < +# ISO C library standard input/output functions +# doc: ref/libc.html +# This package provides standard input/output functions associated +# with the header file <stdio.h> as specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STDIO { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_IO + # CYGPKG_IO == current + # --> 1 + # Requires: CYGPKG_LIBC_I18N + # CYGPKG_LIBC_I18N == current + # --> 1 + # Requires: (CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE == "\"/dev/ttydiag\"" ? CYGPKG_IO_SERIAL_HALDIAG : 1) + # CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE == "\"/dev/tty0\"" + # CYGPKG_IO_SERIAL_HALDIAG == 1 + # --> 1 + # Requires: CYGBLD_ISO_STDIO_FILETYPES_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_FILETYPES_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGBLD_ISO_STDIO_FILEACCESS_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_FILEACCESS_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGBLD_ISO_STDIO_FILEPOS_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_FILEPOS_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGBLD_ISO_STDIO_FILEOPS_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_FILEOPS_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGBLD_ISO_STDIO_CHAR_IO_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_CHAR_IO_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGBLD_ISO_STDIO_DIRECT_IO_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_DIRECT_IO_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGBLD_ISO_STDIO_ERROR_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_ERROR_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGBLD_ISO_STDIO_STREAMS_HEADER == "<cyg/libc/stdio/stdio.h>" + # CYGBLD_ISO_STDIO_STREAMS_HEADER == <cyg/libc/stdio/stdio.h> + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_ERRNO_CODES + # CYGINT_ISO_ERRNO_CODES == 1 + # --> 1 + # Requires: CYGINT_ISO_ERRNO + # CYGINT_ISO_ERRNO == 1 + # --> 1 + # Requires: CYGINT_ISO_STRERROR + # CYGINT_ISO_STRERROR == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_MEMFUNCS + # CYGINT_ISO_STRING_MEMFUNCS == 1 + # --> 1 + # Requires: CYGINT_ISO_STDLIB_STRCONV + # CYGINT_ISO_STDLIB_STRCONV == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_LIBM_USE_STDERR + # Requires: CYGPKG_LIBC_STDIO +}; + +# > +# Inline versions of <stdio.h> functions +# This option chooses whether some of the +# particularly simple functions from +# <stdio.h> are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STDIO_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Permitted number of open files +# This option controls the guaranteed minimum +# number of simultaneously open files. The ISO +# C standard requires it to be defined (para +# 7.9.1), and if strictly compliant, it must be +# at least 8 (para 7.9.3). In practice it can be +# as low as 3 - for stdin, stdout and stderr. +# +cdl_option FOPEN_MAX { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 8 + # value_source default + # Default value: 8 + # Legal values: 3 to 0x7fffffff +}; + +# Maximum length of filename +# This option defines the maximum allowed size of +# a filename in characters. The ISO C standard +# requires it to be defined (para 7.9.1). +# +cdl_option FILENAME_MAX { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 + # Legal values: 1 to 0x7fffffff +}; + +# Maximum length of filenames for temporary files +# This option defines the maximum allowed size of +# filenames for temporary files as generated by +# tmpnam(). It is measured in characters, and the +# ISO C standard requires it to be defined (para +# 7.9.1). +# +cdl_option L_tmpnam { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 16 + # value_source default + # Default value: 16 + # Legal values: 4 to 0x7fffffff +}; + +# Unique file names generated by tmpnam() +# This option defines the minimum number of +# unique file names generated by tmpnam(). The +# ISO C standard requires it to be defined (para +# 7.9.1) and for ISO compliance it should be at least +# 25. Note that TMP_MAX names may not be generated +# if L_tmpnam is too small. +# +cdl_option TMP_MAX { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 25 + # value_source default + # Default value: 25 + # Legal values: 1 to 0x7fffffff +}; + +# Buffered I/O +# This option controls whether input/output +# through the <stdio.h> functions is buffered. +# This may save some memory per file. It +# is equivalent to putting every file into +# non-buffered mode (_IONBF) through setvbuf(), +# except now it can never be altered back to +# buffered mode. Disabling buffering is strictly +# non-compliant with the ISO C standard. +# +cdl_component CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option BUFSIZ + # Calculated: CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO ? CYGNUM_LIBC_STDIO_BUFSIZE : 0 + # option CYGPKG_LIBC_STDIO_FILEIO + # Requires: CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO +}; + +# > +# Default buffer size +# This option defines the default size of buffer +# used with calls to setbuf(), and is the default +# size for buffered streams that have not had +# either setbuf() or setvbuf() invoked on them. +# It is exactly equivalent to the standard +# constant BUFSIZ, except that it is 0 if +# CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO is disabled. +# The ISO C standard requires this to be defined +# (para 7.9.1), and says it must be at least 256 +# (para 7.9.2). +# +cdl_option CYGNUM_LIBC_STDIO_BUFSIZE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 256 + # value_source default + # Default value: 256 + # Legal values: 1 to 0x7fffffff + + # The following properties are affected by this value + # option BUFSIZ + # Calculated: CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO ? CYGNUM_LIBC_STDIO_BUFSIZE : 0 +}; + +# setbuf()/setvbuf() allows dynamic setting +# This option controls whether I/O buffers are +# implemented dynamically within the stdio +# implementation. Otherwise they will be static, +# and cannot be changed by setbuf()/setvbuf(). If +# they are static (i.e. this option is disabled), +# any attempt to use an arbitrary buffer size, or +# to pass a user-supplied buffer to setbuf() or +# setvbuf() will fail - the buffer is implemented +# internally as a static array taking the size +# of the configuration option BUFSIZ. The only +# exception is if a user buffer is not supplied, +# and the buffer size requested is less than +# BUFSIZ. In this case, the buffer will +# be configured to only use that amount of +# buffering. However the unused memory left over +# will NOT be freed. If this option is enabled, +# then setvbuf() can be used to assign a user supplied +# buffer to the stream. +# Either setting can be considered to +# be compliant with the ISO C standard. +# +cdl_option CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGSEM_LIBC_STDIO_SETVBUF_MALLOC + # Requires: CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF + # option CYGPKG_LIBC_STDIO_FILEIO + # Requires: CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF +}; + +# setbuf()/setvbuf() uses malloc() +# This option controls whether buffers set by setbuf() and +# setvbuf() may be allocated using malloc(). +# +cdl_option CYGSEM_LIBC_STDIO_SETVBUF_MALLOC { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 1 + # --> 1 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 1 + # --> 1 + # Requires: CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF + # CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF == 1 + # --> 1 +}; + +# < +# Default buffer size (BUFSIZ) +# +cdl_option BUFSIZ { + # Calculated value: CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO ? CYGNUM_LIBC_STDIO_BUFSIZE : 0 + # CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO == 1 + # CYGNUM_LIBC_STDIO_BUFSIZE == 256 + # Flavor: data + # Current_value: 256 +}; + +# Support for ungetc() +# This option controls whether ungetc() is +# supported. If not, then some space can be +# saved, and speed is improved. Note that you +# MUST have this defined if you want to use the +# scanf() family of functions. +# +cdl_option CYGFUN_LIBC_STDIO_ungetc { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Dynamic opening/closing of files +# fopen() and fclose() use dynamic memory +# allocation routines to allocate memory for +# new FILE structure pointers. If a malloc +# implementation is available, this option +# may be enabled to use +# fopen() and fclose(). If disabled, only the +# default console streams - stdin, stdout and +# stderr - will be available. +# +cdl_component CYGPKG_LIBC_STDIO_OPEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 1 + # --> 1 + # Requires: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 1 + # --> 1 +}; + +# > +# POSIX fdopen/fileno functions +# This identifies to the rest of the system +# whether the POSIX fdopen() and +# fileno() functions are implemented. +# +cdl_option CYGFUN_LIBC_STDIO_OPEN_POSIX_FDFUNCS { + # This option is not active + # ActiveIf constraint: CYGPKG_LIBC_STDIO_FILEIO + # CYGPKG_LIBC_STDIO_FILEIO == 0 + # --> 0 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# < +# Default console device +# This option allows you to choose the +# default console device. In the current +# implementation, all these devices begin +# with the prefix /dev/ and are followed by +# the name of a device. The name of the device +# depends on the device drivers you have +# configured in your system. For example, +# /dev/ttydiag could be the HAL diagnostic output +# pseudo-device, or /dev/tty0 could be your +# first serial driver, depending on your +# configuration. +# +cdl_option CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE { + # Flavor: data + user_value "\"/dev/tty0\"" + # value_source user + # Default value: CYGDAT_IO_SERIAL_TTY_CONSOLE ? CYGDAT_IO_SERIAL_TTY_CONSOLE : "\"/dev/null\"" + # CYGDAT_IO_SERIAL_TTY_CONSOLE == "\"/dev/ttydiag\"" + # CYGDAT_IO_SERIAL_TTY_CONSOLE == "\"/dev/ttydiag\"" + # --> "\"/dev/ttydiag\"" + + # The following properties are affected by this value + # package CYGPKG_LIBC_STDIO + # Requires: (CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE == "\"/dev/ttydiag\"" ? CYGPKG_IO_SERIAL_HALDIAG : 1) +}; + +# Floating point support +# This component allows floating point support +# to be enabled in certain standard I/O +# functions. +# +cdl_component CYGPKG_LIBC_STDIO_FLOATING_POINT { + # There is no associated value. +}; + +# > +# printf() family +# This option enables the use of floating point +# number output in the printf() family (i.e. +# printf(), sprintf(), vprintf(), etc.) of +# functions. A substantial amount of code space +# can be saved if this option is disabled. If it +# is disabled then floating point specifiers +# (%e, %f, %g) are ignored, and nothing is +# output. +# +cdl_option CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_LIBM + # CYGPKG_LIBM == current + # --> 1 + # Requires: CYGPKG_LIBM + # CYGPKG_LIBM == current + # --> 1 +}; + +# scanf() family +# This option enables the use of floating point +# number conversion in the scanf() family (i.e. +# scanf(), sscanf(), vscanf(), etc.) of +# functions. A substantial amount of code space +# can be saved if this option is disabled. If it +# is disabled then floating point specifiers +# (%e, %f, %g) are ignored, and nothing is +# converted. +# +cdl_option CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_LIBM && + # 0 != CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGPKG_LIBM == current + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 1 + # --> 1 + # Requires: CYGPKG_LIBM + # CYGPKG_LIBM == current + # --> 1 + # Requires: CYGINT_ISO_STDLIB_STRCONV_FLOAT + # CYGINT_ISO_STDLIB_STRCONV_FLOAT == 1 + # --> 1 +}; + +# < +# Long long support +# This option allows various functions in the C Standard I/O +# library to support the 'long long' datatype. Doing so +# will come with a noticeable code size penalty however. +# +cdl_option CYGFUN_LIBC_STDIO_LONGLONG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGFUN_LIBC_STDLIB_CONV_LONGLONG + # CYGFUN_LIBC_STDLIB_CONV_LONGLONG == 1 + # --> 1 +}; + +# Thread safe I/O streams +# doc: ref/libc-thread-safety.html +# This option controls whether standard I/O streams +# are thread-safe. Having this option set allows +# the streams to be locked when accessed by +# multiple threads simultaneously. +# +cdl_option CYGSEM_LIBC_STDIO_THREAD_SAFE_STREAMS { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# C99 compliant snprintf() family +# This option allows C99 compliant implementation of +# snprintf() family (i.e. snprintf(), vsnprintf()) +# of functions. C99 compliant snprintf() functions +# return the number of characters that would have been written +# to a sufficiently sized buffer (excluding the '\0'). +# If this option is disabled, the functions simply return +# the number of bytes that have been written to the buffer. +# +cdl_option CYGIMP_LIBC_STDIO_C99_SNPRINTF { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Enable use of FILEIO package for IO operations. +# This CDL exists to control how the standard I/O functions +# interface to the underlying I/O system. Either using the +# File I/O package, or the generic I/O package which is used +# by fewer devices. +# +cdl_option CYGPKG_LIBC_STDIO_FILEIO { + # This option is not active + # ActiveIf constraint: CYGPKG_IO_FILEIO + # CYGPKG_IO_FILEIO (unknown) == 0 + # --> 0 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 + # Requires: CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO + # CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO == 1 + # --> 1 + # Requires: CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF + # CYGSEM_LIBC_STDIO_DYNAMIC_SETVBUF == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STDIO_OPEN_POSIX_FDFUNCS + # ActiveIf: CYGPKG_LIBC_STDIO_FILEIO +}; + +# C library stdio functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STDIO_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STDIO_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STDIO_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library stdio function tests +# This option specifies the set of tests for the C library +# stdio functions. +# +cdl_option CYGPKG_LIBC_STDIO_TESTS { + # Calculated value: + # "tests/sprintf1 tests/sprintf2 tests/snprintf tests/sscanf tests/stdiooutput " + # . ((CYGPKG_IO_FILEIO && CYGPKG_FS_RAM) ? "tests/fileio " : "") + # + # CYGPKG_IO_FILEIO (unknown) == 0 + # CYGPKG_FS_RAM (unknown) == 0 + # Flavor: data + # Current_value: tests/sprintf1 tests/sprintf2 tests/snprintf tests/sscanf tests/stdiooutput +}; + +# < +# < +# ISO C library general utility functions +# doc: ref/libc.html +# This package provides general utility functions in <stdlib.h> +# as specified by the ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STDLIB { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 1 + # --> 1 + # Requires: CYGINT_ISO_STRING_STRFUNCS + # CYGINT_ISO_STRING_STRFUNCS == 1 + # --> 1 +}; + +# > +# Inline versions of <stdlib.h> functions +# This option chooses whether some of the +# particularly simple standard utility functions +# from <stdlib.h> are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_component CYGIMP_LIBC_STDLIB_INLINES { + # There is no associated value. +}; + +# > +# abs() / labs() +# +cdl_option CYGIMP_LIBC_STDLIB_INLINE_ABS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGBLD_ISO_STDLIB_ABS_HEADER == "<cyg/libc/stdlib/abs.inl>" + # CYGBLD_ISO_STDLIB_ABS_HEADER == <cyg/libc/stdlib/abs.inl> + # --> 1 +}; + +# div() / ldiv() +# +cdl_option CYGIMP_LIBC_STDLIB_INLINE_DIV { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGBLD_ISO_STDLIB_DIV_HEADER == "<cyg/libc/stdlib/div.inl>" + # CYGBLD_ISO_STDLIB_DIV_HEADER == <cyg/libc/stdlib/div.inl> + # --> 1 +}; + +# atof() / atoi() / atol() +# +cdl_option CYGIMP_LIBC_STDLIB_INLINE_ATOX { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGBLD_ISO_STDLIB_STRCONV_HEADER == "<cyg/libc/stdlib/atox.inl>" + # CYGBLD_ISO_STDLIB_STRCONV_HEADER == <cyg/libc/stdlib/atox.inl> + # --> 1 +}; + +# < +# Random number generation +# These options control the behaviour of the +# functions rand(), srand() and rand_r() +# +cdl_component CYGPKG_LIBC_RAND { + # There is no associated value. +}; + +# > +# Per-thread random seed +# doc: ref/libc-thread-safety.html +# This option controls whether the pseudo-random +# number generation functions rand() and srand() +# have their state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard rand_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_PER_THREAD_RAND { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA == 1 + # --> 1 +}; + +# Random number seed +# This selects the initial random number seed for +# rand()'s pseudo-random number generator. For +# strict ISO standard compliance, this should be 1, +# as per section 7.10.2.2 of the standard. +# +cdl_option CYGNUM_LIBC_RAND_SEED { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Legal values: 0 to 0x7fffffff +}; + +# Tracing level +# Trace verbosity level for debugging the rand(), +# srand() and rand_r() functions. Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_RAND_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# Simplest implementation +# This provides a very simple implementation of rand() +# that does not perform well with randomness in the +# lower significant bits. However it is exceptionally +# fast. It uses the sample algorithm from the ISO C +# standard itself. +# +cdl_option CYGIMP_LIBC_RAND_SIMPLEST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Simple implementation #1 +# This provides a very simple implementation of rand() +# based on the simplest implementation above. However +# it does try to work around the lack of randomness +# in the lower significant bits, at the expense of a +# little speed. +# +cdl_option CYGIMP_LIBC_RAND_SIMPLE1 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Knuth implementation #1 +# This implements a slightly more complex algorithm +# published in Donald E. Knuth's Art of Computer +# Programming Vol.2 section 3.6 (p.185 in the 3rd ed.). +# This produces better random numbers than the +# simplest approach but is slower. +# +cdl_option CYGIMP_LIBC_RAND_KNUTH1 { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Provides strtod() +# This option allows use of the utility function +# strtod() (and consequently atof()) to convert +# from string to double precision floating point +# numbers. Disabling this option removes the +# dependency on the math library package. +# +cdl_option CYGFUN_LIBC_strtod { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 != CYGPKG_LIBM + # CYGPKG_LIBM == current + # --> 1 + # Requires: CYGPKG_LIBM + # CYGPKG_LIBM == current + # --> 1 +}; + +# Provides long long conversion functions +# Enabling this option will provide support for the strtoll(), +# strtoull() and atoll() conversion functions, which are +# the long long variants of the standard versions of these +# functions. Supporting this requires extra code and compile +# time. +# +cdl_option CYGFUN_LIBC_STDLIB_CONV_LONGLONG { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + + # The following properties are affected by this value + # option CYGFUN_LIBC_STDIO_LONGLONG + # Requires: CYGFUN_LIBC_STDLIB_CONV_LONGLONG +}; + +# bsearch() tracing level +# Trace verbosity level for debugging the <stdlib.h> +# binary search function bsearch(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_BSEARCH_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# qsort() tracing level +# Trace verbosity level for debugging the <stdlib.h> +# quicksort function qsort(). Increase this value +# to get additional trace output. +# +cdl_option CYGNUM_LIBC_QSORT_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# C library stdlib build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STDLIB_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building this package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STDLIB_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building this package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STDLIB_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library stdlib tests +# This option specifies the set of tests for this package. +# +cdl_option CYGPKG_LIBC_STDLIB_TESTS { + # Calculated value: "tests/abs tests/atoi tests/atol tests/bsearch tests/div tests/getenv tests/labs tests/ldiv tests/qsort tests/rand1 tests/rand2 tests/rand3 tests/rand4 tests/srand tests/strtol tests/strtoul" + # Flavor: data + # Current_value: tests/abs tests/atoi tests/atol tests/bsearch tests/div tests/getenv tests/labs tests/ldiv tests/qsort tests/rand1 tests/rand2 tests/rand3 tests/rand4 tests/srand tests/strtol tests/strtoul +}; + +# < +# < +# ISO C library string functions +# doc: ref/libc.html +# This package provides string functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_STRING { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == "<cyg/libc/string/string.h>" + # CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER == <cyg/libc/string/string.h> + # --> 1 + # Requires: CYGBLD_ISO_STRING_MEMFUNCS_HEADER == "<cyg/libc/string/string.h>" + # CYGBLD_ISO_STRING_MEMFUNCS_HEADER == <cyg/libc/string/string.h> + # --> 1 + # Requires: CYGBLD_ISO_STRING_STRFUNCS_HEADER == "<cyg/libc/string/string.h>" + # CYGBLD_ISO_STRING_STRFUNCS_HEADER == <cyg/libc/string/string.h> + # --> 1 + # Requires: CYGBLD_ISO_STRTOK_R_HEADER == "<cyg/libc/string/string.h>" + # CYGBLD_ISO_STRTOK_R_HEADER == <cyg/libc/string/string.h> + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 +}; + +# > +# Inline versions of <string.h> functions +# This option chooses whether some of the +# particularly simple string functions from +# <string.h> are available as inline +# functions. This may improve performance, and as +# the functions are small, may even improve code +# size. +# +cdl_option CYGIMP_LIBC_STRING_INLINES { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Optimize string functions for code size +# This option tries to reduce string function +# code size at the expense of execution speed. The +# same effect can be produced if the code is +# compiled with the -Os option to the compiler. +# +cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Provide BSD compatibility functions +# Enabling this option causes various compatibility functions +# commonly found in the BSD UNIX operating system to be included. +# These are functions such as bzero, bcmp, bcopy, bzero, strcasecmp, +# strncasecmp, index, rindex and swab. +# +cdl_option CYGFUN_LIBC_STRING_BSD_FUNCS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == "<cyg/libc/string/bsdstring.h>" + # CYGBLD_ISO_STRING_BSD_FUNCS_HEADER == <cyg/libc/string/bsdstring.h> + # --> 1 + # Requires: CYGINT_ISO_CTYPE + # CYGINT_ISO_CTYPE == 1 + # --> 1 +}; + +# strtok +# These options control the behaviour of the +# strtok() and strtok_r() string tokenization +# functions. +# +cdl_component CYGPKG_LIBC_STRING_STRTOK { + # There is no associated value. +}; + +# > +# Per-thread strtok() +# This option controls whether the string function +# strtok() has its state recorded on a per-thread +# basis rather than global. If this option is +# disabled, some per-thread space can be saved. +# Note there is also a POSIX-standard strtok_r() +# function to achieve a similar effect with user +# support. Enabling this option will use one slot +# of kernel per-thread data. You should ensure you +# have enough slots configured for all your +# per-thread data. +# +cdl_option CYGSEM_LIBC_STRING_PER_THREAD_STRTOK { + # ActiveIf constraint: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA == 1 + # --> 1 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA == 1 + # --> 1 +}; + +# Tracing level +# Trace verbosity level for debugging the <string.h> +# functions strtok() and strtok_r(). Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_LIBC_STRING_STRTOK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# strdup +# This option indicates whether strdup() is to be supported. +# +cdl_option CYGFUN_LIBC_STRING_STRDUP { + # ActiveIf constraint: CYGINT_ISO_MALLOC + # CYGINT_ISO_MALLOC == 1 + # --> 1 + + # Calculated value: 1 + # Flavor: bool + # Current value: 1 +}; + +# Provide strnlen() GNU extension +# This option controls support for the strnlen() function. +# (This is a GNU extension, not part of ANSI C.) +# +cdl_option CYGFUN_LIBC_STRING_GNU_STRNLEN { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# C library string functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_STRING_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library string function tests +# This option specifies the set of tests for the C library +# string functions. +# +cdl_option CYGPKG_LIBC_STRING_TESTS { + # Calculated value: "tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 tests/strnlen" + # Flavor: data + # Current_value: tests/memchr tests/memcmp1 tests/memcmp2 tests/memcpy1 tests/memcpy2 tests/memmove1 tests/memmove2 tests/memset tests/strcat1 tests/strcat2 tests/strchr tests/strcmp1 tests/strcmp2 tests/strcoll1 tests/strcoll2 tests/strcpy1 tests/strcpy2 tests/strcspn tests/strcspn tests/strlen tests/strncat1 tests/strncat2 tests/strncpy1 tests/strncpy2 tests/strpbrk tests/strrchr tests/strspn tests/strstr tests/strtok tests/strxfrm1 tests/strxfrm2 tests/strnlen +}; + +# < +# < +# ISO C library date and time functions +# doc: ref/libc.html +# This package provides time functions specified by the +# ISO C standard - ISO/IEC 9899:1990. +# +cdl_package CYGPKG_LIBC_TIME { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_C_TIME_TYPES_HEADER == "<cyg/libc/time/time.h>" + # CYGBLD_ISO_C_TIME_TYPES_HEADER == <cyg/libc/time/time.h> + # --> 1 + # Requires: CYGBLD_ISO_C_CLOCK_FUNCS_HEADER == "<cyg/libc/time/time.h>" + # CYGBLD_ISO_C_CLOCK_FUNCS_HEADER == <cyg/libc/time/time.h> + # --> 1 + # Requires: CYGPKG_ISOINFRA + # CYGPKG_ISOINFRA == current + # --> 1 + # Requires: CYGINT_ISO_DIV + # CYGINT_ISO_DIV == 1 + # --> 1 + # Requires: CYGINT_ISO_ABS + # CYGINT_ISO_ABS == 1 + # --> 1 +}; + +# > +# Working clock() function +# This option controls whether clock() will +# actually try and determine the process time +# usage. With this option disabled, clock() does +# not disappear, but will permanently return +# (clock_t)-1 as mandated by the ISO C standard. +# +cdl_option CYGSEM_LIBC_TIME_CLOCK_WORKING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGFUN_KERNEL_THREADS_TIMER + # CYGFUN_KERNEL_THREADS_TIMER == 1 + # --> 1 + # Requires: CYGVAR_KERNEL_COUNTERS_CLOCK + # CYGVAR_KERNEL_COUNTERS_CLOCK == 1 + # --> 1 +}; + +# Working time() function +# This option controls whether time() will +# actually try and determine the current calendar +# time. With this option disabled, time() does +# not disappear, but will permanently return +# (time_t)-1 as mandated by the ISO C standard. +# +cdl_option CYGSEM_LIBC_TIME_TIME_WORKING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGPKG_IO_WALLCLOCK + # CYGPKG_IO_WALLCLOCK == current + # --> 1 +}; + +# Working cyg_libc_time_settime() function +# This option controls whether cyg_libc_time_settime() +# will actually try and set the current calendar +# time. With this option disabled, +# cyg_libc_time_settime() does not disappear, but +# will permanently return an error. +# +cdl_option CYGSEM_LIBC_TIME_SETTIME_WORKING { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGPKG_IO_WALLCLOCK + # CYGPKG_IO_WALLCLOCK == current + # --> 1 +}; + +# POSIX time functions +# Enabling this option allows the use of the +# following functions defined in POSIX 1003.1: +# asctime_r(), ctime_r(), gmtime_r(), strptime(), and +# localtime_r(). +# +cdl_option CYGFUN_LIBC_TIME_POSIX { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGINT_ISO_STRING_BSD_FUNCS + # CYGINT_ISO_STRING_BSD_FUNCS == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGIMP_LIBC_TIME_ASCTIME_R_INLINE + # Requires: CYGFUN_LIBC_TIME_POSIX + # option CYGIMP_LIBC_TIME_CTIME_R_INLINE + # Requires: CYGFUN_LIBC_TIME_POSIX + # option CYGIMP_LIBC_TIME_GMTIME_R_INLINE + # Requires: CYGFUN_LIBC_TIME_POSIX + # option CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE + # Requires: CYGFUN_LIBC_TIME_POSIX + # option CYGPKG_LIBC_TIME_TESTS + # Calculated: + # "tests/asctime tests/clock tests/ctime tests/gmtime tests/localtime tests/mktime tests/strftime tests/time " + # . (CYGFUN_LIBC_TIME_POSIX ? "tests/strptime" : "") + # +}; + +# Single UNIX extensions +# Enabling this option allows the use of +# certain additional conversion specifiers +# in the strftime function. +# +cdl_option CYGFUN_LIBC_TIME_SUS_EXTNS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Time zone offsets +# These options control the default STandarD (STD) +# and Daylight Savings Time (DST) +# time offsets so that dates can be set correctly +# for the local environment. +# +cdl_component CYGPKG_LIBC_TIME_ZONES { + # There is no associated value. +}; + +# > +# Default Daylight Savings Time state +# This option controls whether the initial +# time environment is set up as STD, DST or +# unknown. Use the value 1 for DST, 0 for STD, +# and (-1) for unknown. This can also be set at +# runtime using the cyg_libc_time_setdst() +# function. +# +cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_STATE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -1 + # value_source default + # Default value: -1 + # Legal values: -1 to 1 +}; + +# Default Standard Time offset +# This option controls the offset from UTC in +# seconds when in local Standard Time. This +# value can be positive or negative. It +# can also be set at run time using the +# cyg_libc_time_setzoneoffsets() function. +# +cdl_option CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: -90000 to 90000 +}; + +# Default Daylight Savings Time offset +# This option controls the offset from UTC in +# seconds when in local Daylight Savings Time. This +# value can be positive or negative. It +# can also be set at run time using the +# cyg_libc_time_setzoneoffsets() function. +# +cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 3600 + # value_source default + # Default value: 3600 + # Legal values: -90000 to 90000 +}; + +# < +# Inline functions +# These options control whether certain functions +# are available in inline form. This may lead to +# faster code at the expense of code space. But for +# some functions, or some functions with constant +# arguments, it may in fact lead to smaller code. +# +cdl_component CYGPKG_LIBC_TIME_INLINES { + # There is no associated value. +}; + +# > +# asctime() +# Allow the asctime() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_ASCTIME_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# ctime() +# Allow the ctime() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_CTIME_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# difftime() +# Allow the difftime() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_DIFFTIME_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# gmtime() +# Allow the gmtime() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_GMTIME_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# localtime() +# Allow the localtime() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_LOCALTIME_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# mktime() +# Allow the mktime() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_MKTIME_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# asctime_r() +# Allow the asctime_r() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_ASCTIME_R_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGFUN_LIBC_TIME_POSIX + # CYGFUN_LIBC_TIME_POSIX == 1 + # --> 1 +}; + +# ctime_r() +# Allow the ctime_r() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_CTIME_R_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGFUN_LIBC_TIME_POSIX + # CYGFUN_LIBC_TIME_POSIX == 1 + # --> 1 +}; + +# gmtime_r() +# Allow the gmtime_r() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_GMTIME_R_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGFUN_LIBC_TIME_POSIX + # CYGFUN_LIBC_TIME_POSIX == 1 + # --> 1 +}; + +# localtime_r() +# Allow the localtime_r() function to be inlined +# +cdl_option CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGFUN_LIBC_TIME_POSIX + # CYGFUN_LIBC_TIME_POSIX == 1 + # --> 1 +}; + +# < +# clock() tracing level +# Trace verbosity level for debugging the clock() +# function. Increase this value to get +# additional trace output when tracing is enabled. +# +cdl_option CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# C library time functions build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBC_TIME_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBC_TIME_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -Wno-format + # value_source default + # Default value: -Wno-format +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the C library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBC_TIME_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# C library time and date function tests +# This option specifies the set of tests for the C library +# time and date functions. +# +cdl_option CYGPKG_LIBC_TIME_TESTS { + # Calculated value: + # "tests/asctime tests/clock tests/ctime tests/gmtime tests/localtime tests/mktime tests/strftime tests/time " + # . (CYGFUN_LIBC_TIME_POSIX ? "tests/strptime" : "") + # + # CYGFUN_LIBC_TIME_POSIX == 1 + # Flavor: data + # Current_value: tests/asctime tests/clock tests/ctime tests/gmtime tests/localtime tests/mktime tests/strftime tests/time tests/strptime +}; + +# < +# < +# < +# Math library +# doc: ref/libc.html +# ISO standard floating point mathematical library +# containing many useful functions for mathematical +# calculations. +# +cdl_package CYGPKG_LIBM { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # option CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT + # Requires: CYGPKG_LIBM + # option CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT + # DefaultValue: 0 != CYGPKG_LIBM + # option CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT + # Requires: CYGPKG_LIBM + # option CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT + # DefaultValue: 0 != CYGPKG_LIBM && + # 0 != CYGINT_ISO_STDLIB_STRCONV_FLOAT + # option CYGFUN_LIBC_strtod + # Requires: CYGPKG_LIBM + # option CYGFUN_LIBC_strtod + # DefaultValue: 0 != CYGPKG_LIBM +}; + +# > +# Compatibility mode +# These options deal with behaviour related to +# the various compatibility modes - POSIX, IEEE, +# X/OPEN and SVID. +# +cdl_component CYGPKG_LIBM_COMPATIBILITY { + # There is no associated value. +}; + +# > +# +cdl_interface CYGINT_LIBM_COMPAT { + # Implemented by CYGSEM_LIBM_COMPAT_IEEE_ONLY, active, disabled + # Implemented by CYGNUM_LIBM_COMPATIBILITY, active, enabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 == CYGINT_LIBM_COMPAT + # CYGINT_LIBM_COMPAT == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_LIBM_COMPAT + # Requires: 1 == CYGINT_LIBM_COMPAT +}; + +# IEEE-only +# The math library can be hard-coded to only +# behave in one compatibility mode - IEEE. This +# cannot be changed at run-time. IEEE mode is the +# most minimal of the compatibility modes, and so +# this will best help code size and speed, as well +# as omitting the code for other compatibility +# modes. If not defined, the math library can be +# set at run-time to any of the supported +# compatibility modes. +# +cdl_component CYGSEM_LIBM_COMPAT_IEEE_ONLY { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + + # The following properties are affected by this value + # option CYGSEM_LIBM_USE_STDERR + # Requires: !CYGSEM_LIBM_COMPAT_IEEE_ONLY + # option CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE + # Requires: !CYGSEM_LIBM_COMPAT_IEEE_ONLY +}; + +# > +# Inline IEEE754 API wrappers +# IEEE754 API functions are just wrappers for +# core functions. This introduces indirection which can can be +# avoided by inlining. This will also prevent GCC from rendering +# these functions as builtin. The HAL can override for a set of functions +# by providing a list of builtin functions. +# +cdl_option CYGSEM_LIBM_IEEE_API_INLINE { + # This option is not active + # The parent CYGSEM_LIBM_COMPAT_IEEE_ONLY is disabled + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# Default mode +# If you want to have support for more than one +# compatibility mode settable at run-time, rather +# than hard-coded IEEE mode, this component lets +# you choose which mode should be the default. +# +cdl_component CYGNUM_LIBM_COMPATIBILITY { + # Flavor: booldata + # No user value, uncomment the following line to provide one. + # user_value 1 POSIX + # value_source default + # Default value: 1 POSIX + # Legal values: "POSIX" "IEEE" "XOPEN" "SVID" + # Requires: CYGPKG_LIBC + # CYGPKG_LIBC == current + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_LIBM_COMPAT_DEFAULT + # Calculated: CYGNUM_LIBM_COMPATIBILITY == "POSIX" ? "CYGNUM_LIBM_COMPAT_POSIX" : CYGNUM_LIBM_COMPATIBILITY == "IEEE" ? "CYGNUM_LIBM_COMPAT_IEEE" : CYGNUM_LIBM_COMPATIBILITY == "XOPEN" ? "CYGNUM_LIBM_COMPAT_XOPEN" : CYGNUM_LIBM_COMPATIBILITY == "SVID" ? "CYGNUM_LIBM_COMPAT_SVID" : "<undefined>" + # option CYGNUM_LIBM_COMPAT_DEFAULT + # Calculated: CYGNUM_LIBM_COMPATIBILITY == "POSIX" ? "CYGNUM_LIBM_COMPAT_POSIX" : CYGNUM_LIBM_COMPATIBILITY == "IEEE" ? "CYGNUM_LIBM_COMPAT_IEEE" : CYGNUM_LIBM_COMPATIBILITY == "XOPEN" ? "CYGNUM_LIBM_COMPAT_XOPEN" : CYGNUM_LIBM_COMPATIBILITY == "SVID" ? "CYGNUM_LIBM_COMPAT_SVID" : "<undefined>" + # option CYGNUM_LIBM_COMPAT_DEFAULT + # Calculated: CYGNUM_LIBM_COMPATIBILITY == "POSIX" ? "CYGNUM_LIBM_COMPAT_POSIX" : CYGNUM_LIBM_COMPATIBILITY == "IEEE" ? "CYGNUM_LIBM_COMPAT_IEEE" : CYGNUM_LIBM_COMPATIBILITY == "XOPEN" ? "CYGNUM_LIBM_COMPAT_XOPEN" : CYGNUM_LIBM_COMPATIBILITY == "SVID" ? "CYGNUM_LIBM_COMPAT_SVID" : "<undefined>" + # option CYGNUM_LIBM_COMPAT_DEFAULT + # Calculated: CYGNUM_LIBM_COMPATIBILITY == "POSIX" ? "CYGNUM_LIBM_COMPAT_POSIX" : CYGNUM_LIBM_COMPATIBILITY == "IEEE" ? "CYGNUM_LIBM_COMPAT_IEEE" : CYGNUM_LIBM_COMPATIBILITY == "XOPEN" ? "CYGNUM_LIBM_COMPAT_XOPEN" : CYGNUM_LIBM_COMPATIBILITY == "SVID" ? "CYGNUM_LIBM_COMPAT_SVID" : "<undefined>" + # option CYGOPT_LIBM_COMPAT_POSIX_IEEE + # ActiveIf: CYGNUM_LIBM_COMPATIBILITY == "POSIX" +}; + +# > +# Numeric representation +# This option automatically defines the default compatibility +# mode for numeric representation in terms of the values used +# to set that mode at run-time. +# +cdl_option CYGNUM_LIBM_COMPAT_DEFAULT { + # Calculated value: CYGNUM_LIBM_COMPATIBILITY == "POSIX" ? "CYGNUM_LIBM_COMPAT_POSIX" : CYGNUM_LIBM_COMPATIBILITY == "IEEE" ? "CYGNUM_LIBM_COMPAT_IEEE" : CYGNUM_LIBM_COMPATIBILITY == "XOPEN" ? "CYGNUM_LIBM_COMPAT_XOPEN" : CYGNUM_LIBM_COMPATIBILITY == "SVID" ? "CYGNUM_LIBM_COMPAT_SVID" : "<undefined>" + # CYGNUM_LIBM_COMPATIBILITY == POSIX + # CYGNUM_LIBM_COMPATIBILITY == POSIX + # CYGNUM_LIBM_COMPATIBILITY == POSIX + # CYGNUM_LIBM_COMPATIBILITY == POSIX + # Flavor: data + # Current_value: CYGNUM_LIBM_COMPAT_POSIX +}; + +# POSIX return NaN for out-of-domain argument. +# Later POSIX specification states that functions +# may return either NaN (like IEEE), or implementation defined +# value when argument is out of domain. For backward compatibility +# default value is set to 0. +# +cdl_option CYGOPT_LIBM_COMPAT_POSIX_IEEE { + # ActiveIf constraint: CYGNUM_LIBM_COMPATIBILITY == "POSIX" + # CYGNUM_LIBM_COMPATIBILITY == POSIX + # --> 1 + + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# < +# SVID3-style scalb() +# SVID3 defined the scalb() function as double +# scalb(double, double) rather than double +# scalb(double, int) which is used by IBM, DEC, and +# probably others. Enabling this option chooses +# the (double, double) version. Note there is a +# function double scalbn(double, int) which is +# unaffected by this choice. +# +cdl_option CYGFUN_LIBM_SVID3_scalb { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Reduce namespace pollution +# If you do not want to use either the X/Open or +# SVID3 compatibility modes, you may want to define +# this option to reduce the chance of namespace +# pollution. This is particularly likely to occur +# here as these standards define symbols with +# names that often appear in applications, such as +# exception, DOMAIN, OVERFLOW, etc. If your +# application also used these names, it may cause +# problems. +# +cdl_option CYGSYM_LIBM_NO_XOPEN_SVID_NAMESPACE_POLLUTION { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 +}; + +# Output to stderr for math errors +# The SVID3 standard says that error +# messages should be output on the stderr console +# output stream. This option allows this ability +# to be explicitly controlled. However, this still +# only has an effect in SVID3 compatibility mode. +# +cdl_option CYGSEM_LIBM_USE_STDERR { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGSEM_LIBM_COMPAT_IEEE_ONLY + # CYGSEM_LIBM_COMPAT_IEEE_ONLY == 0 + # --> 1 + # Requires: CYGPKG_LIBC_STDIO + # CYGPKG_LIBC_STDIO == current + # --> 1 +}; + +# < +# Thread safety +# This option controls whether the C library has +# support for thread safe operation in general. +# This requires eCos kernel support for per-thread +# data, and adjustment of the stack limit. +# +cdl_component CYGPKG_LIBM_THREAD_SAFETY { + # There is no associated value. +}; + +# > +# Compatibility mode setting +# This option makes the setting of the compatiblity +# mode be a per-thread property. This directly +# implies that it also becomes thread-safe. +# +cdl_option CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: !CYGSEM_LIBM_COMPAT_IEEE_ONLY + # CYGSEM_LIBM_COMPAT_IEEE_ONLY == 0 + # --> 1 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_LIBM_COMPATMODE_TRACE_LEVEL + # Requires: CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE +}; + +# gamma() and lgamma() +# This option makes the gamma() and lgamma() +# functions be thread-safe. Note that these +# functions are identical - they take the log of +# the absolute value of their argument. The sign +# of the argument is stored in a variable called +# signgam. Enabling this option makes signgam +# a per-thread variable. Note there are also +# gamma_r() and lgamma_r() alternatives that +# allow signgam to be passed in by reference as +# an argument. +# +cdl_option CYGSEM_LIBM_THREAD_SAFE_GAMMA_FUNCTIONS { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA == 1 + # --> 1 + + # The following properties are affected by this value + # option CYGNUM_LIBM_SIGNGAM_TRACE_LEVEL + # Requires: CYGSEM_LIBM_THREAD_SAFE_GAMMA_FUNCTIONS +}; + +# < +# Tracing output levels in math library +# Tracing support is useful for debugging. Some +# Math library modules can be configured with +# different levels of tracing verbosity. These +# levels can be configured here. +# +cdl_component CYGPKG_LIBM_TRACE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Requires: CYGDBG_USE_TRACING + # CYGDBG_USE_TRACING == 0 + # --> 0 +}; + +# > +# Compatibility mode get/set +# Trace level for debugging the getting and +# setting of the compatibility mode when it is +# configured to be thread-safe. +# +cdl_option CYGNUM_LIBM_COMPATMODE_TRACE_LEVEL { + # This option is not active + # The parent CYGPKG_LIBM_TRACE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 + # Requires: CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE + # CYGSEM_LIBM_THREAD_SAFE_COMPAT_MODE == 0 + # --> 0 +}; + +# signgam variable access +# Trace level for debugging all accesses to the +# signgam variable in thread-safe mode. +# +cdl_option CYGNUM_LIBM_SIGNGAM_TRACE_LEVEL { + # This option is not active + # The parent CYGPKG_LIBM_TRACE is disabled + + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 + # Requires: CYGSEM_LIBM_THREAD_SAFE_GAMMA_FUNCTIONS + # CYGSEM_LIBM_THREAD_SAFE_GAMMA_FUNCTIONS == 0 + # --> 0 +}; + +# < +# Bessel function limit of significance +# For the Bessel functions (j0(), j1(), jn(), +# y0(), y1(), yn()) this option defines the +# maximum absolute value of the ordinate +# before we assume total loss of significance. +# This number must be a floating-point number (e.g. +# contains a decimal point), and should be +# large. +# +cdl_option CYGNUM_LIBM_X_TLOSS { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 1.41484755040569E+16 + # value_source default + # Default value: 1.41484755040569E+16 + # Legal values: 1 to 1e308 +}; + +# Complex +# Complex library provides support for some basic operations +# on complex numbers as well as mathematical functions in +# complex domain. +# +cdl_component CYGPKG_COMPLEX { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 +}; + +# Math library build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_LIBM_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the math library. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_LIBM_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value -fno-strict-aliasing + # value_source default + # Default value: "-fno-strict-aliasing" . ((!CYGPKG_HAL_I386 && !CYGPKG_HAL_SYNTH_I386) ? "" : " -ffloat-store") + # CYGPKG_HAL_I386 (unknown) == 0 + # CYGPKG_HAL_SYNTH_I386 (unknown) == 0 + # --> -fno-strict-aliasing +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the math library. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_LIBM_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Math library tests +# this option specifies the set of tests for the math library. +# +cdl_option CYGPKG_LIBM_TESTS { + # Calculated value: "tests/vectors/acos tests/vectors/asin tests/vectors/cos tests/vectors/cosh tests/vectors/sin tests/vectors/sinh tests/vectors/atan tests/vectors/atan2 tests/vectors/tan tests/vectors/tanh tests/vectors/sqrt tests/vectors/pow tests/vectors/ceil tests/vectors/floor tests/vectors/fabs tests/vectors/fmod tests/vectors/frexp tests/vectors/ldexp tests/vectors/exp tests/vectors/log tests/vectors/log10 tests/vectors/acosf tests/vectors/asinf tests/vectors/cosf tests/vectors/coshf tests/vectors/sinf tests/vectors/sinhf tests/vectors/atanf tests/vectors/atan2f tests/vectors/tanf tests/vectors/tanhf tests/vectors/hypotf tests/vectors/sqrtf tests/vectors/powf tests/vectors/floorf tests/vectors/ceilf tests/vectors/fabsf tests/vectors/fmodf tests/vectors/frexpf tests/vectors/ldexpf tests/vectors/expf tests/vectors/logf tests/vectors/log10f " + # + # Flavor: data + # Current_value: tests/vectors/acos tests/vectors/asin tests/vectors/cos tests/vectors/cosh tests/vectors/sin tests/vectors/sinh tests/vectors/atan tests/vectors/atan2 tests/vectors/tan tests/vectors/tanh tests/vectors/sqrt tests/vectors/pow tests/vectors/ceil tests/vectors/floor tests/vectors/fabs tests/vectors/fmod tests/vectors/frexp tests/vectors/ldexp tests/vectors/exp tests/vectors/log tests/vectors/log10 tests/vectors/acosf tests/vectors/asinf tests/vectors/cosf tests/vectors/coshf tests/vectors/sinf tests/vectors/sinhf tests/vectors/atanf tests/vectors/atan2f tests/vectors/tanf tests/vectors/tanhf tests/vectors/hypotf tests/vectors/sqrtf tests/vectors/powf tests/vectors/floorf tests/vectors/ceilf tests/vectors/fabsf tests/vectors/fmodf tests/vectors/frexpf tests/vectors/ldexpf tests/vectors/expf tests/vectors/logf tests/vectors/log10f +}; + +# < +# < +# Wallclock device +# The wallclock device provides real time stamps, as opposed +# to the eCos kernel timers which typically just count the +# number of clock ticks since the hardware was powered up. +# Depending on the target platform this device may involve +# interacting with a suitable clock chip, or it may be +# emulated by using the kernel timers. +# +cdl_package CYGPKG_IO_WALLCLOCK { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + + # The following properties are affected by this value + # option CYGSEM_LIBC_TIME_TIME_WORKING + # Requires: CYGPKG_IO_WALLCLOCK + # option CYGSEM_LIBC_TIME_SETTIME_WORKING + # Requires: CYGPKG_IO_WALLCLOCK +}; + +# > +# Number of wallclock hardware implementations +# +cdl_interface CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGPKG_WALLCLOCK_EMULATE + # DefaultValue: 0 == CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS + # option CYGIMP_WALLCLOCK_NONE + # DefaultValue: !CYGPKG_KERNEL && 0 == CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS +}; + +# Number of wallclock implementations +# +cdl_interface CYGINT_WALLCLOCK_IMPLEMENTATIONS { + # Implemented by CYGPKG_WALLCLOCK_EMULATE, active, enabled + # Implemented by CYGIMP_WALLCLOCK_NONE, active, disabled + # This value cannot be modified here. + # Flavor: data + # Current_value: 1 + # Requires: 1 == CYGINT_WALLCLOCK_IMPLEMENTATIONS + # CYGINT_WALLCLOCK_IMPLEMENTATIONS == 1 + # --> 1 + + # The following properties are affected by this value + # interface CYGINT_WALLCLOCK_IMPLEMENTATIONS + # Requires: 1 == CYGINT_WALLCLOCK_IMPLEMENTATIONS +}; + +# Wallclock driver supports set/get mode +# +cdl_interface CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED { + # No options implement this inferface + # This value cannot be modified here. + # Flavor: data + # Current_value: 0 + + # The following properties are affected by this value + # option CYGSEM_WALLCLOCK_MODE + # DefaultValue: CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED ? "set_get" : "init_get" + # option CYGSEM_WALLCLOCK_MODE + # Requires: CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED || CYGSEM_WALLCLOCK_MODE == "init_get" +}; + +# Wallclock mode +# The wallclock driver can be used in one of two +# modes. Set/get mode allows time to be kept during power +# off (assuming there's a battery backed clock). Init/get +# mode is slightly smaller and can be used when there is no +# battery backed clock - in this mode time 0 is the time of +# the board power up. +# +cdl_option CYGSEM_WALLCLOCK_MODE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value init_get + # value_source default + # Default value: CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED ? "set_get" : "init_get" + # CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED == 0 + # --> init_get + # Legal values: "init_get" "set_get" + # Requires: CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED || CYGSEM_WALLCLOCK_MODE == "init_get" + # CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED == 0 + # CYGSEM_WALLCLOCK_MODE == init_get + # --> 1 + + # The following properties are affected by this value + # option CYGSEM_WALLCLOCK_MODE + # Requires: CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED || CYGSEM_WALLCLOCK_MODE == "init_get" + # option CYGSEM_WALLCLOCK_SET_GET_MODE + # Calculated: CYGSEM_WALLCLOCK_MODE == "set_get" ? 1 : 0 +}; + +# Wallclock set/get mode +# +cdl_option CYGSEM_WALLCLOCK_SET_GET_MODE { + # Calculated value: CYGSEM_WALLCLOCK_MODE == "set_get" ? 1 : 0 + # CYGSEM_WALLCLOCK_MODE == init_get + # Flavor: bool + # Current value: 0 +}; + +# Wallclock implementation +# Implementations of the wallclock device. +# +cdl_component CYGPKG_IO_WALLCLOCK_IMPLEMENTATION { + # There is no associated value. +}; + +# > +# Wallclock emulator +# When this option is enabled, a wallclock device will be +# emulated using the kernel real-time clock. +# +cdl_option CYGPKG_WALLCLOCK_EMULATE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 0 == CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS + # CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS == 0 + # --> 1 + # Requires: CYGPKG_KERNEL + # CYGPKG_KERNEL == current + # --> 1 +}; + +# No wallclock +# Disables the wallclock. +# +cdl_option CYGIMP_WALLCLOCK_NONE { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: !CYGPKG_KERNEL && 0 == CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS + # CYGPKG_KERNEL == current + # CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS == 0 + # --> 0 +}; + +# < +# Wallclock build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_IO_WALLCLOCK_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the wallclock device. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_IO_WALLCLOCK_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the wallclock device. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_IO_WALLCLOCK_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Wallclock tests +# This option specifies the set of tests for the +# wallclock device. +# +cdl_option CYGPKG_IO_WALLCLOCK_TESTS { + # Calculated value: CYGPKG_KERNEL ? "tests/wallclock tests/wallclock2" : "" + # CYGPKG_KERNEL == current + # Flavor: data + # Current_value: tests/wallclock tests/wallclock2 +}; + +# < +# < +# Common error code support +# This package contains the common list of error and +# status codes. It is held centrally to allow +# packages to interchange error codes and status +# codes in a common way, rather than each package +# having its own conventions for error/status +# reporting. The error codes are modelled on the +# POSIX style naming e.g. EINVAL etc. This package +# also provides the standard strerror() function to +# convert error codes to textual representation, as +# well as an implementation of the errno idiom. +# +cdl_package CYGPKG_ERROR { + # Packages cannot be added or removed, nor can their version be changed, + # simply by editing their value. Instead the appropriate configuration + # should be used to perform these actions. + + # This value cannot be modified here. + # Flavor: booldata + # Current value: 1 current + # Requires: CYGBLD_ISO_ERRNO_CODES_HEADER == "<cyg/error/codes.h>" + # CYGBLD_ISO_ERRNO_CODES_HEADER == <cyg/error/codes.h> + # --> 1 + + # The following properties are affected by this value + # package CYGPKG_IO + # Requires: CYGPKG_ERROR + # package CYGPKG_IO_SERIAL + # Requires: CYGPKG_ERROR + # package CYGPKG_IO_SERIAL_CORTEXM_STM32 + # Requires: CYGPKG_ERROR +}; + +# > +# errno variable +# This package controls the behaviour of the +# errno variable (or more strictly, expression) +# from <errno.h>. +# +cdl_component CYGPKG_ERROR_ERRNO { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGBLD_ISO_ERRNO_HEADER == "<cyg/error/errno.h>" + # CYGBLD_ISO_ERRNO_HEADER == <cyg/error/errno.h> + # --> 1 +}; + +# > +# Per-thread errno +# This option controls whether the standard error +# code reporting variable errno is a per-thread +# variable, rather than global. +# +cdl_option CYGSEM_ERROR_PER_THREAD_ERRNO { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGVAR_KERNEL_THREADS_DATA + # CYGVAR_KERNEL_THREADS_DATA == 1 + # --> 1 +}; + +# Tracing level +# Trace verbosity level for debugging the errno +# retrieval mechanism in errno.cxx. Increase this +# value to get additional trace output. +# +cdl_option CYGNUM_ERROR_ERRNO_TRACE_LEVEL { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value 0 + # value_source default + # Default value: 0 + # Legal values: 0 to 1 +}; + +# < +# strerror function +# This package controls the presence and behaviour of the +# strerror() function from <string.h> +# +cdl_option CYGPKG_ERROR_STRERROR { + # Flavor: bool + # No user value, uncomment the following line to provide one. + # user_value 1 + # value_source default + # Default value: 1 + # Requires: CYGBLD_ISO_STRERROR_HEADER == "<cyg/error/strerror.h>" + # CYGBLD_ISO_STRERROR_HEADER == <cyg/error/strerror.h> + # --> 1 +}; + +# Error package build options +# Package specific build options including control over +# compiler flags used only in building this package, +# and details of which tests are built. +# +cdl_component CYGPKG_ERROR_OPTIONS { + # There is no associated value. +}; + +# > +# Additional compiler flags +# This option modifies the set of compiler flags for +# building the error package. These flags are used in addition +# to the set of global flags. +# +cdl_option CYGPKG_ERROR_CFLAGS_ADD { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# Suppressed compiler flags +# This option modifies the set of compiler flags for +# building the error package. These flags are removed from +# the set of global flags if present. +# +cdl_option CYGPKG_ERROR_CFLAGS_REMOVE { + # Flavor: data + # No user value, uncomment the following line to provide one. + # user_value "" + # value_source default + # Default value: "" +}; + +# < +# < +# < + diff --git a/firmware/ecosenv.sh b/firmware/ecosenv.sh new file mode 100644 index 0000000..a3cc4ff --- /dev/null +++ b/firmware/ecosenv.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +I4EZS_USER_CONFIG="${HOME}/.config/i4ezs/i4ezs-ecosenv-stm32.sh" + + # allow user override +if [[ -f "$I4EZS_USER_CONFIG" ]]; then + source "$I4EZS_USER_CONFIG" +elif [ -e ~/i4ezs-ecosenv-stm32.sh ]; then + echo "WARNING: Found old i4ezs config file at ~/i4ezs-ecosenv-stm32.sh. Please migrate to $I4EZS_USER_CONFIG." + source ~/i4ezs-ecosenv-stm32.sh +else + EZS_BASE=/proj/i4ezs/stm32/ +fi + +# Ensure that EZS_BASE is exported. +export EZS_BASE + + +#################### NO CHANGES BELOW SHOULD BE NEEDED #################### + +EZS_UID=$$ ; export EZS_UID +EZS_COMPILER_DIR=$EZS_BASE/gcc-arm-none-eabi ; export EZS_COMPILER_DIR +EZS_TOOLS_DIR=$EZS_BASE/tools; export EZS_TOOLS_DIR +EZS_CMAKE_MODULE_DIR=$EZS_BASE/tools ; export EZS_CMAKE_MODULE_DIR +EZS_LIBOPENCM3_DIR=$EZS_BASE/libopencm3 ; export EZS_LIBOPENCM3_DIR +ECOS_BASE_DIR=$EZS_BASE/ecos +ECOS_REPOSITORY=$ECOS_BASE_DIR/packages ; export ECOS_REPOSITORY + +PATH=$EZS_TOOLS_DIR:$EZS_COMPILER_DIR/bin:$PATH; export PATH diff --git a/firmware/gcbuf.c b/firmware/gcbuf.c new file mode 100644 index 0000000..119ec08 --- /dev/null +++ b/firmware/gcbuf.c @@ -0,0 +1,47 @@ +#include "gcbuf.h" +#include <stdint.h> +#include <stdlib.h> +#include <cyg/hal/hal_arch.h> +#include <libopencm3/cm3/sync.h> + +int initBuffer(gcbuf* buf, gcode* array, uint16_t size) { + if (size == 0) return ERR_BUFFER_INV_SIZE; + buf->size = size; + buf->array = array; + buf->arrayEnd = buf->array + size; + buf->count = 0; + buf->nextToRead = buf->array; + buf->nextToWrite = buf->array; + return 0; +} + +gcode* readIntoBuffer(gcbuf* buf, char string[]) { + while (1) { + mutex_lock(&(buf->lock)); + if (buf->count < buf->size) { + gcode* ret = buf->nextToWrite; + readGcode(buf->nextToWrite, string); + (buf->nextToWrite)++; + (buf->count)++; + if (buf->nextToWrite >= buf->arrayEnd) buf->nextToWrite = buf->array; + mutex_unlock(&(buf->lock)); + return ret; + } + mutex_unlock(&(buf->lock)); + } +} + +gcode* readFromBuffer(gcbuf* buf) { + while (1) { + mutex_lock(&(buf->lock)); + if (buf->count > 0) { + gcode* ret = buf->nextToRead; + (buf->nextToRead)++; + (buf->count)--; + if (buf->nextToRead >= buf->arrayEnd) buf->nextToRead = buf->array; + mutex_unlock(&(buf->lock)); + return ret; + } + mutex_unlock(&(buf->lock)); + } +} diff --git a/firmware/gcbuf.h b/firmware/gcbuf.h new file mode 100644 index 0000000..7a5535c --- /dev/null +++ b/firmware/gcbuf.h @@ -0,0 +1,32 @@ +#ifndef HEADER_BUFFER +#define HEADER_BUFFER + +#include <stdint.h> +#include <cyg/hal/hal_arch.h> +#include <libopencm3/cm3/sync.h> +#include "gcode.h" + +typedef struct { + uint16_t size; + gcode* array; + gcode* arrayEnd; + mutex_t lock; + uint16_t volatile count; + gcode* volatile nextToRead; + gcode* volatile nextToWrite; +} gcbuf; + +// Buffers must not have size 0 +#define ERR_BUFFER_INV_SIZE 1 + +// Initializes a buffer on memory at array, so it can manage `size` gcodes +// Returns 0 on success, an error code otherwise +int initBuffer(gcbuf* buf, gcode* array, uint16_t size); + +// Use readGcode from gcode.c to fill the first available gcode with new info. Blocks if full until a gcode is available +gcode* readIntoBuffer(gcbuf* buf, char string[]); + +// Get a gcode from the buffer. Blocks if empty until a gcode is available +gcode* readFromBuffer(gcbuf* buf); + +#endif diff --git a/firmware/gcode.c b/firmware/gcode.c new file mode 100644 index 0000000..6b335b0 --- /dev/null +++ b/firmware/gcode.c @@ -0,0 +1,64 @@ +#include "gcode.h" +#include <stdlib.h> +#include <stdint.h> +#include <stdbool.h> +#include <string.h> + +int readIntValueFromString(char* string) { + int ret = 0; + bool minus = *string == '-'; + if (minus) string++; + while (*string != 0) ret = ret * 10 + (*(string++) - '0'); + return minus ? -ret : ret; +} +double readDoubleValueFromString(char* string) { + double ret = 0; + uint32_t decimalDiv = 0; + bool minus = *string == '-'; + if (minus) string++; + while (*string != 0) { + if (*string == '.') { + decimalDiv = 1; + string++; + } else { + ret = ret * 10 + (*(string++) - '0'); + decimalDiv *= 10; + } + } + if (decimalDiv > 1) ret /= decimalDiv; + return minus ? -ret : ret; +} + +int readGcode(gcode* gc, char string[]) { + // TODO Mcodes and Line numbers and checksums + + gc->operationId = 0; + gc->paramCount = 0; + + char* hasIgnoreChar = strchr(string, ';'); + if (hasIgnoreChar == NULL) hasIgnoreChar = strchr(string, '\n'); + if (hasIgnoreChar != NULL) *hasIgnoreChar = 0; + + char* block = strtok(string, " "); + gc->operationCategory = *block; + int operationId = readIntValueFromString(block+1); + if (operationId < 0 || operationId > 999) return ERR_GCODE_OP_INV; + gc->operationId = operationId; + + while ((block = strtok(NULL, " ")) != NULL) { + gc->paramKeys[gc->paramCount] = *block; + gc->paramValues[gc->paramCount] = readDoubleValueFromString(block+1); + (gc->paramCount)++; + } + + return 0; +} + +double* getGcodeParam(gcode* gc, char key) { + uint8_t i = 0; + while (i < gc->paramCount) { + if (gc->paramKeys[i] == key) return (double*) &(gc->paramValues[i]); + i++; + } + return NULL; +} diff --git a/firmware/gcode.h b/firmware/gcode.h new file mode 100644 index 0000000..f7eda57 --- /dev/null +++ b/firmware/gcode.h @@ -0,0 +1,26 @@ +#ifndef HEADER_GCODE +#define HEADER_GCODE + +#include <stdint.h> + +typedef struct { + char volatile operationCategory; + uint16_t volatile operationId; + uint8_t volatile paramCount; + char volatile paramKeys[16]; + double volatile paramValues[16]; +} gcode; + +// Gcodes must start with G +#define ERR_GCODE_NO_G 1 +// Gcode operation ID negative or too high (0 to 999) +#define ERR_GCODE_OP_INV 2 + +// Reads a gcode from a string, can be finished by a newline. This does not check whether the gcode is semantically valid, only syntactically +// Returns 0 on success, or an error code as defined above otherwise +int readGcode(gcode* gc, char string[]); + +// Get a pointer to the parameter saved under the given key in a gcode, or NULL if it was not specified +double* getGcodeParam(gcode* gc, char key); + +#endif diff --git a/firmware/hello.c b/firmware/hello.c new file mode 100644 index 0000000..657701b --- /dev/null +++ b/firmware/hello.c @@ -0,0 +1,618 @@ +#include <cyg/hal/hal_arch.h> +#include <cyg/kernel/kapi.h> +#include <cyg/infra/diag.h> + +/*#include <libopencm3/stm32/f4/gpio.h>*/ +#include <libopencm3/stm32/gpio.h> +#include <libopencm3/stm32/rcc.h> +#include <libopencm3/stm32/adc.h> +#include <libopencm3/cm3/nvic.h> +#include <libopencm3/stm32/exti.h> +#include <libopencm3/cm3/sync.h> + +#include <stdint.h> +#include <stdlib.h> +#include <stdio.h> +#include <math.h> +#include <iso646.h> + +#include "ezs_adc.h" +#include "ezs_dac.h" +#include "ezs_gpio.h" +#include "ezs_io.h" +#include "ezs_delay.h" +#include "ezs_counter.h" +#include "ezs_serial.h" + +// libDIY includes +#include "diy_gpio.h" +#include "diy_adc.h" +#include "diy_tim.h" +#include "diy_int.h" +#include "diy_gparser.h" + +#include "motor.h" +#include "axis.h" +#include "gcbuf.h" +#include "gcode.h" + +#define GCBUF_SIZE 512 +#define STACKSIZE CYGNUM_HAL_STACK_SIZE_MINIMUM+1024 + +/* Serial buffer data */ +#define SERIAL_BUFFER_LENGTH 128 +static char s_serial_buffer[SERIAL_BUFFER_LENGTH]; +static uint8_t s_serial_position; +static volatile uint8_t serial_input; // Save a received character +static volatile uint8_t s_com_finished; // Flag to see if a command has completed + +/* Serial ISR data */ +#define SERIAL_IRQ CYGNUM_HAL_INTERRUPT_UART2 +static cyg_interrupt serial_intr; +static cyg_handle_t serial_isr_handle; + +static void serial_dsr_handler(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data); +static cyg_uint32 serial_isr_handler(cyg_vector_t vector, cyg_addrword_t data); + +#define X_AXIS_PORT GPIOD +#define X_AXIS_PIN1 GPIO0 +#define X_AXIS_PIN2 GPIO1 +#define X_AXIS_PIN3 GPIO2 +#define X_AXIS_PIN4 GPIO3 +#define X_ENDSTOP_PORT GPIOB +#define X_ENDSTOP_PIN GPIO0 + +#define Y_AXIS_PORT GPIOD +#define Y_AXIS_PIN1 GPIO4 +#define Y_AXIS_PIN2 GPIO5 +#define Y_AXIS_PIN3 GPIO6 +#define Y_AXIS_PIN4 GPIO7 +#define Y_ENDSTOP_PORT GPIOB +#define Y_ENDSTOP_PIN GPIO1 + +#define Z_AXIS_PORT GPIOB +#define Z_AXIS_PIN1 GPIO3 +#define Z_AXIS_PIN2 GPIO4 +#define Z_AXIS_PIN3 GPIO5 +#define Z_AXIS_PIN4 GPIO6 +#define Z_ENDSTOP_PORT GPIOC +#define Z_ENDSTOP_PIN GPIO5 + +#define E_AXIS_PORT GPIOA +#define E_AXIS_PIN1 GPIO4 +#define E_AXIS_PIN2 GPIO5 +#define E_AXIS_PIN3 GPIO6 +#define E_AXIS_PIN4 GPIO7 + +#define TEMP_SENSOR_PORT GPIOC +#define TEMP_SENSOR_PIN GPIO1 +#define TEMP_HOTEND_PORT GPIOA +#define TEMP_HOTEND_PIN GPIO1 +#define TEMP_R 1e5 +#define TEMP_B 4267 +#define TEMP_T 25 +#define TEMP_TOLERANCE 5 +#define TEMP_EXP_FACTOR 0.1 +#define TEMP_DANGER 150.0 +#define TEMP_KP 5.0 +#define TEMP_KI 0.0 +#define TEMP_KI_LIMIT 1000 +#define TEMP_KD 0.0 + +static void setup_motor_gpio(uint32_t port, uint16_t pin0, uint16_t pin1, uint16_t pin2, uint16_t pin3) { + diy_gpio_config_t stepper_pin_config; + stepper_pin_config.port = port; + stepper_pin_config.mode = GPIO_MODE_OUTPUT; + stepper_pin_config.type = GPIO_OTYPE_PP; + stepper_pin_config.speed = GPIO_OSPEED_50MHZ; + stepper_pin_config.pull_up_down = GPIO_PUPD_NONE; + stepper_pin_config.alt_func = 0; + + diy_gpio_init(&stepper_pin_config, pin0 | pin1 | pin2 | pin3); + diy_gpio_clear_pins(port, pin1 | pin2 | pin3); + diy_gpio_set_pins(port, pin0); +} + +static void setup_endstop_gpio(uint32_t port, uint16_t pin) { + diy_gpio_config_t config; + config.port = port; + config.mode = GPIO_MODE_INPUT; + config.pull_up_down = GPIO_PUPD_PULLDOWN; + diy_gpio_init(&config, pin); +} + +static cyg_uint8 stack_axis[STACKSIZE]; +static cyg_handle_t handle_axis; +static cyg_thread threaddata_axis; +static axis axis_x; +static axis axis_y; +static axis axis_z; +static axis axis_e; +static volatile bool allAxesFinished; +static volatile bool axisReady; +void thread_axis(cyg_addrword_t arg) +{ + ezs_printf("// Initializing X Axis...\n"); + + motor mot_x; + setup_motor_gpio(X_AXIS_PORT, X_AXIS_PIN1, X_AXIS_PIN2, X_AXIS_PIN3, X_AXIS_PIN4); + setup_endstop_gpio(X_ENDSTOP_PORT, X_ENDSTOP_PIN); + setMotorValues_28BYJ48(&mot_x, X_AXIS_PORT, X_AXIS_PIN1, X_AXIS_PIN2, X_AXIS_PIN3, X_AXIS_PIN4); + setAxisValues_T25(&axis_x, &mot_x, 20); + axis_x.mmPerStep *= 1.01875; + axis_x.stepsPerMm /= 1.01875; + axis_x.maxMmPerMin = 600.0; + axis_x.endstopPort = X_ENDSTOP_PORT; + axis_x.endstopPin = X_ENDSTOP_PIN; + + ezs_printf("// Initializing Y Axis...\n"); + + motor mot_y; + setup_motor_gpio(Y_AXIS_PORT, Y_AXIS_PIN1, Y_AXIS_PIN2, Y_AXIS_PIN3, Y_AXIS_PIN4); + setup_endstop_gpio(Y_ENDSTOP_PORT, Y_ENDSTOP_PIN); + setMotorValues_28BYJ48(&mot_y, Y_AXIS_PORT, Y_AXIS_PIN1, Y_AXIS_PIN2, Y_AXIS_PIN3, Y_AXIS_PIN4); + setAxisValues_T25(&axis_y, &mot_y, 20); + axis_y.mmPerStep *= 1.0125; + axis_y.stepsPerMm /= 1.0125; + axis_y.maxMmPerMin = 600.0; // could actually be 680 + axis_y.homePos = 100.0; + axis_y.endstopPort = Y_ENDSTOP_PORT; + axis_y.endstopPin = Y_ENDSTOP_PIN; + + ezs_printf("// Initializing Z Axis...\n"); + + motor mot_z; + setup_motor_gpio(Z_AXIS_PORT, Z_AXIS_PIN1, Z_AXIS_PIN2, Z_AXIS_PIN3, Z_AXIS_PIN4); + setup_endstop_gpio(Z_ENDSTOP_PORT, Z_ENDSTOP_PIN); + setMotorValues_28BYJ48(&mot_z, Z_AXIS_PORT, Z_AXIS_PIN1, Z_AXIS_PIN2, Z_AXIS_PIN3, Z_AXIS_PIN4); + setAxisValues_M5(&axis_z, &mot_z); + axis_z.maxMmPerMin = 10.0; + axis_z.isReversed = true; + axis_z.endstopPort = Z_ENDSTOP_PORT; + axis_z.endstopPin = Z_ENDSTOP_PIN; + + ezs_printf("// Initializing Extruder Axis...\n"); + + motor mot_e; + setup_motor_gpio(E_AXIS_PORT, E_AXIS_PIN1, E_AXIS_PIN2, E_AXIS_PIN3, E_AXIS_PIN4); + setMotorValues_28BYJ48(&mot_e, E_AXIS_PORT, E_AXIS_PIN1, E_AXIS_PIN2, E_AXIS_PIN3, E_AXIS_PIN4); + setAxisValues_extruderBolt(&axis_e, &mot_e); + axis_e.maxMmPerMin = 60.0; + axis_e.mmPerStep /= 1.064516129; + axis_e.stepsPerMm *= 1.064516129; + axis_e.isReversed = true; + + ezs_printf("// Axes ready.\n"); + axisReady = true; + + uint32_t wait_x = 1e6; + uint32_t wait_y = 1e6; + uint32_t wait_z = 1e6; + uint32_t wait_e = 1e6; + + while(1) { + if (wait_x == 0 || wait_x == 1e6) wait_x = updateAxis(&axis_x); + uint32_t minimumWait = wait_x; + if (wait_y == 0 || wait_y == 1e6) wait_y = updateAxis(&axis_y); + if (wait_y < minimumWait) minimumWait = wait_y; + if (wait_z == 0 || wait_z == 1e6) wait_z = updateAxis(&axis_z); + if (wait_z < minimumWait) minimumWait = wait_z; + if (wait_e == 0 || wait_e == 1e6) wait_e = updateAxis(&axis_e); + if (wait_e < minimumWait) minimumWait = wait_e; + + if (wait_x != 1e6) wait_x -= minimumWait; + if (wait_y != 1e6) wait_y -= minimumWait; + if (wait_z != 1e6) wait_z -= minimumWait; + if (wait_e != 1e6) wait_e -= minimumWait; + + allAxesFinished = axisIsFinished(&axis_x) && axisIsFinished(&axis_y) && axisIsFinished(&axis_z) && axisIsFinished(&axis_e); + ezs_delay_us(minimumWait); + } +} + +static cyg_uint8 stack_hotend[STACKSIZE]; +static cyg_handle_t handle_hotend; +static cyg_thread threaddata_hotend; +static volatile double targetTemp; +static volatile double lastTemp; +static uint8_t tempInToleranceFor; +static volatile bool tempIsStable; +void thread_hotend(cyg_addrword_t arg) +{ + double pidErrorSum = 0; + double pidLastError = 0; + uint32_t avg = 0; + + ezs_printf("// Initializing thermistor...\n"); + + uint16_t adc_pin = TEMP_SENSOR_PIN; + diy_gpio_config_t adc_pin_config; + adc_pin_config.port = TEMP_SENSOR_PORT; + adc_pin_config.mode = GPIO_MODE_ANALOG; + adc_pin_config.type = 0; // Not necessary + adc_pin_config.speed = GPIO_OSPEED_50MHZ; // Not Necessary + adc_pin_config.pull_up_down = GPIO_PUPD_NONE; + adc_pin_config.alt_func = 0; + + diy_gpio_init(&adc_pin_config, adc_pin); + // Init ADC + diy_adc_config_t adc_config; + uint8_t channels[1] = {ADC_CHANNEL11}; + adc_config.adc = ADC1; + adc_config.sample_time = ADC_SMPR_SMP_3CYC; // Sample ADC channel every 3 cycles + adc_config.prescaler = 0; // APB2 clock is 100MHz + + diy_adc_init(&adc_config, channels, 1); + ezs_delay_us(3e3); // Wait 3ms for adc stabilization + + ezs_printf("// Initializing Hotend PWM...\n"); + + diy_gpio_config_t config; + config.port = (uint32_t) TEMP_HOTEND_PORT; + config.mode = GPIO_MODE_AF; + config.pull_up_down = GPIO_PUPD_NONE; + config.alt_func = GPIO_AF1; + diy_gpio_init(&config, TEMP_HOTEND_PIN); + + diy_tim_config_t tim_config; + tim_config.timer = (uint32_t) TIM2; + tim_config.clock_div = TIM_CR1_CKD_CK_INT ; + tim_config.alignment = TIM_CR1_CMS_EDGE ; + tim_config.count_direction = TIM_CR1_DIR_UP; + tim_config.period = 1000; + diy_tim_init(&tim_config); + + diy_tim_channel_config_t timchan_config; + timchan_config.channel = TIM_OC2; + timchan_config.mode = TIM_OCM_PWM1; + timchan_config.polarity = TIM_CCER_CCxNP_HIGH; + timchan_config.compare_value = 0; + diy_tim_channel_init(&timchan_config, (uint32_t) TIM2); + + diy_tim_start((uint32_t) TIM2); + diy_tim_channel_start((uint32_t) TIM2, TIM_OC2); + + ezs_printf("// Temperature Control ready.\n"); + + while (!axisReady) {} + ezs_printf("// Ready.\nstart\n"); + + while (1) { + uint16_t destination[1]; + diy_adc_read(ADC1, channels, destination, 1); + if (avg == 0) avg = destination[0]; + else avg = avg * (1.0 - TEMP_EXP_FACTOR) + destination[0] * TEMP_EXP_FACTOR; + + double resistance = (TEMP_R * 4096.0) / avg - TEMP_R; + double tempInvert = (1 / 295.15) + (1.0 / TEMP_B) * log(resistance / TEMP_R); + double temp = 1 / tempInvert; + double result = (temp-295.15)+TEMP_T; + double e = targetTemp - result; + + uint16_t pwm = 0; + if (result < TEMP_DANGER) { + pidErrorSum += e; + if (pidErrorSum > TEMP_KI_LIMIT) pidErrorSum = TEMP_KI_LIMIT; + else if (pidErrorSum < -TEMP_KI_LIMIT) pidErrorSum = -TEMP_KI_LIMIT; + double prop_part = TEMP_KP * e; + double int_part = TEMP_KI * pidErrorSum; + double diff_part = TEMP_KD * (e - pidLastError); + int pid = prop_part + int_part + diff_part; + if (pid > 300) pid = 300; + else if (pid < 0) pid = 0; + pwm = pid; + } else { + pidErrorSum = 0; + } + pidLastError = e; + diy_tim_channel_set_compare_value((uint32_t) TIM2, TIM_OC2, pwm); + + // If absolute temperature error has been <= TEMP_TOLERANCE for 10s, it's stable + if (fabs(e) <= TEMP_TOLERANCE) { + if (!tempIsStable) { + tempInToleranceFor++; + if (tempInToleranceFor >= 100) tempIsStable = true; + } + } else { + tempInToleranceFor = 0; + tempIsStable = false; + } + lastTemp = result; + ezs_delay_us(1e5); + } +} + +static cyg_uint8 stack_gcodereader[STACKSIZE]; +static cyg_handle_t handle_gcodereader; +static cyg_thread threaddata_gcodereader; +static gcbuf buffer; +static gcode gcarray[GCBUF_SIZE]; +void thread_gcodereader(cyg_addrword_t arg) +{ + while(1){ + if(s_com_finished){ + gcode* gc = readIntoBuffer(&buffer, s_serial_buffer); + ezs_printf("// Reading Gcode %c%d\n", gc->operationCategory, gc->operationId); + s_com_finished = 0; + if (gc->operationCategory == 'G' && + ((gc->operationId >= 0 && gc->operationId <= 3) || + (gc->operationId >= 28 && gc->operationId <= 32))) { + // Commands G0 to G3 and G28 to G32 are buffered, recieve another command right away + ezs_printf("ok\n"); + } + } + } +} + +static cyg_uint8 stack_gcodeexecutor[STACKSIZE]; +static cyg_handle_t handle_gcodeexecutor; +static cyg_thread threaddata_gcodeexecutor; +static bool relativeMoveMode; +static double lastFeedRate; +void thread_gcodeexecutor(cyg_addrword_t arg) +{ + while (1) { + gcode* gc = readFromBuffer(&buffer); + ezs_printf("// Executing Gcode %c%d\n", gc->operationCategory, gc->operationId); + + if (gc->operationCategory == 'G') { + if (gc->operationId == 0 || gc->operationId == 1) { + // G0 & G1: Move (just interpret them the same way) + // Implementation differences: + // - No feed rate acceleration (is instantly set to target speed) + // - No endpoint sensing + double* xParam = getGcodeParam(gc, 'X'); + double* yParam = getGcodeParam(gc, 'Y'); + double* zParam = getGcodeParam(gc, 'Z'); + double* eParam = getGcodeParam(gc, 'E'); + double* fParam = getGcodeParam(gc, 'F'); + + double xTarget = axis_x.lastPosMm, + yTarget = axis_y.lastPosMm, + zTarget = axis_z.lastPosMm, + xRel = 0.0, yRel = 0.0, zRel = 0.0, eRel = 0.0, + mmPerMin = lastFeedRate; + + if (relativeMoveMode) { + if (xParam != NULL) { + xRel = *xParam; + xTarget += xRel; + } + if (yParam != NULL) { + yRel = *yParam; + yTarget += yRel; + } + if (zParam != NULL) { + zRel = *zParam; + zTarget += zRel; + } + } else { + if (xParam != NULL) { + xRel = *xParam - xTarget; + xTarget = *xParam; + } + if (yParam != NULL) { + yRel = *yParam - yTarget; + yTarget = *yParam; + } + if (zParam != NULL) { + zRel = *zParam - zTarget; + zTarget = *zParam; + } + } + + if (eParam != NULL) { + eRel = *eParam; + } + + if (fParam != NULL) { + mmPerMin = *fParam; + lastFeedRate = mmPerMin; + } + + double vectorLength = sqrt(xRel * xRel + yRel * yRel + zRel * zRel); + if (vectorLength == 0.0) vectorLength = 0.0001; + double xSpeed = fabs(mmPerMin * (xRel / vectorLength)); + double ySpeed = fabs(mmPerMin * (yRel / vectorLength)); + double zSpeed = fabs(mmPerMin * (zRel / vectorLength)); + double eSpeed = fabs(mmPerMin * (eRel / vectorLength)); + + double lowestFactor = 1.0; + if (xRel != 0.0) { + double factor = axis_x.maxMmPerMin / xSpeed; + if (factor < lowestFactor) lowestFactor = factor; + } + if (yRel != 0.0) { + double factor = axis_y.maxMmPerMin / ySpeed; + if (factor < lowestFactor) lowestFactor = factor; + } + if (zRel != 0.0) { + double factor = axis_z.maxMmPerMin / zSpeed; + if (factor < lowestFactor) lowestFactor = factor; + } + if (eRel != 0.0) { + double factor = axis_e.maxMmPerMin / eSpeed; + if (factor < lowestFactor) lowestFactor = factor; + } + + if (xRel != 0.0) setAxisTarget(&axis_x, xTarget, xSpeed * lowestFactor); + if (yRel != 0.0) setAxisTarget(&axis_y, yTarget, ySpeed * lowestFactor); + if (zRel != 0.0) setAxisTarget(&axis_z, zTarget, zSpeed * lowestFactor); + if (eRel != 0.0) setAxisTarget(&axis_e, eRel, eSpeed * lowestFactor); + + allAxesFinished = false; + while (!allAxesFinished) {} + } else if (gc->operationId == 4) { + // G4: Dwell + double* param = getGcodeParam(gc, 'P'); + if (param != NULL) { + ezs_delay_us((uint32_t)param * 1e3); + } else { + double* param = getGcodeParam(gc, 'S'); + if (param != NULL) { + ezs_delay_us((uint32_t)param * 1e6); + } + } + ezs_printf("ok\n"); + } else if (gc->operationId == 10) { + // G10: Retract + setAxisTarget(&axis_e, -5, axis_e.maxMmPerMin); + allAxesFinished = false; + while (!allAxesFinished) {} + ezs_printf("ok\n"); + } else if (gc->operationId == 11) { + // G11: Unretract + setAxisTarget(&axis_e, 5, axis_e.maxMmPerMin); + allAxesFinished = false; + while (!allAxesFinished) {} + ezs_printf("ok\n"); + } else if (gc->operationId == 28) { + // G28: Move to Home + bool homeX = getGcodeParam(gc, 'X') != NULL; + bool homeY = getGcodeParam(gc, 'Y') != NULL; + bool homeZ = getGcodeParam(gc, 'Z') != NULL; + bool homeAll = gc->paramCount == 0; + if (homeAll || homeX) homeAxis(&axis_x); + if (homeAll || homeY) homeAxis(&axis_y); + if (homeAll || homeZ) homeAxis(&axis_z); + } else if (gc->operationId == 90) { + // G90: Set to Absolute Positioning + relativeMoveMode = false; + ezs_printf("ok\n"); + } else if (gc->operationId == 91) { + // G90: Set to Relative Positioning + relativeMoveMode = true; + ezs_printf("ok\n"); + } else { + ezs_printf("!! Unsupported Gcode %c%d\n", gc->operationCategory, gc->operationId); + } + } else if (gc->operationCategory == 'M') { + if (gc->operationId == 82) { + // M82: Set Extruder axis to absolute + axis_e.isRelative = false; + ezs_printf("ok\n"); + } else if (gc->operationId == 83) { + // M82: Set Extruder axis to relative + axis_e.isRelative = true; + ezs_printf("ok\n"); + } else if (gc->operationId == 104) { + // M104: Set Extruder temperature + targetTemp = *getGcodeParam(gc, 'S'); + ezs_printf("ok\n"); + } else if (gc->operationId == 105) { + // M105: Get Extruder temperature + ezs_printf("ok T:%.1f B:-300.0\n", lastTemp); + } else if (gc->operationId == 109) { + // M109: Set Extruder temperature and wait + targetTemp = *getGcodeParam(gc, 'S'); + tempIsStable = false; + while (!tempIsStable) {} + ezs_printf("ok\n"); + } else if (gc->operationId == 114) { + // M114: Get current position + ezs_printf("ok C: X:%.2f Y:%.2f Z:%.2f E:%.2f\n", + axis_x.lastPosMm, axis_y.lastPosMm, axis_z.lastPosMm, axis_e.lastPosMm); + } else if (gc->operationId == 117) { + // M114: Get zero position + // All axes count the total steps walked since the last home. When homed, it will save + // the result to the lastHomeRest attribute. This helps diagnosing step loss + ezs_printf("ok C: X:%d Y:%d Z:%d E:%d\n", + axis_x.lastHomeRest, axis_y.lastHomeRest, axis_z.lastHomeRest, axis_e.lastHomeRest); + } else { + ezs_printf("!! Unsupported Gcode %c%d\n", gc->operationCategory, gc->operationId); + } + } else if (gc->operationCategory == 'T') { + if (gc->operationId == 0) { + // T0: Activate Extruder and wait for temperature stabilisation + targetTemp = 100; + tempIsStable = false; + while (!tempIsStable) {} + ezs_printf("ok\n"); + } else { + // T[any other number]: Deactivate Extruder and wait for temperature stabilisation + targetTemp = 0; + tempIsStable = false; + while (!tempIsStable) {} + ezs_printf("ok\n"); + } + } else { + ezs_printf("!! Unsupported Gcode %c%d\n", gc->operationCategory, gc->operationId); + } + } +} + +void cyg_user_start(void) +{ + ezs_counter_init(); + ezs_serial_init(); + ezs_gpio_init(); + ezs_dac_init(); + + ezs_printf("// Hello, this is diyprint.\n"); + + ezs_printf("// Initializing gcode buffer...\n"); + + initBuffer(&buffer, gcarray, GCBUF_SIZE); + allAxesFinished = true; + relativeMoveMode = false; + lastFeedRate = 1e4; + targetTemp = 100.0; + axisReady = false; + + ezs_printf("// Creating threads...\n"); + + cyg_thread_create(7, &thread_axis, 0, "axis", stack_axis, STACKSIZE, &handle_axis, &threaddata_axis); + cyg_thread_create(11, &thread_hotend, 0, "hotend", stack_hotend, STACKSIZE, &handle_hotend, &threaddata_hotend); + cyg_thread_create(11, &thread_gcodeexecutor, 0, "gcode exec", stack_gcodeexecutor, STACKSIZE, &handle_gcodeexecutor, &threaddata_gcodeexecutor); + cyg_thread_create(11, &thread_gcodereader, 0, "gcode read", stack_gcodereader, STACKSIZE, &handle_gcodereader, &threaddata_gcodereader); + + ezs_printf("// Creating serial interrupt...\n"); + + cyg_interrupt_create(SERIAL_IRQ, + 1, + 0, + serial_isr_handler, + serial_dsr_handler, + &serial_isr_handle, + &serial_intr); + + cyg_interrupt_attach(serial_isr_handle); + cyg_interrupt_unmask(SERIAL_IRQ); + + ezs_printf("// Starting threads...\n"); + + cyg_thread_resume(handle_axis); + cyg_thread_resume(handle_hotend); + cyg_thread_resume(handle_gcodereader); + cyg_thread_resume(handle_gcodeexecutor); + + // hotend ready thread is also responsible for sending "start" when all systems are ready +} + +// ISR for reading from serial port +static cyg_uint32 serial_isr_handler(cyg_vector_t vector, cyg_addrword_t data){ + if(ezs_serial_char_available()){ + serial_input = ezs_serial_getc(); + cyg_interrupt_acknowledge(vector); + return CYG_ISR_HANDLED | CYG_ISR_CALL_DSR; + } + else{ + return CYG_ISR_CALL_DSR; + } +} + +static void serial_dsr_handler(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data){ + if(s_serial_position >= SERIAL_BUFFER_LENGTH){ + s_serial_position = 0; + } + + s_serial_buffer[s_serial_position] = serial_input; + if(serial_input == '\n'){ + s_serial_position = 0; + s_com_finished = 1; + } + else{ + s_serial_position++; + } + +} diff --git a/firmware/libDIY/drivers/include/diy_adc.h b/firmware/libDIY/drivers/include/diy_adc.h new file mode 100644 index 0000000..ed6dbd3 --- /dev/null +++ b/firmware/libDIY/drivers/include/diy_adc.h @@ -0,0 +1,51 @@ +#ifndef DIY_ADC_H_INCLUDED +#define DIY_ADC_H_INCLUDED + +/* When using with the STM32F411E-DISCO the pins/channels: + * PA0/0 + * PA4/4 + * PA5/5 + * PA6/6 + * PA7/7 + * PC0/11 + * PC3/13 + * PC4/14 + * may already be used or are not available due to other peripherals. + * Pins/channels: + * PA1/1 + * PA2/2 + * PA3/3 + * PB0/8 + * PB1/9 + * PC1/11 + * PC2/12 + * PC5/15 + * should be available. + * Channel 16 and 17 are internal channels. Channel 18 is only for V_Bat. + */ + +/*! \brief Structure to configure the ADC. Use the ADC define from libDIY/drivers/ + * include/diy_adc.h for the adc value and sample_time. Use an Integer for the + * prescaler + */ +typedef struct { + uint32_t adc; + uint8_t sample_time; + uint32_t prescaler; +} diy_adc_config_t; + +/*! \brief Initialize the on-board ADC. + * \param adc_config Struct containing the configuration of the ADC register + * \param channels Channel to be configured + * \param len_channels Number of channels in channels + */ +void diy_adc_init(diy_adc_config_t* adc_config, uint8_t channels[], uint8_t len_channels); + +/*! \brief Reads the current ADC value from the channels. + * \param adc ADC peripheral + * \param channels Channels that should be read + * \param sample_val Array where the adc values are stored + * \param len_channels Number of channels to be read, sample_val and channels should be of same size + */ +void diy_adc_read(uint32_t adc, uint8_t channels[], uint16_t sample_val[], uint8_t len_channels); +#endif // DIY_ADC_H_INCLUDED diff --git a/firmware/libDIY/drivers/include/diy_gpio.h b/firmware/libDIY/drivers/include/diy_gpio.h new file mode 100644 index 0000000..aa5a19b --- /dev/null +++ b/firmware/libDIY/drivers/include/diy_gpio.h @@ -0,0 +1,75 @@ +#ifndef DIY_GPIO_H_INCLUDED +#define DIY_GPIO_H_INCLUDED +#include <stdint.h> + +/*! + * \defgroup gpio DIY GPIO Library + */ +/** + * \file diy_gpio.h DIY GPIO Library + * \ingroup gpio + * \brief Configure and use gpio pins + */ + +/*!\brief Structure for initializing the GPIO Pins. For port, mode, type, speed + * and pull_up_down use the definitons from libDIY/drivers/include/diy_gpio.h. + * For alt_func see the STM32F411 data sheet and use an Interger from 0 to 15. + * \param port: GPIOA ... GPIOH + * \param mode: GPIO_MODE_OUTPUT (Pin as Output) + * GPIO_MODE_INPUT (Pin as Input) + GPIO_MODE_AF (Use Alternate function as described by alt_func, see data sheet) + GPIO_MODE_ANALOG (Use for ADC) + * \param type: GPIO_TYPE_PP (Use PushPull configuration) + GPIO_TYPE_OD (Use open drain configuration) https://electronics.stackexchange.com/questions/28091/push-pull-open-drain-pull-up-pull-down + * \param speed: GPIO_OSPEED_2MHZ, ..., GPIO_OSPEED_50MHZ + * \param pull_up_down: GPIO_PUPD_NONE, GPIO_PUPD_PULLUP, GPIO_PUPD_PULLDOWN + * \param alt_func: GPIO_AF0 ... GPIO_AF15 + */ +typedef struct { + uint32_t port; + uint8_t mode; + uint8_t type; + uint8_t speed; + uint8_t pull_up_down; + uint8_t alt_func; +} diy_gpio_config_t; + +/*!\brief Initialize the pins on one port with the same configuration + * \param gpio_config Struct containing the port register configuration + * \param pins Bitmask of the pins, if you want to use more than one pin OR-link + * them (GPIO1 | GPIO2 ...). + */ +void diy_gpio_init(diy_gpio_config_t* gpio_config, uint16_t pins); + +/*!\brief Sets pins to high logic level + * \param port Port with the pins + * \param pin Bitmask of the pins + */ +void diy_gpio_set_pins(uint32_t port, uint16_t pin); + +/*!\brief Sets pins to low logic level + * \param port Port with the pins + * \param pin Bitmask of the pins + */ +void diy_gpio_clear_pins(uint32_t port, uint16_t pin); + +/*!\brief Inverts the pins logic level + * \param port Port with the pins + * \param pin Bitmask of the pins + */ +void diy_gpio_toggle_pins(uint32_t port, uint16_t pin); + +/*!\brief Reads the current output status of one pin + * \param port Port with the pins + * \param pin Bitmask of the pins + * \returns 1 if pin is set to high, 0 otherwise + */ +uint8_t diy_gpio_read_pin_out(uint32_t port, uint16_t pin); + +/*!\brief Reads the current logic levef of one pin + * \param port Port with the pin + * \param pin Bitmask of the pin + * \returns 1 if pin is pulled high, 0 otherweise + */ +uint8_t diy_gpio_read_pin(uint32_t port, uint16_t pin); +#endif //DIY_GPIO_H_INCLUDED diff --git a/firmware/libDIY/drivers/include/diy_int.h b/firmware/libDIY/drivers/include/diy_int.h new file mode 100644 index 0000000..89b41a2 --- /dev/null +++ b/firmware/libDIY/drivers/include/diy_int.h @@ -0,0 +1,12 @@ +#ifndef DIY_INT_H_INCLUDED +#define DIY_INT_H_INCLUDED + +#include <stdint.h> +#include <libopencm3/cm3/nvic.h> +#include <libopencm3/stm32/exti.h> + +/* + * + */ +void diy_init_button_int(uint32_t pin, enum exti_trigger_type trigger, uint8_t priority); +#endif // DIY_INT_H_INCLUDED diff --git a/firmware/libDIY/drivers/include/diy_tim.h b/firmware/libDIY/drivers/include/diy_tim.h new file mode 100644 index 0000000..38f46a5 --- /dev/null +++ b/firmware/libDIY/drivers/include/diy_tim.h @@ -0,0 +1,95 @@ +#ifndef DIY_TIM_H_INCLUDED +#define DIY_TIM_H_INCLUDED +#include <stdint.h> +#include "libopencm3/stm32/timer.h" + +// Channel Polarity Definitions +#define TIM_CCER_CCxNP_LOW 0 +#define TIM_CCER_CCxNP_HIGH 1 + +/*! \brief Structure for configuring a timer. Use the definitions in libDIY/drivers + * include/diy_tim.h for timer, clock_div, alignment and count_direction. Use an + * integer for period + */ +typedef struct { + uint32_t timer; + uint32_t clock_div; + uint32_t alignment; + uint32_t count_direction; + uint32_t period; +} diy_tim_config_t; + +/*! \brief Structure for configuring a channel. Use definitions in libDIY/drivers + * include/diy_tim.h for channel, mode and polarity. Use an integer for prescaler, + * repetition_counter and compare_value. + */ + +typedef struct { + uint8_t channel; + uint8_t mode; + uint32_t prescaler; + uint32_t repetition_counter; + uint8_t polarity; + uint32_t compare_value; +} diy_tim_channel_config_t; + +/* Timers available: + * TIM2 + * TIM3 + * TIM4 + * TIM5 ! If you use the ezs_counter, do not use TIM5 ! + * TIM9 + * TIM10 + * TIM11 + * ! TIM 1 is an advanced timer and can not be used with this interface ! + */ + +/*! \brief Initialize a timer peripheral and starts the timer's counter + * \param tim_config Struct containing the configuration of the timer's register + */ +void diy_tim_init(diy_tim_config_t* tim_config); + +/* Channels and pins for + * TIM2: (PA0, PA5, PA15)/CH1, (PA1, PB3)/CH2, (PA2, PB10)/CH3, PA3/CH4 + * TIM3: (PA6, PB4, PC6)/CH1, (PA7, PB5, PC7)/CH2, (PB0, PC8)/CH3, (PB1, PC9)/CH4, + * TIM4: (PB6, PD12)/CH1, (PB7, PD13)/CH2, (PB8, PD14)/CH3, (PB9, PD15)/CH4 + * TIM5: PA0/CH1, PA1/CH1, PA2/CH3, PA3/CH4 + * TIM9: PA2/CH1, PA3/CH2 + * TIM10: PB8/CH1 + * TIM11: PB9/CH1 + */ +/*! \brief Initialize a timer output channel and enables it's output + * \param channel_config Struct containing the configuration of the channel's register + * \param timer Timer peripheral of the channel + */ +void diy_tim_channel_init(diy_tim_channel_config_t* channel_config, uint32_t timer); + +/*! \brief Starts the timer's counter + * \param timer Timer peripheral + */ +void diy_tim_start(uint32_t timer); + +/*! \brief Stops the timer's counter + * \param timer Timer peripheral + */ +void diy_tim_stop(uint32_t timer); + +/*! \brief Starts the channel's output + * \param timer Timer peripheral + * \param channel Channel ID + */ +void diy_tim_channel_start(uint32_t timer, enum tim_oc_id channel); + +/*! \brief Stops the channel's output + * \param timer Timer peripheral + * \param channel Channel ID + */ +void diy_tim_channel_stop(uint32_t timer, enum tim_oc_id channel); + +/*! \brief Sets the channel's capture compare value + * \param timer Timer peripheral + * \param channel Channel ID + * \param compare_value New capture compare value + */ +void diy_tim_channel_set_compare_value(uint32_t timer, enum tim_oc_id channel, uint32_t compare_value); +#endif // DIY_TIM_H_INCLUDED diff --git a/firmware/libDIY/drivers/src/diy_adc.c b/firmware/libDIY/drivers/src/diy_adc.c new file mode 100644 index 0000000..c7f9aa5 --- /dev/null +++ b/firmware/libDIY/drivers/src/diy_adc.c @@ -0,0 +1,47 @@ +#include <libopencm3/stm32/rcc.h> +#include <libopencm3/stm32/adc.h> + +#include "diy_adc.h" +#include "diy_gpio.h" + +/* + * Function for initializing the onboard ADC and the channels with linked + * pins. The function assumes that the GPIO Pins have already been configured + * for ADC use. + */ +void diy_adc_init(diy_adc_config_t* adc_config, uint8_t channels[], uint8_t len_channels){ + // Activate Clock for ADC, STM32F411E only has one ADC, so no selection is necessary + rcc_periph_clock_enable(RCC_ADC1); + // Power off ADC during setup (necessary?) + adc_power_off(adc_config->adc); + // Turn of scanning mode + adc_disable_scan_mode(adc_config->adc); + // Set sample time for channels + uint8_t i; + // Alternative: adc_set_sample_time_on_all_channels(adc, time) + for(i = 0; i < len_channels; i++){ + adc_set_sample_time(adc_config->adc, channels[i], adc_config->sample_time); + } + // Power on ADC after setup + adc_power_on(adc_config->adc); + // ADC should be ready after 3 ms +} + +/* + * Function to read out a set of up to 16 channels and return their + * values in array of the same order as the input array's channels + */ +void diy_adc_read(uint32_t adc, uint8_t channels[], uint16_t sample_val[], uint8_t len_channels){ + /* adc_read_regular returns uin32_t, but only lower 16 bits are used when + * only one ADC is present or more ADC2 is available and dual mode is on. + */ + // Set channels to be sampled in the step + adc_set_regular_sequence(adc, len_channels, channels); + // Start sampling channels and wait for finish + uint8_t i; + for(i = 0;i < len_channels;i++){ + adc_start_conversion_regular(adc); + while(!adc_eoc(adc)); // Flag set after each channels conversion + sample_val[i] = (uint16_t) adc_read_regular(adc); + } +} diff --git a/firmware/libDIY/drivers/src/diy_gpio.c b/firmware/libDIY/drivers/src/diy_gpio.c new file mode 100644 index 0000000..5a1fbfe --- /dev/null +++ b/firmware/libDIY/drivers/src/diy_gpio.c @@ -0,0 +1,103 @@ +#include "diy_gpio.h" +#include <libopencm3/stm32/rcc.h> +#include <libopencm3/stm32/gpio.h> + +static enum rcc_periph_clken diy_gpio_get_rcc_periph(uint32_t port){ + enum rcc_periph_clken rcc_periph; + + switch(port){ + case GPIOA: rcc_periph = RCC_GPIOA; + break; + case GPIOB: rcc_periph = RCC_GPIOB; + break; + case GPIOC: rcc_periph = RCC_GPIOC; + break; + case GPIOD: rcc_periph = RCC_GPIOD; + break; + case GPIOE: rcc_periph = RCC_GPIOE; + break; + case GPIOH: rcc_periph = RCC_GPIOH; + break; + default: rcc_periph = 0xFFFF; + break; + } + return rcc_periph; +} + +void diy_gpio_init(diy_gpio_config_t* gpio_config, uint16_t pins){ + // Get RCC define based on Port + enum rcc_periph_clken rcc_periph; + rcc_periph = diy_gpio_get_rcc_periph(gpio_config->port); + if(rcc_periph == 0xFFFF){ + return; + } + else{ + // Activate clock for Port + rcc_periph_clock_enable(rcc_periph); + } + + // Set GPIO port registers MODER, PUPDR + gpio_mode_setup(gpio_config->port, + gpio_config->mode, + gpio_config->pull_up_down, + pins); + + // Depending on pin mode set other registers + switch(gpio_config->mode){ + // Set GPIO port registers OTYPER, OSPEEDR for output mode + case GPIO_MODE_OUTPUT: gpio_set_output_options(gpio_config->port, + gpio_config->type, + gpio_config->speed, + pins); + gpio_clear(gpio_config->port, pins); + break; + // Set GPIO port register AFRL for alternative function mode + case GPIO_MODE_AF: gpio_set_af(gpio_config->port, + gpio_config->alt_func, + pins); + break; + default: break; + } +} + +/* Wrapper function for libopencm3 set pin function to have a unified + * interface. For multiple pins OR-link them (GPIO1 | GPIO2 ...). + */ +void diy_gpio_set_pins(uint32_t port, uint16_t pin){ + gpio_set(port, pin); +} + +/* Wrapper function for libopencm3 clear pin function to have a unified + * interface. For multiple pins OR-link them (GPIO1 | GPIO2 ...). + */ +void diy_gpio_clear_pins(uint32_t port, uint16_t pin){ + gpio_clear(port, pin); +} + +/* Wrapper function for libopencm3 toggle pin function to have a unified + * interface. For multiple pins OR-link them (GPIO1 | GPIO2 ...). + */ +void diy_gpio_toggle_pins(uint32_t port, uint16_t pin){ + gpio_toggle(port, pin); +} + +/* Function to query the state of one output pin + * 1 if pin is set, 0 otherwise + */ +uint8_t diy_gpio_read_pin_out(uint32_t port, uint16_t pin){ + uint16_t odr_reg = 0; + odr_reg = (uint16_t) GPIO_ODR(port); + if(odr_reg & pin){ + return (uint8_t) 1; + } + return (uint8_t) 0; +} + +uint8_t diy_gpio_read_pin(uint32_t port, uint16_t pin){ + uint16_t idr_reg = 0; + idr_reg = gpio_port_read(port); + if(idr_reg & pin){ + return (uint8_t) 1; + } + return (uint8_t) 0; +} diff --git a/firmware/libDIY/drivers/src/diy_int.c b/firmware/libDIY/drivers/src/diy_int.c new file mode 100644 index 0000000..db90807 --- /dev/null +++ b/firmware/libDIY/drivers/src/diy_int.c @@ -0,0 +1,24 @@ +#include "diy_int.h" +#include <libopencm3/stm32/rcc.h> +#include <libopencm3/stm32/gpio.h> + +static uint8_t get_pin_interrupt(uint32_t pin){ + switch(pin){ + case GPIO0: return NVIC_EXTI0_IRQ; + default: return UINT8_MAX; + } +} + +void diy_init_button_int(uint32_t pin, enum exti_trigger_type trigger, uint8_t priority){ + + uint8_t interrupt = get_pin_interrupt(pin); + if(interrupt == UINT32_MAX){ + return; + } + nvic_enable_irq(NVIC_EXTI0_IRQ); + // Activate interrupt for pin + exti_select_source(EXTI0, GPIOA); + // Change trigger mode + exti_set_trigger(EXTI0, EXTI_TRIGGER_BOTH); + exti_enable_request(EXTI0); +} diff --git a/firmware/libDIY/drivers/src/diy_tim.c b/firmware/libDIY/drivers/src/diy_tim.c new file mode 100644 index 0000000..cfe9b26 --- /dev/null +++ b/firmware/libDIY/drivers/src/diy_tim.c @@ -0,0 +1,89 @@ +#include "diy_tim.h" +#include "libopencm3/stm32/rcc.h" +/* \brief Private function for determining the peripheral clock for the Timer. + */ +static enum rcc_periph_clken diy_tim_get_rcc_periph(uint32_t timer){ + enum rcc_periph_clken rcc_periph; + switch(timer){ + case TIM2: rcc_periph = RCC_TIM2; + break; + case TIM3: rcc_periph = RCC_TIM3; + break; + case TIM4: rcc_periph = RCC_TIM4; + break; + case TIM5: rcc_periph = RCC_TIM5; + break; + case TIM9: rcc_periph = RCC_TIM9; + break; + case TIM10: rcc_periph = RCC_TIM10; + break; + case TIM11: rcc_periph = RCC_TIM11; + break; + default: rcc_periph = 0xFFFF; + break; + } + return rcc_periph; +} + +/* \brief Initialize one of the available timers. TIM1 is an advanced timer that + * can not be used with this interface. The timer will always run in upadte + * master mode. Preload is always enabled. + */ +void diy_tim_init(diy_tim_config_t* tim_config){ + enum rcc_periph_clken rcc_periph; + rcc_periph = diy_tim_get_rcc_periph(tim_config->timer); + if(rcc_periph == 0xFFFF){ + return; + } + else{ // Activate clock for timer + rcc_periph_clock_enable(rcc_periph); + } + timer_set_mode(tim_config->timer, + tim_config->clock_div, + tim_config->alignment, + tim_config->count_direction); + timer_set_period(tim_config->timer, + tim_config->period); + timer_set_master_mode(tim_config->timer, TIM_CR2_MMS_UPDATE); + timer_enable_preload(tim_config->timer); + // Start timer + timer_enable_counter(tim_config->timer); +} + +void diy_tim_channel_init(diy_tim_channel_config_t* channel_config, uint32_t timer){ + timer_set_oc_mode(timer, + (enum tim_oc_id) channel_config->channel, + (enum tim_oc_mode) channel_config->mode); + if(channel_config->polarity == TIM_CCER_CCxNP_HIGH){ + timer_set_oc_polarity_high(timer, channel_config->channel); + } + if(channel_config->polarity == TIM_CCER_CCxNP_LOW){ + timer_set_oc_polarity_low(timer, channel_config->channel); + } + timer_set_oc_value(timer, + channel_config->channel, + channel_config->compare_value); + timer_enable_oc_preload(timer, channel_config->channel); + // Enable channel output + timer_enable_oc_output(timer, channel_config->channel); +} + +void diy_tim_start(uint32_t timer){ + timer_enable_counter(timer); +} + +void diy_tim_stop(uint32_t timer){ + timer_disable_counter(timer); +} + +void diy_tim_channel_start(uint32_t timer, enum tim_oc_id channel){ + timer_enable_oc_output(timer, channel); +} + +void diy_tim_channel_stop(uint32_t timer, enum tim_oc_id channel){ + timer_disable_oc_output(timer, channel); +} + +void diy_tim_channel_set_compare_value(uint32_t timer, enum tim_oc_id channel, uint32_t compare_value){ + timer_set_oc_value(timer, channel, compare_value); +} diff --git a/firmware/libDIY/include/diy_ds18b20.h b/firmware/libDIY/include/diy_ds18b20.h new file mode 100644 index 0000000..8ee3016 --- /dev/null +++ b/firmware/libDIY/include/diy_ds18b20.h @@ -0,0 +1,17 @@ +#ifndef DIY_DS18B20_H_INCLUDED +#define DIY_DS18B20_H_INCLUDED + +#include <stdint.h> + + +/* Defines */ + +/* \brief Initialize the pins for Rx and Tx, also sends a test master reset to + * check if the sensor is connected. + */ +void diy_ds18b20_init(diy_ds18b20_t* ds18b20_sensor); + +void diy_ds18b20_read_temp(diy_ds18b20_t* ds18b20_sensor); + +float diy_ds18b20_dig_to_cel(uint16_t dig_sensor_val); +#endif // DIY_DS18B20_H_INCLUDED diff --git a/firmware/libDIY/include/diy_gparser.h b/firmware/libDIY/include/diy_gparser.h new file mode 100644 index 0000000..128e1a2 --- /dev/null +++ b/firmware/libDIY/include/diy_gparser.h @@ -0,0 +1,12 @@ +#ifndef DIY_GPARSER_H_INCLUDED +#define DIY_GPARSER_H_INCLUDED + + +typedef struct { + uint8_t code; + uint16_t feed_speed; + uint16_t x_pos; +}g_code_t; + +uint8_t diy_parse_g_code(char* command_string, g_code_t* g_code); +#endif // DIY_GPARSER_H_INCLUDED diff --git a/firmware/libDIY/src/diy_ds18b20.c b/firmware/libDIY/src/diy_ds18b20.c new file mode 100644 index 0000000..f5d67cd --- /dev/null +++ b/firmware/libDIY/src/diy_ds18b20.c @@ -0,0 +1,19 @@ +#include "diy_ds18b20.h" +#include "diy_gpio.h" + +#include "ezs_delay.h" + +#include "libopencm3/stm32/gpio.h" + + + +void diy_ds18b20_init(diy_ds18b20_t* sensor){ +} + + +/* See data sheet page 18 for order of operation */ +void diy_ds18b20_read_temp(diy_ds18b20_t* sensor){ +} + +float diy_ds18b20_dig_to_cel(uint16_t sensor_val_dig){ +} diff --git a/firmware/libDIY/src/diy_gparser.c b/firmware/libDIY/src/diy_gparser.c new file mode 100644 index 0000000..04c4e50 --- /dev/null +++ b/firmware/libDIY/src/diy_gparser.c @@ -0,0 +1,6 @@ +#include "diy_parser.h" + + +uint8_t diy_parse_g_code(char* command_string, g_code_t* g_code){ +} + diff --git a/firmware/libEZS/drivers/i386/ezs_adc.c b/firmware/libEZS/drivers/i386/ezs_adc.c new file mode 100644 index 0000000..d5676fc --- /dev/null +++ b/firmware/libEZS/drivers/i386/ezs_adc.c @@ -0,0 +1,20 @@ + +/*! + * @file ezs_adc.c + * @brief A very simple AD converter, based on Fail* + * @author Martin Hoffmann + * \ingroup adc + */ +#include <stdint.h> +#include "ezs_dac.h" + +static volatile uint8_t ezs_adc_in_register; +/*! + * \brief Get a value from the ADC + */ +uint8_t ezs_adc_read(void){ + return ezs_adc_in_register; +} + + + diff --git a/firmware/libEZS/drivers/i386/ezs_counter.c b/firmware/libEZS/drivers/i386/ezs_counter.c new file mode 100644 index 0000000..a4ad16c --- /dev/null +++ b/firmware/libEZS/drivers/i386/ezs_counter.c @@ -0,0 +1,144 @@ +#define EZS_HPET_ADDR 0xFED00000 + +#include "ezs_counter.h" +#include <stdio.h> +#include <stdint.h> + +typedef struct hpetReg { + uint64_t GCAP_ID; /* General capabilities */ + uint64_t rsv1; + uint64_t GEN_CONF; /* General configuration */ + uint64_t rsv2; + uint64_t GINTR_STA; /* General Interrupt status */ + uint64_t rsv3[25]; + uint64_t MAIN_CNT; /* Main counter */ + uint64_t rsv4; + uint64_t TIM0_CONF; /* Timer 0 config and cap */ +#define TIM_CONF 0 +#define Tn_INT_ENB_CNF 4 + uint64_t TIM0_COMP; /* Timer 0 comparator */ +#define TIM_COMP 8 + uint64_t rsv5[2]; + uint64_t TIM1_CONF; /* Timer 1 config and cap */ + uint64_t TIM1_COMP; /* Timer 1 comparator */ + uint64_t rsv6[2]; + uint64_t TIM2_CONF; /* Timer 2 config and cap */ + uint64_t TIM2_COMP; /* Timer 2 comparator */ + uint64_t rsv7[2]; +} hpetReg; +typedef struct hpetReg hpetReg_t; + +volatile hpetReg_t *hpet = (volatile hpetReg_t *) EZS_HPET_ADDR; + +static uint64_t hpet_divisor = 0; +static uint32_t hpet_period = 0; +static bool use_hpet = true; + + +uint32_t ezs_hpet_period_fs(void) +{ + return hpet->GCAP_ID >> 32; +} + +bool ezs_hpet_init(void) +{ + uint64_t test = hpet->GCAP_ID; + uint64_t gcap = hpet->GCAP_ID; + + hpet_period = (gcap & 0xffffffff00000000ULL) >> 32; + + if( hpet_period > 0x5f5e100 ){ + use_hpet = false; + printf("HPET invalid, using Time Stamp Counter\n"); + return false; + } else { + use_hpet = true; + } + + uint8_t rev_id = gcap & 0xFF; + uint8_t num_timers = (gcap >> 8) & 0x1F; + uint8_t counter_size = (gcap >> 13) & 0x1; + uint16_t vendor_id = (gcap >> 16) & 0xFFFF; + + hpet_divisor = 1000000000ULL / hpet_period; // 10e9 fs == 1 us + + printf("HPET enabled\n"); + /* enable HPET */ + hpet->GEN_CONF = 0x1; +} + +uint64_t ezs_hpet_read(void) +{ + uint64_t cnt = hpet->MAIN_CNT; + //printf("CNT: 0x%llx\n", cnt); + return cnt; +} + +uint64_t ezs_hpet_resolution_us(void) +{ + return 1; +} + +uint64_t ezs_hpet_read_us(void) +{ + return ezs_hpet_read() / hpet_divisor; +} + +/* Timestamp counter implementation */ + +#ifndef BOCHS_CPU_MHZ +#error Bochs CPU Speed not defined +#endif + +static inline unsigned long long getticks(void) +{ + unsigned int lo, hi; + // RDTSC copies contents of 64-bit TSC into EDX:EAX + asm volatile("rdtsc" : "=a" (lo), "=d" (hi)); + return (unsigned long long)hi << 32 | lo; +} + +cyg_uint64 ezs_rdtsc_get_us(void) { + return getticks() / (BOCHS_CPU_MHZ); +} + +void ezs_tsc_init(void){ + printf("Using time stamp counter, cpu running @ %d MHz\n", BOCHS_CPU_MHZ); +} + +static volatile uint32_t FAILBOCHSID = 0; + +/* EZS API implementation */ +void ezs_counter_init(void) +{ + if (FAILBOCHSID == 42) { // We run in Fail* + ezs_tsc_init(); + use_hpet = false; + } else { // not in Fail* try using HPET + if ( ! ezs_hpet_init() ) { // HPET not accurate enough fall back to TSC + ezs_tsc_init(); + use_hpet = false; + } + } +} + + +cyg_uint64 ezs_counter_get(void) +{ + if(use_hpet){ + return ezs_hpet_read_us(); + } else { + return ezs_rdtsc_get_us(); + } +} + +cyg_uint64 ezs_counter_resolution_us(void) +{ + return ezs_hpet_resolution_us(); +} + +cyg_uint64 ezs_counter_resolution_ps(void) +{ + return ezs_hpet_resolution_us() * 1000000; +} + diff --git a/firmware/libEZS/drivers/i386/ezs_dac.c b/firmware/libEZS/drivers/i386/ezs_dac.c new file mode 100644 index 0000000..f3cff12 --- /dev/null +++ b/firmware/libEZS/drivers/i386/ezs_dac.c @@ -0,0 +1,19 @@ + +/*! + * @file ezs_dac.c + * @brief A very simple DA converter, based on Fail* + * @author Martin Hoffmann + * \ingroup dac + */ +#include <stdint.h> +#include "ezs_dac.h" + +static volatile uint8_t ezs_dac_out_register; + +/*! + * \brief Write a value to the DAC + */ +void ezs_dac_write(uint8_t value){ + ezs_dac_out_register = value; +} + diff --git a/firmware/libEZS/drivers/i386/ezs_fb.c b/firmware/libEZS/drivers/i386/ezs_fb.c new file mode 100644 index 0000000..7bbebc3 --- /dev/null +++ b/firmware/libEZS/drivers/i386/ezs_fb.c @@ -0,0 +1,88 @@ +#include "ezs_fb.h" + +typedef struct { + int x; + int y; +} cursor_t; + +static cursor_t cursor; +void ezs_fb_init(void) +{ + CYG_FB_ON(FRAMEBUF); + CYG_FB_FILL_BLOCK(FRAMEBUF, 0, 0, FB_WIDTH, FB_HEIGHT, 0); + cursor.x = 0; + cursor.y = 0; +} + + +void ezs_fb_fill_block(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 width,cyg_ucount16 height,cyg_fb_colour color) +{ + CYG_FB_FILL_BLOCK(FRAMEBUF, x, y, width, height, color); +} + + +void ezs_fb_hline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, cyg_fb_colour color) +{ + CYG_FB_WRITE_HLINE(FRAMEBUF, x, y, len, color); +} + + +void ezs_fb_vline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, cyg_fb_colour color) +{ + + CYG_FB_WRITE_VLINE(FRAMEBUF, x, y, len, color); +} + +void ezs_fb_clear(cyg_fb_colour color) +{ + ezs_fb_fill_block(0, 0, FB_WIDTH, FB_HEIGHT, color); +} + + +void ezs_fb_print_char( int ch, cyg_ucount16 x, cyg_ucount16 y, cyg_fb_colour color){ + int i, j; + for (i = ch*8; i < (ch*8)+8; i++){ + unsigned char row = g_8x8_font[i]; + for (j = 0; j < 8; j++){ + if((row & (0x80 >> j)) != 0){ + ezs_fb_fill_block(x+j, y+(i-ch*8), 1, 1, color); + } + } + } + +} + +void ezs_fb_print_string(char*c, cyg_fb_colour color){ + ezs_fb_print_string_cur(c, cursor.x, cursor.y, color); +} + +void ezs_fb_print_string_cur(char* c, cyg_ucount16 x, cyg_ucount16 y, cyg_fb_colour color){ + char* ch = c; + + while(*ch != '\0'){ + if(*ch == '\n'){ + ezs_fb_newline(); + }else{ + ezs_fb_print_char((*ch)+0, x , y, color); + x = x+8; + if( x >= FB_WIDTH - 8){ + y += 8; + x = 0; + } + } + ch++; + } + cursor.x = x; + cursor.y = y; +} + +void ezs_fb_newline(void){ + cursor.x = 0; + cursor.y += 8; +} + +void ezs_fb_setpos(cyg_ucount16 x, cyg_ucount16 y){ + cursor.x = x; + cursor.y = y; +} + diff --git a/firmware/libEZS/drivers/i386/ezs_keycodes.c b/firmware/libEZS/drivers/i386/ezs_keycodes.c new file mode 100644 index 0000000..3b7ff90 --- /dev/null +++ b/firmware/libEZS/drivers/i386/ezs_keycodes.c @@ -0,0 +1,22 @@ + +#include "ezs_keycodes.h" +#include <assert.h> +#include <stdio.h> + +#define NUMBER_OF_KEYCODES 89 +unsigned char char_of_key[] = { + 0, 0, '1', '2', '3', '4', '5', '6', '7', '8', + '9', '0', 225, 39, '\b', 0, 'q', 'w', 'e', 'r', + 't', 'z', 'u', 'i', 'o', 'p', 129, '+', '\n', 0, + 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 148, + 132, '^', 0, '#', 'y', 'x', 'c', 'v', 'b', 'n', + 'm', ',', '.', '-', 0, '*', 0, ' ', 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, '-', 0, 0, 0, '+', 0, + 0, 0, 0, 0, 0, 0, '<', 0, 0 }; + +unsigned char ezs_get_char_from_keycode(unsigned char code) { + assert(code < NUMBER_OF_KEYCODES); + + return char_of_key[code]; +} diff --git a/firmware/libEZS/drivers/i386/ezs_tracer.cpp b/firmware/libEZS/drivers/i386/ezs_tracer.cpp new file mode 100644 index 0000000..635b57a --- /dev/null +++ b/firmware/libEZS/drivers/i386/ezs_tracer.cpp @@ -0,0 +1,34 @@ +#include <pkgconf/system.h> +#include <cyg/io/io.h> +#include <cyg/error/codes.h> +#include <stdint.h> +#include <stdio.h> + +//! The magic tracer variable Fail* is listening on. +volatile unsigned ezs_tracer_register; + +//! No Time triggered kernel -> normal event triggered ecos: +#ifndef SMLPKG_TTKERNEL +#include <cyg/kernel/kernel.hxx> // C Kernel-API +extern "C" { +#include <cyg/kernel/kapi.h> // C Kernel-API +} +class Cyg_Thread; + + +extern "C" void ezs_instrument(Cyg_Thread* current, Cyg_Thread* next) { + // Get priority from next thread + int prio = next->get_priority(); + if(prio > 32) prio = 32; + + // Write priority to tracer register + ezs_tracer_register = prio; +} + +#else +#include <sml/ttkernel/task.hxx> +extern "C" void ezs_instrument(TT_Task* current, TT_Task* next){ + ezs_tracer_register = next->get_id(); +} +#endif + diff --git a/firmware/libEZS/drivers/stm32f4/ezs_counter.cpp b/firmware/libEZS/drivers/stm32f4/ezs_counter.cpp new file mode 100644 index 0000000..040767d --- /dev/null +++ b/firmware/libEZS/drivers/stm32f4/ezs_counter.cpp @@ -0,0 +1,62 @@ +#include "ezs_counter.h" +#include "math.h" + +#include <libopencm3/stm32/f4/memorymap.h> +#include <libopencm3/cm3/common.h> +#include <libopencm3/stm32/f4/rcc.h> +#include <libopencm3/stm32/f4/gpio.h> +#include <libopencm3/stm32/timer.h> + +#include <stdint.h> + +extern "C" { + +static cyg_resolution_t resolution; +static cyg_uint32 res_ps; + +#define PRESCALER 0 +#define RCCCLOCK 42 /*MHz*/ + +// CPU SPEED is 84MHz +// RCC CLOCK is CPUSPEED / 2 = 42MHz +// timer increment frequency is RCC CLOCK / (PRESCALER+1) +// counter will overflow after (PRESCALER+1) * 102sec + +void ezs_counter_init(void) { + rcc_periph_clock_enable(RCC_TIM5); + + timer_set_mode(TIM5, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); + timer_continuous_mode(TIM5); + timer_set_period(TIM5, 0xFFFFFFFF); + timer_set_prescaler(TIM5, PRESCALER); + timer_enable_preload(TIM5); + + timer_enable_counter(TIM5); + + resolution.dividend = 1000L*(PRESCALER+1); + resolution.divisor = RCCCLOCK; + res_ps = (PRESCALER+1) * 1000000L / RCCCLOCK; +} + +cyg_uint32 ezs_counter_get(void) { + return timer_get_counter(TIM5); +} + +cyg_resolution_t ezs_counter_get_resolution(void){ + return resolution; +} + +cyg_uint32 ezs_counter_resolution_ps(void) { + return res_ps; +} + +#ifdef SMLPKG_TTKERNEL +cyg_resolution_t ttEcos_get_resolution(void) { + cyg_resolution_t res; + res.dividend = SMLNUM_TTKERNEL_RTC_NUMERATOR; + res.divisor = SMLNUM_TTKERNEL_RTC_DENOMINATOR; + + return res; +} +#endif +} diff --git a/firmware/libEZS/drivers/stm32f4/ezs_dac.cpp b/firmware/libEZS/drivers/stm32f4/ezs_dac.cpp new file mode 100644 index 0000000..3983771 --- /dev/null +++ b/firmware/libEZS/drivers/stm32f4/ezs_dac.cpp @@ -0,0 +1,132 @@ +/*! + * @file ezs_dac.c + * @brief A C wrapper for the stm32 pwm driver + * @author Florian Jung + * \ingroup dac + */ + +#define EZS_PWM CYGHWR_HAL_STM32_PIN_ALTFN_OUT(D,15, 2, PUSHPULL,NONE,LOW) + +#include <cyg/hal/hal_arch.h> + +#include <libopencm3/stm32/f4/memorymap.h> +#include <libopencm3/cm3/common.h> +#include <libopencm3/stm32/f4/rcc.h> +#include <libopencm3/stm32/f4/gpio.h> +#include <libopencm3/stm32/timer.h> + +#include <stdint.h> + + +/// The timer ticks per microsecond. Can be adjusting by measuring +/// pwm on o-scope +#define PWM_TIMER_TICKS_PER_MICROSECOND 84.0 + +/// PWM Frequency, default is 62 kHz +#define PWM_FREQUENCY_kHz 162.0 + +/// PWM Period, set automatically by the options above +#define PWM_PERIOD ((1.0/PWM_FREQUENCY_kHz) * 1000.0 \ + * PWM_TIMER_TICKS_PER_MICROSECOND / 2) + + +/* + --- FTFM (with edits) --- +Bullet points are the steps needed. +Pulse width modulation mode allows you to generate a signal with a frequency determined +by the value of the TIMx_ARR register (the period) and a duty cycle determined by the value of the +TIMx_CCRx register (the output compare value). + -- Set TIMx_ARR to desired frequency + -- Set TIMx_CCRx to desired duty cycle +The PWM mode can be selected independently on each channel (one PWM per OCx +output) by writing 110 (PWM mode 1) or ‘111 (PWM mode 2) in the OCxM bits in the +TIMx_CCMRx register. + -- Write PWM Mode 1 or PWM Mode 2 to OCxM bits in TIMx_CCMRx register +You must enable the corresponding preload register by setting the +OCxPE bit in the TIMx_CCMRx register, and eventually the auto-reload preload register by +setting the ARPE bit in the TIMx_CR1 register. + -- Set corresponding OCxPE bit in TIMx_CCMRx register + -- Set ARPE bit in TIMx_CR1 +As the preload registers are transferred to the shadow registers only when an update event +occurs, before starting the counter, you have to initialize all the registers by setting the UG +bit in the TIMx_EGR register. + -- set UG bit in TIMx_EGR register +OCx polarity is software programmable using the CCxP bit in the TIMx_CCER register. It +can be programmed as active high or active low. OCx output is enabled by the CCxE bit in +the TIMx_CCER register. Refer to the TIMx_CCERx register description for more details. + -- set desired polarity in TIMx_CCER + -- set CCxE bit in TIMx_CCER (enable output) +*/ +static void pwm_init(uint32_t timer, uint8_t channel, uint32_t period) { +// function stolen from somewhere on stackoverflow + + // Convert channel number to internal rep + enum tim_oc_id chan; + switch (channel) { + case 1: chan = TIM_OC1; break; + case 2: chan = TIM_OC2; break; + case 3: chan = TIM_OC3; break; + case 4: chan = TIM_OC4; break; + default: chan = TIM_OC4; break; + } + + // Timer Base Configuration + // timer_reset(timer); + timer_set_mode(timer, TIM_CR1_CKD_CK_INT, // clock division + TIM_CR1_CMS_EDGE, // Center-aligned mode selection + TIM_CR1_DIR_UP); // TIMx_CR1 DIR: Direction + timer_continuous_mode(timer); // Disables TIM_CR1_OPM (One pulse mode) + timer_set_period(timer, period); // Sets TIMx_ARR + timer_set_prescaler(timer, 1); // Adjusts speed of timer + timer_set_clock_division(timer, 0); // Adjusts speed of timer + timer_set_master_mode(timer, TIM_CR2_MMS_UPDATE); // Master Mode Selection + timer_enable_preload(timer); // Set ARPE bit in TIMx_CR1 + + // Channel-specific settings + timer_set_oc_value(timer, chan, 0); // sets TIMx_CCRx + timer_set_oc_mode(timer, chan, TIM_OCM_PWM1); // Sets PWM Mode 1 + timer_enable_oc_preload(timer, chan); // Sets OCxPE in TIMx_CCMRx + timer_set_oc_polarity_high(timer, chan); // set desired polarity in TIMx_CCER + timer_enable_oc_output(timer, chan); // set CCxE bit in TIMx_CCER (enable output) + + // Initialize all counters in the register + switch (timer) { + case TIM1: TIM1_EGR |= TIM_EGR_UG; break; + case TIM2: TIM2_EGR |= TIM_EGR_UG; break; + case TIM3: TIM3_EGR |= TIM_EGR_UG; break; + case TIM4: TIM4_EGR |= TIM_EGR_UG; break; + case TIM5: TIM5_EGR |= TIM_EGR_UG; break; + case TIM6: TIM6_EGR |= TIM_EGR_UG; break; + case TIM7: TIM7_EGR |= TIM_EGR_UG; break; + case TIM8: TIM8_EGR |= TIM_EGR_UG; break; + } +} + +static void pwm_setup(void) { + rcc_periph_clock_enable(RCC_TIM4); + //pwm_init(TIM4, 1, PWM_PERIOD); + pwm_init(TIM4, 2, PWM_PERIOD); + pwm_init(TIM4, 3, PWM_PERIOD); + pwm_init(TIM4, 4, PWM_PERIOD); + + // LED channels = PD12..15 + rcc_peripheral_enable_clock(&RCC_AHB1ENR, RCC_AHB1ENR_IOPDEN); + + gpio_mode_setup(GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE, + GPIO13 | GPIO14 | GPIO15); + // AF2 = TIM4_CH1..4 + gpio_set_af(GPIOD, GPIO_AF2, GPIO13 | GPIO14 | GPIO15); + timer_enable_counter(TIM4); +} + +extern "C" void ezs_dac_init() { + pwm_setup(); + CYGHWR_HAL_STM32_GPIO_SET(EZS_PWM); +} + +extern "C" void ezs_dac_write(uint8_t value) { + timer_set_oc_value(TIM4, TIM_OC2, value*PWM_PERIOD / 256); + timer_set_oc_value(TIM4, TIM_OC3, value*PWM_PERIOD / 256); + timer_set_oc_value(TIM4, TIM_OC4, value*PWM_PERIOD / 256); +} + diff --git a/firmware/libEZS/drivers/stm32f4/ezs_gpio.c b/firmware/libEZS/drivers/stm32f4/ezs_gpio.c new file mode 100644 index 0000000..8001a14 --- /dev/null +++ b/firmware/libEZS/drivers/stm32f4/ezs_gpio.c @@ -0,0 +1,14 @@ +#include <cyg/hal/hal_arch.h> +#include "ezs_gpio.h" + +#define EZS_GPIO CYGHWR_HAL_STM32F4DISCOVERY_LED1 + +void ezs_gpio_init(void) +{ + CYGHWR_HAL_STM32_GPIO_SET(EZS_GPIO); +} + +void ezs_gpio_set(bool enable) +{ + CYGHWR_HAL_STM32_GPIO_OUT(EZS_GPIO, enable!=0); +} diff --git a/firmware/libEZS/drivers/stm32f4/ezs_serial.cpp b/firmware/libEZS/drivers/stm32f4/ezs_serial.cpp new file mode 100644 index 0000000..cad6ae7 --- /dev/null +++ b/firmware/libEZS/drivers/stm32f4/ezs_serial.cpp @@ -0,0 +1,84 @@ +#include <stdio.h> +#include <cyg/hal/hal_io.h> + +#include <pkgconf/io_serial_cortexm_stm32.h> +#include <pkgconf/io_serial.h> + +#include <cyg/io/ttyio.h> +#include <cyg/io/io.h> + +#include "ezs_serial.h" + +#ifdef EZS_DUMB_SERIAL + // we expect tty0 = UART2 to be configured as polled IO (bufsize=0) in ECOS + #if (CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BUFSIZE != 0) + #error "buffersize UART2 aka /dev/ser1 must be 0 but it isn't! (see also: EZS_DUMB_SERIAL)" + #endif +#else // i.e. if !EZS_DUMB_SERIAL + #if (CYGNUM_IO_SERIAL_CORTEXM_STM32_SERIAL1_BUFSIZE == 0) + #error "buffersize UART2 aka /dev/ser1 must be nonzero but it isn't! (see also: EZS_DUMB_SERIAL)" + #endif +#endif + + +extern "C" { + +#ifdef EZS_DUMB_SERIAL +void ezs_serial_init(void) { + // enable the rxne interrupt generation. + + uint32_t cr1; + HAL_READ_UINT32(CYGHWR_HAL_STM32_UART2 + CYGHWR_HAL_STM32_UART_CR1, cr1); + HAL_WRITE_UINT32(CYGHWR_HAL_STM32_UART2 + CYGHWR_HAL_STM32_UART_CR1, cr1 | CYGHWR_HAL_STM32_UART_CR1_RXNEIE); +} +#else // i.e. if !EZS_DUMB_SERIAL +static cyg_io_handle_t handle; + +void ezs_serial_init(void) { + // open /dev/ser1 + printf("lookup = %d\n", cyg_io_lookup("/dev/ser1", &handle)); +} +#endif + +#ifdef EZS_DUMB_SERIAL +void ezs_serial_putc(uint8_t c) { + cyg_uint32 stat; + const CYG_ADDRWORD base = CYGHWR_HAL_STM32_UART2; + do + { + HAL_READ_UINT32(base + CYGHWR_HAL_STM32_UART_SR, stat); + } while ((stat & CYGHWR_HAL_STM32_UART_SR_TC) == 0); + + HAL_WRITE_UINT32( base + CYGHWR_HAL_STM32_UART_DR, c); +} + +uint8_t ezs_serial_getc(void) { + // get a byte from the data register + const CYG_ADDRWORD base = CYGHWR_HAL_STM32_UART2; + cyg_uint32 c; + HAL_READ_UINT32( base + CYGHWR_HAL_STM32_UART_DR, c); + return c; +} + +uint8_t ezs_serial_char_available(void) { + cyg_uint32 stat; + const CYG_ADDRWORD base = CYGHWR_HAL_STM32_UART2; + HAL_READ_UINT32(base + CYGHWR_HAL_STM32_UART_SR, stat); + + return (stat & CYGHWR_HAL_STM32_UART_SR_RXNE ) ? 1 : 0; +} +#else +uint8_t ezs_serial_blocking_getc(void) { + char buf; + cyg_uint32 len=1; + cyg_io_read(handle, &buf, &len); + return buf; +} + +void ezs_serial_putc(uint8_t c) +{ + putchar(c); +} +#endif + +} diff --git a/firmware/libEZS/include/ezs_adc.h b/firmware/libEZS/include/ezs_adc.h new file mode 100644 index 0000000..b0a1645 --- /dev/null +++ b/firmware/libEZS/include/ezs_adc.h @@ -0,0 +1,25 @@ +#ifndef EZS_ADC_H_INCLUDED +#define EZS_ADC_H_INCLUDED + +/*! + * @file ezs_adc.h + * @brief A very simple AD converter, based on Fail* + * @author Martin Hoffmann + * \ingroup dac + */ + +#include <stdint.h> + +/*! + * \brief Get a value from the ADC. + */ +uint8_t ezs_adc_read(void); + +/*! + * \brief Get a value from the ADC. + * + * This is a synonym for ezs_adc_read(); + */ +uint8_t ezs_adc_read(void); + +#endif // EZS_ADC_H_INCLUDED diff --git a/firmware/libEZS/include/ezs_common.h b/firmware/libEZS/include/ezs_common.h new file mode 100644 index 0000000..c6454a4 --- /dev/null +++ b/firmware/libEZS/include/ezs_common.h @@ -0,0 +1,26 @@ +#ifndef EZS_COMMON_H_INCLUDED +#define EZS_COMMON_H_INCLUDED + +/*! + * @file ezs_common.h + * @brief common functions for EZS + * @author Florian Franzmann + * \ingroup common + */ + +#include <stdint.h> + + + +/*! + * \brief returns the low byte of value + */ +uint8_t ezs_low_byte(uint16_t value); + +/*! + * \brief returns the high byte of value + */ +uint8_t ezs_high_byte(uint16_t value); + + +#endif // EZS_COMMON_H_INCLUDED diff --git a/firmware/libEZS/include/ezs_counter.h b/firmware/libEZS/include/ezs_counter.h new file mode 100644 index 0000000..41a06fc --- /dev/null +++ b/firmware/libEZS/include/ezs_counter.h @@ -0,0 +1,68 @@ +#ifndef EZS_COUNTER_H_INCLUDED +#define EZS_COUNTER_H_INCLUDED + +#include <pkgconf/system.h> +#include <cyg/infra/cyg_type.h> + +#ifndef SMLPKG_TTKERNEL +#include <cyg/kernel/kapi.h> +#else +#include <sml/ttkernel/c_api.h> +#include <pkgconf/ttkernel.h> + +typedef struct +{ + cyg_uint32 dividend; + cyg_uint32 divisor; +} cyg_resolution_t; +#endif +/*! + * @file ezs_counter.h + * @brief A simple counter interface. Implemented for tricore and for fail* + * @authors Martin Hoffmann, Tobias Klaus + * \ingroup counter + */ + + +#ifdef __cplusplus +extern "C" { +#endif +/*! + * \brief This function has to be called exactly once so ezs_counter_get() + * yields meaningfull results. + */ +void ezs_counter_init(void); + +/** + * \brief Read the current counter value from the hardware counter. + * @return counter value for time resolution + * + * \see ezs_counter_get_resolution + */ +cyg_uint32 ezs_counter_get(void); + +/** + * \brief Get the resolution of the counter referenced by ezs_counter_get() + * @return resolution represented by a struct comprised of .dividend and .divsior + * each as cyg_uint32 types. dividend/divisor gives the nanoseconds per ticks. + * + * \see <http://ecos.sourceware.org/docs-latest/ref/kernel-clocks.html> + **/ + +cyg_resolution_t ezs_counter_get_resolution(void); + +/** + * \brief Returns the current time resolution of the hardware counter. + * @return tick resolution in picoseconds + */ +cyg_uint32 ezs_counter_resolution_ps(void); + +#ifdef SMLPKG_TTKERNEL +cyg_resolution_t ttEcos_get_resolution(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif // EZS_COUNTER_H_INCLUDED diff --git a/firmware/libEZS/include/ezs_dac.h b/firmware/libEZS/include/ezs_dac.h new file mode 100644 index 0000000..8ede635 --- /dev/null +++ b/firmware/libEZS/include/ezs_dac.h @@ -0,0 +1,33 @@ +#ifndef EZS_DAC_H_INCLUDED +#define EZS_DAC_H_INCLUDED + +/*! + * @file ezs_dac.h + * @brief A very simple DA converter. Implemented for tricore and for fail* + * @authors Martin Hoffmann, Tobias Klaus + * \ingroup dac + */ + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/*! + * \brief Initializes the DAC. This function has to be called exactly once + * so ezs_dac_write() exhibits defined behaviour. + */ +void ezs_dac_init(void); + +/*! + * \brief Write a value to the DAC. + */ +void ezs_dac_write(uint8_t value); + +#ifdef __cplusplus +} +#endif + + +#endif // EZS_DAC_H_INCLUDED diff --git a/firmware/libEZS/include/ezs_delay.h b/firmware/libEZS/include/ezs_delay.h new file mode 100644 index 0000000..3295fcb --- /dev/null +++ b/firmware/libEZS/include/ezs_delay.h @@ -0,0 +1,29 @@ +/*! + * @file ezs_delay.h + * delays the execution of the program + * + * \ingroup hw + * @brief EZS delay + * @author Florian Jung + */ + +#ifndef __DELAY_H_ +#define __DELAY_H_ +#include <cyg/infra/cyg_type.h> + +#ifdef __cplusplus +extern "C" { +#endif +/** + * Delays execution for the desired amount of microseconds + * @param microseconds How many microseconds to wait + * @note ezs_counter_init() must have been called prior to use! + */ +void ezs_delay_us(cyg_uint32 microseconds); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/firmware/libEZS/include/ezs_fb.h b/firmware/libEZS/include/ezs_fb.h new file mode 100644 index 0000000..3047acd --- /dev/null +++ b/firmware/libEZS/include/ezs_fb.h @@ -0,0 +1,135 @@ +/*! + * @file ezs_fb.h + * @brief eCos framebuffer helper + * @author Martin Hoffmann + * \ingroup hw + * Some helper functions for the eCos framebuffer driver. + * \note You can still use the eCos functions directly, of course + * + */ + +#ifndef __FB_H_ +#define __FB_H_ + +#include <cyg/infra/cyg_type.h> +#include <cyg/infra/diag.h> +#include <cyg/hal/hal_arch.h> +#include <string.h> +#include <stdio.h> +#include "ezs_io_fel.h" + +#define FRAMEBUF fb0 +#define FB_WIDTH CYG_FB_WIDTH(FRAMEBUF) +#define FB_HEIGHT CYG_FB_HEIGHT(FRAMEBUF) + +#define CYG_FB_HEIGHT(a) 600 +#define CYG_FB_WIDTH(a) 800 + +#define CYG_FB_DEFAULT_PALETTE_BLACK 0x00 +#define CYG_FB_DEFAULT_PALETTE_BLUE 0x01 +#define CYG_FB_DEFAULT_PALETTE_GREEN 0x02 +#define CYG_FB_DEFAULT_PALETTE_CYAN 0x03 +#define CYG_FB_DEFAULT_PALETTE_RED 0x04 +#define CYG_FB_DEFAULT_PALETTE_MAGENTA 0x05 +#define CYG_FB_DEFAULT_PALETTE_BROWN 0x06 +#define CYG_FB_DEFAULT_PALETTE_LIGHTGREY 0x07 +#define CYG_FB_DEFAULT_PALETTE_LIGHTGRAY 0x07 +#define CYG_FB_DEFAULT_PALETTE_DARKGREY 0x08 +#define CYG_FB_DEFAULT_PALETTE_DARKGRAY 0x08 +#define CYG_FB_DEFAULT_PALETTE_LIGHTBLUE 0x09 +#define CYG_FB_DEFAULT_PALETTE_LIGHTGREEN 0x0A +#define CYG_FB_DEFAULT_PALETTE_LIGHTCYAN 0x0B +#define CYG_FB_DEFAULT_PALETTE_LIGHTRED 0x0C +#define CYG_FB_DEFAULT_PALETTE_LIGHTMAGENTA 0x0D +#define CYG_FB_DEFAULT_PALETTE_YELLOW 0x0E +#define CYG_FB_DEFAULT_PALETTE_WHITE 0x0F + + +#define FB_FONT_SMILE 1 + +/*! + * \brief Initialize the framebuffer. Call this function exactly once before + * using any of the other framebuffer related functions. + */ +void ezs_fb_init(void); + +/*! + * \brief Fill block. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param width Width of the box. + * \param height Height of the box. + * \param color Color. + */ +void ezs_fb_fill_block(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 width, + cyg_ucount16 height, cyg_fb_colour color); + +/*! + * \brief Draw horizontal line. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param len length of the line. + * \param color Color. + */ +void ezs_fb_hline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, + cyg_fb_colour color); + +/*! + * \brief Draw vertical line. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param len length of the line. + * \param color Color. + */ +void ezs_fb_vline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, + cyg_fb_colour color); + +/*! + * \brief Clear the framebuffer. + * \param color Color. + */ +void ezs_fb_clear(cyg_fb_colour color); + +/* and so on.. see: http://ecos.sourceware.org/docs-latest/ref/framebuf-drawing.html */ + +/*! + * \brief Prints a character at a given position. + * \param c Character to print. + * \param x X-Axis position. + * \param y Y-Axis position. + * \param color Color. + */ +void ezs_fb_print_char(int c, cyg_ucount16 x, cyg_ucount16 y, + cyg_fb_colour color); + +/*! + * \brief Prints a string at a given position. + * \param c Pointer to null terminated string. + * \param x X-Axis position. + * \param y Y-Axis position. + * \param color Color. + */ +void ezs_fb_print_string_cur(char* c, cyg_ucount16 x, cyg_ucount16 y, + cyg_fb_colour color); + +/*! + * \brief Prints a string. + * \param c Pointer to null terminated string. + * \param color String color. + */ +void ezs_fb_print_string(char* c, cyg_fb_colour color); + +/*! + * \brief Sets the cursor to a new line. + */ +void ezs_fb_newline(void); + +/*! + * \brief Sets the cursor to an arbitrary position. + * \param x X-axis position (0 .. FB_WIDTH) + * \param y Y-axis position (0 .. FB_HEIGHT) + */ +void ezs_fb_setpos(cyg_ucount16 x, cyg_ucount16 y); + +#endif + diff --git a/firmware/libEZS/include/ezs_fft.h b/firmware/libEZS/include/ezs_fft.h new file mode 100644 index 0000000..39095aa --- /dev/null +++ b/firmware/libEZS/include/ezs_fft.h @@ -0,0 +1,42 @@ +#ifndef EZS_DSP_FFT_H +#define EZS_DSP_FFT_H + + +/** + * \defgroup dsp Digital Signal Processing (DSP) + */ + +/** + * \file ezs_fft.h Fast fourier transformation + * \ingroup dsp + * \brief calculates the power density spectrum of in[] + */ + + + +/** + * \brief Calculates the PDS of a given time domain signal + * \param in input, time domain signal. + * \param out output, out[0] to out[length / 2 - 1] contains the power density spectrum of in[] in dB + * \param length of in[]. Must be a power of 2. The size of out[] must be at least length / 2 - 1. + * + * \note Be careful, only rudimentary error checking is performed. + * \see http://en.wikipedia.org/wiki/Spectral_density + */ +void ezs_power_density_spectrum(float in[], float out[], int length); + +/** + * \brief Calculates the PDS of a given time domain signal + * \param in input, time domain signal. + * \param out output, contains the power density spectrum of in[] in dB. + * \param length of in[]. Must be a power of 2. The size of out[] must be at least length/2 - 1. + * + * This is a convenience function that calls ezs_power_density_spectrum(). + * + * \note Be careful, only rudimentary error checking is performed. + * \see http://en.wikipedia.org/wiki/Spectral_density + */ +void ezs_easy_pds(cyg_uint32 in[], float out[], int length); + + +#endif // EZS_DSP_FFT_H diff --git a/firmware/libEZS/include/ezs_gcd.h b/firmware/libEZS/include/ezs_gcd.h new file mode 100644 index 0000000..76aabd1 --- /dev/null +++ b/firmware/libEZS/include/ezs_gcd.h @@ -0,0 +1,24 @@ +#ifndef EZS_MATH_GCD_H +#define EZS_MATH_GCD_H +/** + * \defgroup math Math stuff + */ + +/** + * \file ezs_gcd.h + * \ingroup math + * \brief Greatest common divisor implementation + */ + + +/** + * \brief calculates the greatest common divisor of a and b + */ +int ezs_greatest_common_divisor(int a, int b); + +/** + * \brief calculates the lowest common multiple of a and b + */ +int ezs_lowest_common_multiple(int a, int b); + +#endif // EZS_MATH_GCD_H diff --git a/firmware/libEZS/include/ezs_gpio.h b/firmware/libEZS/include/ezs_gpio.h new file mode 100644 index 0000000..9532d97 --- /dev/null +++ b/firmware/libEZS/include/ezs_gpio.h @@ -0,0 +1,24 @@ +#ifndef EZS_GPIO_H_INCLUDED +#define EZS_GPIO_H_INCLUDED + +#include <stdbool.h> +/** + * \file ezs_gpio.h + * \ingroup hw + * \brief Access to General Purpose Input/Output pins + */ + +/** + * \brief Call this function exactly once to initialize the GPIO system. + * As long as this function has not been called, calls to other functions in + * this module have undefined behaviour. + */ +void ezs_gpio_init(void); + +/** + * \brief Sets the GPIO pin to high (enabled == true) or low (enabled == + * false). + */ +void ezs_gpio_set(bool /* enabled */); + +#endif // EZS_GPIO_H_INCLUDED diff --git a/firmware/libEZS/include/ezs_interpolation.h b/firmware/libEZS/include/ezs_interpolation.h new file mode 100644 index 0000000..c1dab00 --- /dev/null +++ b/firmware/libEZS/include/ezs_interpolation.h @@ -0,0 +1,13 @@ +#ifndef EZS_INTERPOLATION_H +#define EZS_INTERPOLATION_H + +/** + * \file ezs_interpolation.h + * \ingroup dsp + * \brief performs linear resampling of in[] and writes the result to out[] + * @see http://en.wikipedia.org/wiki/Sample_rate_conversion + * @see http://en.wikipedia.org/wiki/Linear_interpolation + */ +void ezs_resample_linear(float in[], size_t in_length, float out[], + size_t out_length); +#endif // EZS_INTERPOLATION_H diff --git a/firmware/libEZS/include/ezs_io.h b/firmware/libEZS/include/ezs_io.h new file mode 100644 index 0000000..4a1e2db --- /dev/null +++ b/firmware/libEZS/include/ezs_io.h @@ -0,0 +1,27 @@ +#ifndef EZS_IO_H_INCLUDED +#define EZS_IO_H_INCLUDED + +#include <cyg/infra/cyg_type.h> + +#define ezs_printf printf + +#define print_measurement ezs_print_measurement + +#ifdef __cplusplus +extern "C" { +#endif +/** + * \file ezs_io.h + * \brief Input/Output primitives + */ + +/** + * \brief print value annotated with timestamp. The exact means of printing are + * subject to the underlying hardware. + */ +void ezs_print_measurement(cyg_uint32 timestamp, cyg_uint32 value); + +#ifdef __cplusplus +} +#endif +#endif // EZS_IO_H_INCLUDED diff --git a/firmware/libEZS/include/ezs_io_fel.h b/firmware/libEZS/include/ezs_io_fel.h new file mode 100644 index 0000000..8a11ce7 --- /dev/null +++ b/firmware/libEZS/include/ezs_io_fel.h @@ -0,0 +1,127 @@ +#ifndef __EZS_IO_FEL_H__ +#define __EZS_IO_FEL_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define FB_BLACK 0 +#define FB_WHITE ((16*4)-1) + +#include <stdio.h> +#include <cyg/infra/cyg_type.h> + +#define FRAMEBUF fb0 +#define FB_WIDTH CYG_FB_WIDTH(FRAMEBUF) +#define FB_HEIGHT CYG_FB_HEIGHT(FRAMEBUF) + +#define CYG_FB_HEIGHT(a) 600 +#define CYG_FB_WIDTH(a) 800 + +#define CYG_FB_DEFAULT_PALETTE_BLACK 0x00 +#define CYG_FB_DEFAULT_PALETTE_BLUE 0x01 +#define CYG_FB_DEFAULT_PALETTE_GREEN 0x02 +#define CYG_FB_DEFAULT_PALETTE_CYAN 0x03 +#define CYG_FB_DEFAULT_PALETTE_RED 0x04 +#define CYG_FB_DEFAULT_PALETTE_MAGENTA 0x05 +#define CYG_FB_DEFAULT_PALETTE_BROWN 0x06 +#define CYG_FB_DEFAULT_PALETTE_LIGHTGREY 0x07 +#define CYG_FB_DEFAULT_PALETTE_LIGHTGRAY 0x07 +#define CYG_FB_DEFAULT_PALETTE_DARKGREY 0x08 +#define CYG_FB_DEFAULT_PALETTE_DARKGRAY 0x08 +#define CYG_FB_DEFAULT_PALETTE_LIGHTBLUE 0x09 +#define CYG_FB_DEFAULT_PALETTE_LIGHTGREEN 0x0A +#define CYG_FB_DEFAULT_PALETTE_LIGHTCYAN 0x0B +#define CYG_FB_DEFAULT_PALETTE_LIGHTRED 0x0C +#define CYG_FB_DEFAULT_PALETTE_LIGHTMAGENTA 0x0D +#define CYG_FB_DEFAULT_PALETTE_YELLOW 0x0E +#define CYG_FB_DEFAULT_PALETTE_WHITE 0x0F + +typedef unsigned char cyg_fb_colour; + +void ezs_fel_serial_init(void); + +void ezs_printf(const char* fmt, ...) +#ifdef __GNUC__ + __attribute__ (( format( printf, 1, 2 ) )) +#endif +; + +void ezs_log_file(const char* file, const char* fmt, ...) +#ifdef __GNUC__ + __attribute__ (( format( printf, 2, 3 ) )) +#endif +; + + +/*! + * \brief Initialize the framebuffer. Call this function exactly once before + * using any of the other framebuffer related functions. + */ +void ezs_fb_init(void); + + +/*! + * \brief Fill block. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param width Width of the box. + * \param height Height of the box. + * \param color Color. + */ +void ezs_fb_fill_block(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 width, + cyg_ucount16 height, cyg_fb_colour color); + +/*! + * \brief Draw horizontal line. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param len length of the line. + * \param color Color. + */ +void ezs_fb_hline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, + cyg_fb_colour color); + +/*! + * \brief Draw vertical line. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param len length of the line. + * \param color Color. + */ +void ezs_fb_vline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, + cyg_fb_colour color); + +/*! + * \brief Clear the framebuffer. + * \param color Color. + */ +void ezs_fb_clear(cyg_fb_colour color); + +/* and so on.. see: http://ecos.sourceware.org/docs-latest/ref/framebuf-drawing.html */ + +/*! + * \brief Prints a character at a given position. + * \param c Character to print. + * \param x X-Axis position. + * \param y Y-Axis position. + * \param color Color. + */ +void ezs_fb_print_char(int c, cyg_ucount16 x, cyg_ucount16 y, + cyg_fb_colour color); + +/*! + * \brief Prints a string at a given position. + * \param c Pointer to null terminated string. + * \param x X-Axis position. + * \param y Y-Axis position. + * \param color Color. + */ +void ezs_fb_print_string(char* c, cyg_ucount16 x, cyg_ucount16 y, + cyg_fb_colour color); +///////////////////// TERMINAL FOO ////////////////////////// + +#ifdef __cplusplus +} +#endif +#endif // __EZS_IO_FEL_H__ diff --git a/firmware/libEZS/include/ezs_keycodes.h b/firmware/libEZS/include/ezs_keycodes.h new file mode 100644 index 0000000..c9cdf8c --- /dev/null +++ b/firmware/libEZS/include/ezs_keycodes.h @@ -0,0 +1,16 @@ +#ifndef __KEYCODES_H__ +#define __KEYCODES_H__ +/** + * @file ezs_keycodes.h + * + * @brief Keyboard keycodes. + * @author Martin Hoffmann + */ + + +/** + * Get character from keyboard code. + */ +unsigned char ezs_get_char_from_keycode(unsigned char code); + +#endif diff --git a/firmware/libEZS/include/ezs_plot.h b/firmware/libEZS/include/ezs_plot.h new file mode 100644 index 0000000..25528c5 --- /dev/null +++ b/firmware/libEZS/include/ezs_plot.h @@ -0,0 +1,27 @@ +#ifndef EZS_PLOT_H +#define EZS_PLOT_H +#include <cyg/infra/cyg_type.h> +#include "ezs_io_fel.h" +/** + * \defgroup plot Graph plotting + */ + + +/** + * \file ezs_plot.h + * \ingroup plot + * \brief Helper function to plot a <b>time domain signal</b> + */ + +/** + * \brief Plots a <b>time signal</b> of given length to framebuffer + * + * @param data A pointer of data values + * @param length The size of the data array + * @param foreground The foreground color: e.g. FB_WHITE + * @param background The background color: e.g. FB_BLACK + */ +void ezs_plot(cyg_uint32 data[], size_t length, cyg_fb_colour foreground, + cyg_fb_colour background); + +#endif // EZS_PLOT_H diff --git a/firmware/libEZS/include/ezs_plot_pds.h b/firmware/libEZS/include/ezs_plot_pds.h new file mode 100644 index 0000000..7ce9ffd --- /dev/null +++ b/firmware/libEZS/include/ezs_plot_pds.h @@ -0,0 +1,18 @@ +#ifndef EZS_PLOT_PDS_H +#define EZS_PLOT_PDS_H +#include "ezs_io_fel.h" + +/** + * \file ezs_plot_pds.h + * \ingroup plot + * \brief plot an previously calculated <b>power density spectrum</b> + * + * @param spectrum The caculated pds data + * @param length The length of the pds array + * @param foreground The framebuffer foreground color + * @param background The framebuffer background color + */ +void ezs_plot_pds(float spectrum[], int length, cyg_fb_colour foreground, + cyg_fb_colour background); + +#endif // EZS_PLOT_PDS_H diff --git a/firmware/libEZS/include/ezs_sensor.h b/firmware/libEZS/include/ezs_sensor.h new file mode 100644 index 0000000..f99faf7 --- /dev/null +++ b/firmware/libEZS/include/ezs_sensor.h @@ -0,0 +1,39 @@ +#ifndef EZS_SENSOR_H_INCLUDED +#define EZS_SENSOR_H_INCLUDED + +#include <inttypes.h> + +//alias to map slide prototypes to implementation +#define ezs_adc_init ezs_sensors_init + +/*! + * \brief This function has to be called exactly once so get_sensor_(a|b|c)_value() + * and ezs_adc_get yield meaningfull results. + */ +void ezs_sensors_init(void); + +/** + * \brief Returns the current value of sensor A. + * @return the value of the sensor. + */ +uint16_t get_sensor_a_value(void); + +/** + * \brief Returns the current value of sensor B. + * @return the value of the sensor. + */ +uint16_t get_sensor_b_value(void); + +/** + * \brief Returns the current value of sensor C. + * @return the value of the sensor. + */ +uint16_t get_sensor_c_value(void); + +/** + * \brief Returns the current value of the ezs ADC. + * @return the value of the sensor. + */ +uint8_t ezs_adc_get(void); + +#endif diff --git a/firmware/libEZS/include/ezs_serial.h b/firmware/libEZS/include/ezs_serial.h new file mode 100644 index 0000000..9ecb780 --- /dev/null +++ b/firmware/libEZS/include/ezs_serial.h @@ -0,0 +1,51 @@ +#ifndef EZS_SERIAL_H_INCLUDED +#define EZS_SERIAL_H_INCLUDED + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file ezs_serial.h + * \ingroup hw + * \brief Functions for using the SERIAL interface. + */ + +/** + * \brief initializes the SERIAL interface. Call this function exactly once + * before using any other function provided by this module. + */ +void ezs_serial_init(void); + + + +#ifdef EZS_DUMB_SERIAL +/** + * \brief writes a single byte to the UART hardware register + */ +void ezs_serial_putc(uint8_t /* c */); + +/** + * \brief reads a single byte from the UART hardware register + */ +uint8_t ezs_serial_getc(void); + +/** + * \brief tells whether a byte is available on the UART + */ +uint8_t ezs_serial_char_available(void); +#else + +/** + * \brief reads a single byte from the UART input buffer, blocking if no byte is available. + */ +uint8_t ezs_serial_blocking_getc(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif // EZS_SERIAL_H_INCLUDED diff --git a/firmware/libEZS/include/ezs_stopwatch.h b/firmware/libEZS/include/ezs_stopwatch.h new file mode 100644 index 0000000..a9be9d7 --- /dev/null +++ b/firmware/libEZS/include/ezs_stopwatch.h @@ -0,0 +1,42 @@ +/*! + * @file ezs_stopwatch.h + * A stopwatch for time measurement and + * WCET generation. + * + * \ingroup hw + * @brief EZS time measurement and WCET generation + * @author Martin Hoffmann + */ + +#ifndef __STOPWATCH_H_ +#define __STOPWATCH_H_ +#include <cyg/infra/cyg_type.h> + +/** + * Start stop watch. + * @param state Pointer to a state variable + */ +void ezs_watch_start(cyg_uint32* state); + +/** + * Stop watch and return time in timer's ticks. + * @param state Pointer to a state variable + * @see ezs_watch_start + */ +cyg_uint32 ezs_watch_stop(cyg_uint32* state); + +/** + * Waits actively for WCET simulation. + * + * @param wcetticks Maximum amount of ticks to wait actively. + * Beware! Too small amounts of ticks may be undetectable. + * Thus this function may not support small granularities. + * @peram percentage Percentage of the proportion of wcetticks from which the actual execution time ticks will be randomly chosen. Values above 100 are mapped to 100. + * + * \see ezs_counter_get_resolution() + */ +void ezs_lose_time(cyg_uint32 wcetticks, cyg_uint8 percentage); + + +#endif + diff --git a/firmware/libEZS/include/ezs_trace.h b/firmware/libEZS/include/ezs_trace.h new file mode 100644 index 0000000..3c5056c --- /dev/null +++ b/firmware/libEZS/include/ezs_trace.h @@ -0,0 +1,14 @@ +#ifndef EZS_TRACER_H +#define EZS_TRACER_H + +/** + * \file ezs_trace.h + * \brief Functions for execution tracing. + */ + +/** + * \brief initializes execution tracing + */ +int ezs_trace_init(void); + +#endif diff --git a/firmware/libEZS/include/ezs_window.h b/firmware/libEZS/include/ezs_window.h new file mode 100644 index 0000000..c70b8e4 --- /dev/null +++ b/firmware/libEZS/include/ezs_window.h @@ -0,0 +1,28 @@ +#ifndef EZS_DSP_WINDOW_H +#define EZS_DSP_WINDOW_H + +/** + * \file ezs_window.h + * \ingroup dsp + * \brief Various FFT window implementations + * \author Florian Franzmann + * \note only for internal use. + */ + +/** + * \brief This function calculates the weights for a rectangulage window + * \return always returns 1.0 + */ +float ezs_rect_window(float alpha, int position, int length); + +/** + * \brief This function calculates the weights for a blackman window + */ +float ezs_blackman_window(float alpha, int position, int length); + +/*! + * \brief This function calculates the weights for a hamming window + */ +float ezs_hamming_window(float alpha, int position, int length); + +#endif // EZS_DSP_WINDOW_H diff --git a/firmware/libEZS/src/ezs_common.c b/firmware/libEZS/src/ezs_common.c new file mode 100644 index 0000000..cb81469 --- /dev/null +++ b/firmware/libEZS/src/ezs_common.c @@ -0,0 +1,10 @@ +#include "ezs_common.h" + +uint8_t ezs_low_byte(uint16_t value) { + return (uint8_t) (value & 0xFF); +} + +uint8_t ezs_high_byte(uint16_t value) { + return (uint8_t) ((value & 0xFF00) >> 8); +} + diff --git a/firmware/libEZS/src/ezs_dac.c b/firmware/libEZS/src/ezs_dac.c new file mode 100644 index 0000000..2c3295e --- /dev/null +++ b/firmware/libEZS/src/ezs_dac.c @@ -0,0 +1,21 @@ +/*! + * @file ezs_dac.c + * @brief A very simple DA converter, based on Fail* + * @author Martin Hoffmann + * \ingroup dac + */ +#include <stdint.h> +#include "ezs_dac.h" + +static volatile uint8_t ezs_dac_out_register; + +/*! + * \brief Write a value to the DAC + */ +void ezs_dac_write(uint8_t value) { + ezs_dac_out_register = value; +} + +void ezs_dac_init() { +} + diff --git a/firmware/libEZS/src/ezs_delay.c b/firmware/libEZS/src/ezs_delay.c new file mode 100644 index 0000000..67eb966 --- /dev/null +++ b/firmware/libEZS/src/ezs_delay.c @@ -0,0 +1,24 @@ +#include <pkgconf/system.h> + +#ifndef SMLPKG_TTKERNEL +#include <cyg/kernel/kapi.h> +#endif + +#include <stdlib.h> + +#include "ezs_delay.h" +#include "ezs_counter.h" + +void ezs_delay_us(cyg_uint32 microseconds) +{ + cyg_uint32 start = ezs_counter_get(); + cyg_uint32 waitticks = ((cyg_uint64)microseconds) * 1000000L / ezs_counter_resolution_ps(); + + #ifndef SMLPKG_TTKERNEL + if (microseconds >= 1000 /* 1ms */) + cyg_thread_delay(microseconds / 1000); + #endif + + while (ezs_counter_get()-start < waitticks); +} + diff --git a/firmware/libEZS/src/ezs_fb.c b/firmware/libEZS/src/ezs_fb.c new file mode 100644 index 0000000..1a1493a --- /dev/null +++ b/firmware/libEZS/src/ezs_fb.c @@ -0,0 +1,93 @@ +#include "libEZS/include/ezs_fb.h" +typedef struct { + int x; + int y; +} cursor_t; + +static cursor_t cursor; +void ezs_fb_init(void) { + CYG_FB_ON(FRAMEBUF); + CYG_FB_FILL_BLOCK(FRAMEBUF, 0, 0, FB_WIDTH, FB_HEIGHT, 0); + cursor.x = 0; + cursor.y = 0; +} + + +void ezs_fb_fill_block(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 width, + cyg_ucount16 height, cyg_fb_colour color) { + CYG_FB_FILL_BLOCK(FRAMEBUF, x, y, width, height, color); +} + + +void ezs_fb_hline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, + cyg_fb_colour color) { + CYG_FB_WRITE_HLINE(FRAMEBUF, x, y, len, color); +} + + +void ezs_fb_vline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, + cyg_fb_colour color) { + + CYG_FB_WRITE_VLINE(FRAMEBUF, x, y, len, color); +} + +void ezs_fb_clear(cyg_fb_colour color) { + ezs_fb_fill_block(0, 0, FB_WIDTH, FB_HEIGHT, color); +} + + +void ezs_fb_print_char( int ch, cyg_ucount16 x, cyg_ucount16 y, + cyg_fb_colour color) { + int i, j; + + for (i = ch * 8; i < (ch * 8) + 8; i++) { + unsigned char row = g_8x8_font[i]; + + for (j = 0; j < 8; j++) { + if ((row & (0x80 >> j)) != 0) { + ezs_fb_fill_block(x + j, y + (i - ch * 8), 1, 1, color); + } + } + } + +} + +void ezs_fb_print_string(char* c, cyg_fb_colour color) { + ezs_fb_print_string_cur(c, cursor.x, cursor.y, color); +} + +void ezs_fb_print_string_cur(char* c, cyg_ucount16 x, cyg_ucount16 y, + cyg_fb_colour color) { + char* ch = c; + + while (*ch != '\0') { + if (*ch == '\n') { + ezs_fb_newline(); + } + else { + ezs_fb_print_char((*ch) + 0, x , y, color); + x = x + 8; + + if ( x >= FB_WIDTH - 8) { + y += 8; + x = 0; + } + } + + ch++; + } + + cursor.x = x; + cursor.y = y; +} + +void ezs_fb_newline(void) { + cursor.x = 0; + cursor.y += 8; +} + +void ezs_fb_setpos(cyg_ucount16 x, cyg_ucount16 y) { + cursor.x = x; + cursor.y = y; +} + diff --git a/firmware/libEZS/src/ezs_fft.c b/firmware/libEZS/src/ezs_fft.c new file mode 100644 index 0000000..c42549e --- /dev/null +++ b/firmware/libEZS/src/ezs_fft.c @@ -0,0 +1,219 @@ +/**************************************************************************** +* rfft(float X[],int N) * +* A real-valued, in-place, split-radix FFT program * +* Decimation-in-time, cos/sin in second loop * +* Input: float X[1]...X[N] (NB Fortran style: 1st pt X[1] not X[0]!) * +* Length is N=2**M (i.e. N must be power of 2--no error checking) * +* Output in X[1]...X[N], in order: * +* [Re(0), Re(1),..., Re(N/2), Im(N/2-1),..., Im(1)] * +* * +* Original Fortran code by Sorensen; published in H.V. Sorensen, D.L. Jones,* +* M.T. Heideman, C.S. Burrus (1987) Real-valued fast fourier transform * +* algorithms. IEEE Trans on Acoustics, Speech, & Signal Processing, 35, * +* 849-863. Adapted to C by Bill Simpson, 1995 wsimpson@uwinnipeg.ca * +****************************************************************************/ + +#include <math.h> +#include <assert.h> +#include <string.h> +#include <float.h> +#include "ezs_fft.h" +#include "ezs_window.h" + +#define EZS_ADC_MAXIMUM 255.0f + +void rfft(float X[], int N) { + assert(log(N) / log(2.0) == floor(log(N) / log(2.0))); + int I, I0, I1, I2, I3, I4, I5, I6, I7, I8, IS, ID; + int J, K, M, N2, N4, N8; + float A, A3, CC1, SS1, CC3, SS3, E, R1, XT; + float T1, T2, T3, T4, T5, T6; + + M = (int)(log(N) / log(2.0)); /* N=2^M */ + + /* ----Digit reverse counter--------------------------------------------- */ + J = 1; + + for (I = 1; I < N; I++) { + if (I < J) { + XT = X[J]; + X[J] = X[I]; + X[I] = XT; + } + + K = N / 2; + + while (K < J) { + J -= K; + K /= 2; + } + + J += K; + } + + /* ----Length two butterflies--------------------------------------------- */ + IS = 1; + ID = 4; + + do { + for (I0 = IS; I0 <= N; I0 += ID) { + I1 = I0 + 1; + R1 = X[I0]; + X[I0] = R1 + X[I1]; + X[I1] = R1 - X[I1]; + } + + IS = 2 * ID - 1; + ID = 4 * ID; + } + while (IS < N); + + /* ----L shaped butterflies----------------------------------------------- */ + N2 = 2; + + for (K = 2; K <= M; K++) { + N2 = N2 * 2; + N4 = N2 / 4; + N8 = N2 / 8; + E = (float) 6.2831853071719586f / N2; + IS = 0; + ID = N2 * 2; + + do { + for (I = IS; I < N; I += ID) { + I1 = I + 1; + I2 = I1 + N4; + I3 = I2 + N4; + I4 = I3 + N4; + T1 = X[I4] + X[I3]; + X[I4] = X[I4] - X[I3]; + X[I3] = X[I1] - T1; + X[I1] = X[I1] + T1; + + if (N4 != 1) { + I1 += N8; + I2 += N8; + I3 += N8; + I4 += N8; + T1 = (X[I3] + X[I4]) * .7071067811865475244f; + T2 = (X[I3] - X[I4]) * .7071067811865475244f; + X[I4] = X[I2] - T1; + X[I3] = -X[I2] - T1; + X[I2] = X[I1] - T2; + X[I1] = X[I1] + T2; + } + } + + IS = 2 * ID - N2; + ID = 4 * ID; + } + while (IS < N); + + A = E; + + for (J = 2; J <= N8; J++) { + A3 = 3.0 * A; + CC1 = cos(A); + SS1 = sin(A); /*typo A3--really A?*/ + CC3 = cos(A3); /*typo 3--really A3?*/ + SS3 = sin(A3); + A = (float)J * E; + IS = 0; + ID = 2 * N2; + + do { + for (I = IS; I < N; I += ID) { + I1 = I + J; + I2 = I1 + N4; + I3 = I2 + N4; + I4 = I3 + N4; + I5 = I + N4 - J + 2; + I6 = I5 + N4; + I7 = I6 + N4; + I8 = I7 + N4; + T1 = X[I3] * CC1 + X[I7] * SS1; + T2 = X[I7] * CC1 - X[I3] * SS1; + T3 = X[I4] * CC3 + X[I8] * SS3; + T4 = X[I8] * CC3 - X[I4] * SS3; + T5 = T1 + T3; + T6 = T2 + T4; + T3 = T1 - T3; + T4 = T2 - T4; + T2 = X[I6] + T6; + X[I3] = T6 - X[I6]; + X[I8] = T2; + T2 = X[I2] - T3; + X[I7] = -X[I2] - T3; + X[I4] = T2; + T1 = X[I1] + T5; + X[I6] = X[I1] - T5; + X[I1] = T1; + T1 = X[I5] + T4; + X[I5] = X[I5] - T4; + X[I2] = T1; + } + + IS = 2 * ID - N2; + ID = 4 * ID; + } + while (IS < N); + } + } + + return; +} + +float db(float real, float imag) { + float square = real * real + imag * imag; + + if (square == 0.0f) { + square = FLT_MIN * 10.0f; + } + + float ret = 10.0f * log(square) / log(10.0f); + return ret; +} + +void ezs_power_density_spectrum(float in[], float out[], int length) { + assert(length > 0); + assert(log((float) length) / log(2.0f) == floor(log((float) length) / log( + 2.0f))); + + { + int i; + + for (i = 0; i < length; ++i) { + out[i] = ezs_blackman_window(0.16f, i, length) * in[i]; + } + } + rfft(&out[-1], length); + float scale = (float) length / 2.0f; + { + int i; + + for (i = 0; i < length; ++i) { + int second = length - i - 1; + assert(second < length); + assert(0 <= second); + out[i] = db(out[i] / scale, out[length - i - 1] / scale); + } + } +} + +void ezs_easy_pds(cyg_uint32 in[], float out[], int length) { + float in_f[length]; + + { + int i = 0; + + for (i = 0; i < length; ++i) { + in_f[i] = (((float) in[i]) - (EZS_ADC_MAXIMUM / 2.0f)) / EZS_ADC_MAXIMUM; + } + } + + float tmp[length]; + ezs_power_density_spectrum(in_f, tmp, length); + + memcpy(out, tmp, (length / 2) * sizeof(float)); +} + diff --git a/firmware/libEZS/src/ezs_gcd.c b/firmware/libEZS/src/ezs_gcd.c new file mode 100644 index 0000000..6029589 --- /dev/null +++ b/firmware/libEZS/src/ezs_gcd.c @@ -0,0 +1,20 @@ +#include "ezs_gcd.h" +#include <math.h> +#include <stdlib.h> + +int ezs_greatest_common_divisor(int a, int b) { + a = abs(a); + b = abs(b); + + while (b != 0) { + int tmp = b; + b = a % b; + a = tmp; + } + + return a; +} + +int ezs_lowest_common_multiple(int a, int b) { + return abs(a * b) / ezs_greatest_common_divisor(a, b); +} diff --git a/firmware/libEZS/src/ezs_impure_ptr.c b/firmware/libEZS/src/ezs_impure_ptr.c new file mode 100644 index 0000000..2bcce4e --- /dev/null +++ b/firmware/libEZS/src/ezs_impure_ptr.c @@ -0,0 +1 @@ +struct _reent* _impure_ptr = 0; diff --git a/firmware/libEZS/src/ezs_interpolation.c b/firmware/libEZS/src/ezs_interpolation.c new file mode 100644 index 0000000..17022d5 --- /dev/null +++ b/firmware/libEZS/src/ezs_interpolation.c @@ -0,0 +1,82 @@ +#include "ezs_gcd.h" +#include <stddef.h> +#include <assert.h> + +float linear_interpolation(float first, float second, float alpha) { + float ret = (1.0f - alpha) * first + alpha * second; + printf("%f * %f + %f * %f = %f\n", 1.0f - alpha, first, alpha, second, ret); + return ret; +} + +void ezs_resample_linear(float in[], size_t in_length, float out[], + size_t out_length) { + size_t lcm = ezs_lowest_common_multiple(in_length, out_length); + size_t size = lcm + 1; + float tmp[size]; + + + { + size_t in_stride = size / (in_length - 1); + size_t i = 0; + + for (i = 0; i < in_length - 1; ++i) { + size_t j = 0; + + for (j = 0; j < in_stride; ++j) { + float alpha = ((float) (j)) / ((float) in_stride - 1); + + size_t first_position = i; + size_t second_position = i + 1; + + size_t target_position = i * in_stride + j; + assert(target_position < size); + + tmp[target_position] = linear_interpolation(in[first_position], + in[second_position], alpha); + } + } + + tmp[size - 1] = in[in_length - 1]; + } + + { + size_t out_stride = lcm / (out_length - 1); + size_t i = 0; + + for (i = 0; i < out_length; ++i) { + size_t source_position = i * out_stride; + assert(source_position < size); + + out[i] = tmp[source_position]; + } + + out[out_length - 1] = tmp[size - 1]; + } +} + +/* +int main() +{ +#define IN_LENGTH 512 +#define OUT_LENGTH 320 + float input[IN_LENGTH]; + { + int i; + for (i = 0; i < IN_LENGTH; ++i) { + input[i] = i + 1; + } + } + float output[OUT_LENGTH]; + + ezs_resample_linear(input, IN_LENGTH, output, OUT_LENGTH); + int i; + for (i = 0; i < IN_LENGTH; ++i) { + printf("%f ", input[i]); + } + printf("\n"); + for (i = 0; i < OUT_LENGTH; ++i) { + printf("%f ", output[i]); + } + printf("\n"); +} +*/ diff --git a/firmware/libEZS/src/ezs_io.c b/firmware/libEZS/src/ezs_io.c new file mode 100644 index 0000000..cea6a14 --- /dev/null +++ b/firmware/libEZS/src/ezs_io.c @@ -0,0 +1,8 @@ +#include "ezs_io.h" +#include <stdio.h> +#include "ezs_counter.h" + +void ezs_print_measurement(cyg_uint32 timestamp, cyg_uint32 value) { + printf("time: %u value: %u\n", (unsigned int)timestamp, (unsigned int)value); +} + diff --git a/firmware/libEZS/src/ezs_io_fel.c b/firmware/libEZS/src/ezs_io_fel.c new file mode 100644 index 0000000..2ca55ea --- /dev/null +++ b/firmware/libEZS/src/ezs_io_fel.c @@ -0,0 +1,112 @@ +#include "ezs_io_fel.h" + +#define EZSMAGIC "5c63" +#define EZSINITMAGIC "1a44" + + +void ezs_fel_serial_init() { + printf("%s:INIT\n", EZSINITMAGIC); +} + + +void ezs_printf(const char *fmt, ...) { + printf("%s:MSG\n", EZSMAGIC); + va_list args; + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); + printf("\n%s:ENDMSG:PTY\n", EZSMAGIC); +} + +void ezs_log_file(const char *file, const char *fmt, ...) { + printf("%s:MSG\n", EZSMAGIC); + va_list args; + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); + printf("\n%s:ENDMSG:FILE:%s\n", EZSMAGIC, file); +} + + +/*! + * \brief Initialize the framebuffer. Call this function exactly once before + * using any of the other framebuffer related functions. + */ +void ezs_fb_init(void) { + printf("%s:RPC:GUI:init()\n", EZSMAGIC); +} + + +/*! + * \brief Fill block. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param width Width of the box. + * \param height Height of the box. + * \param color Color. + */ +void ezs_fb_fill_block(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 width, + cyg_ucount16 height, cyg_fb_colour color) { + printf("%s:RPC:GUI:fill_block(%d, %d, %d, %d, %d)\n", EZSMAGIC, x, y, width, height, color); +} + +/*! + * \brief Draw horizontal line. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param len length of the line. + * \param color Color. + */ +void ezs_fb_hline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, + cyg_fb_colour color) { + printf("%s:RPC:GUI:hline(%d, %d, %d, %d)\n", EZSMAGIC, x, y, len, color); +} + +/*! + * \brief Draw vertical line. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param len length of the line. + * \param color Color. + */ +void ezs_fb_vline(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 len, + cyg_fb_colour color) { + printf("%s:RPC:GUI:vline(%d, %d, %d, %d)\n", EZSMAGIC, x, y, len, color); +} + +/*! + * \brief Clear the framebuffer. + * \param color Color. + */ +void ezs_fb_clear(cyg_fb_colour color) { + printf("%s:RPC:GUI:clear(%d)\n", EZSMAGIC, color); +} + +/* and so on.. see: http://ecos.sourceware.org/docs-latest/ref/framebuf-drawing.html */ + +/*! + * \brief Prints a character at a given position. + * \param c Character to print. + * \param x X-Axis position. + * \param y Y-Axis position. + * \param color Color. + */ +void ezs_fb_print_char(int c, cyg_ucount16 x, cyg_ucount16 y, + cyg_fb_colour color) { + printf("%s:RPC:GUI:print_char(\"%c\", %d, %d, %d)\n", EZSMAGIC, c, x, y, color); +} + +/*! + * \brief Prints a string at a given position. + * \param c Pointer to null terminated string. + * \param x X-Axis position. + * \param y Y-Axis position. + * \param color Color. + */ +void ezs_fb_print_string(char* c, cyg_ucount16 x, cyg_ucount16 y, + cyg_fb_colour color) { + // TODO: escaping for newlines here... + printf("%s:RPC:GUI:print_string_cur(\"%s\", %d, %d, %d)\n", EZSMAGIC, c, x, y, color); +} + +///////////////////// TERMINAL FOO ////////////////////////// diff --git a/firmware/libEZS/src/ezs_plot.c b/firmware/libEZS/src/ezs_plot.c new file mode 100644 index 0000000..c86cb39 --- /dev/null +++ b/firmware/libEZS/src/ezs_plot.c @@ -0,0 +1,147 @@ +#include "ezs_plot.h" +#include "ezs_io_fel.h" +#include <stdio.h> +#include <math.h> +#include <assert.h> + + +void ezs_plot(cyg_uint32 data[], size_t length, cyg_fb_colour foreground, + cyg_fb_colour background) { + ezs_fb_clear(background); + { + size_t i = 0; + size_t step = FB_WIDTH/ length; + for (i = 1; i < length; ++i) { + assert(data[i] < 256); + cyg_ucount16 y = (((int) data[i]) * FB_HEIGHT) / 500; + + ezs_fb_vline(i*step, FB_HEIGHT - y, 4, foreground); + } + } +} + +void ezs_plot_drawCoordSystem(void) { + // y-axis + ezs_fb_vline(1, 0, FB_HEIGHT, CYG_FB_DEFAULT_PALETTE_BLACK); + ezs_fb_hline(0, 1, 3, CYG_FB_DEFAULT_PALETTE_BLACK); + + // x-axis + ezs_fb_hline(0, FB_HEIGHT - 2, FB_WIDTH, CYG_FB_DEFAULT_PALETTE_BLACK); + ezs_fb_vline(FB_WIDTH - 2, FB_HEIGHT - 3, 3, CYG_FB_DEFAULT_PALETTE_BLACK); +} + +void ezs_plot_markXaxis(short numberOfMarks) { + + int delta = (FB_WIDTH - 1) / (numberOfMarks + 1); + int shift = delta + 1; + + int i; + + for (i = 0; i < numberOfMarks; ++i) { + ezs_fb_vline(shift, FB_HEIGHT - 4, 3, CYG_FB_DEFAULT_PALETTE_BLACK); + shift += delta; + } +} + +void ezs_plot_markYaxis(short numberOfMarks) { + + int delta = (FB_HEIGHT - 1) / (numberOfMarks + 1); + int shift = FB_HEIGHT - 1 - delta; + + int i; + + for (i = 0; i < numberOfMarks + 1; ++i) { + ezs_fb_hline(0, shift, 3, CYG_FB_DEFAULT_PALETTE_BLACK); + shift -= delta; + } +} + +void ezs_plot_drawBarOnCoordSystem(float upperBound, float lowerBound, + float inputArray[], int sizeOfArray) { + + // Clear FrameBuffer + ezs_fb_clear(CYG_FB_DEFAULT_PALETTE_WHITE); + + // Flag for bufferOverflow/Underflow + bool overflow; + bool underflow; + + // Define max / min Area Y-Axis + int maxValueY = FB_HEIGHT - ((FB_HEIGHT - 1) / 11) * 10 - 1; //=21 + int minValueY = FB_HEIGHT - 1; //=239 + int area = minValueY - maxValueY; //=218 + + // Define half block width + int halfBlockWidth = ((FB_WIDTH - 1) / (sizeOfArray + 1)) / 3; + + // Temp variables for scaling + assert(upperBound > lowerBound); + float scaleTo = upperBound - lowerBound; + float offset = 0 - lowerBound; + float scaledValue; + int scaledValueInt; + + // Bar drawing loop + int delta = (FB_WIDTH - 1) / (sizeOfArray + 1); + int shift = delta + 1; + int i; + + for (i = 0; i < sizeOfArray; ++i) { + + scaledValue = (inputArray[i] + offset) / scaleTo; + + // Overflow check! + if (scaledValue > 1.0) { + scaledValue = 1.0; + overflow = true; + } + else { + overflow = false; + } + + // Underflow check! + if (scaledValue < 0.0) { + scaledValue = 0.0; + underflow = true; + } + else { + underflow = false; + } + + scaledValueInt = scaledValue * area; + + if (!overflow) { + if (!underflow) { + ezs_fb_fill_block(shift - halfBlockWidth, minValueY - scaledValueInt, + halfBlockWidth * 2, scaledValueInt, CYG_FB_DEFAULT_PALETTE_BLUE); + } + else { + ezs_fb_fill_block(shift - halfBlockWidth, minValueY, halfBlockWidth * 2, 2, + CYG_FB_DEFAULT_PALETTE_YELLOW); + } + } + else { + ezs_fb_fill_block(shift - halfBlockWidth, minValueY - scaledValueInt, + halfBlockWidth * 2, scaledValueInt, CYG_FB_DEFAULT_PALETTE_RED); + } + + shift += delta; + } + + // Draw coord system + ezs_plot_drawCoordSystem(); + ezs_plot_markYaxis(10); + ezs_plot_markXaxis(sizeOfArray); + + /*! + * \brief Fill block. + * \param x X-Axis start position. + * \param y Y-Axis start position. + * \param width Width of the box. + * \param height Height of the box. + * \param color Color. + */ +//void ezs_fb_fill_block(cyg_ucount16 x, cyg_ucount16 y, cyg_ucount16 width,cyg_ucount16 height,cyg_fb_colour color); + + +} diff --git a/firmware/libEZS/src/ezs_plot_pds.c b/firmware/libEZS/src/ezs_plot_pds.c new file mode 100644 index 0000000..2a87ba9 --- /dev/null +++ b/firmware/libEZS/src/ezs_plot_pds.c @@ -0,0 +1,51 @@ +#include "ezs_plot_pds.h" + +#include "ezs_io_fel.h" + +//#include <cyg/infra/cyg_type.h> +//#include <cyg/io/framebuf.h> + +#include <assert.h> +#include <stddef.h> + +static void plot_spectrum(float* spectrum, int length, + cyg_ucount16 widget_x, cyg_ucount16 widget_y, + cyg_ucount16 widget_width, cyg_ucount16 widget_height, + cyg_fb_colour widget_color) { + assert(widget_x + widget_width <= FB_WIDTH); + assert(widget_y + widget_height <= FB_HEIGHT); + + int bar_width = widget_width / length; + int bar_unit = widget_height / 140; + { + int i; + + for (i = 0; i < length; ++i) { + int x = i * bar_width + widget_x; + assert(x < widget_x + widget_width); + assert(x >= widget_x); + + int width = bar_width; + assert(width >= 0); + + int height = bar_unit * (spectrum[i] + 140.0f); + assert(height >= 0); + + int y = widget_y + widget_height - height; + assert(y <= widget_y + widget_height); + assert(y >= widget_y); + + + ezs_fb_fill_block(x, y, width, height, widget_color); + } + } +} + +void ezs_plot_pds(float spectrum[], int length, cyg_fb_colour foreground, + cyg_fb_colour background) { + assert(length <= FB_WIDTH); + + ezs_fb_clear(background); + plot_spectrum(spectrum, length, 0, 0, FB_WIDTH, FB_HEIGHT, foreground); +} + diff --git a/firmware/libEZS/src/ezs_sensor.c b/firmware/libEZS/src/ezs_sensor.c new file mode 100644 index 0000000..60dd85c --- /dev/null +++ b/firmware/libEZS/src/ezs_sensor.c @@ -0,0 +1,78 @@ +#include <math.h> +#include <stdlib.h> + +#include "ezs_sensor.h" +#include "ezs_counter.h" + +static const unsigned int SENSOR_FREQ[] = { 10, 40, 8 }; +static const float SENSOR_NOISE_PERCENT[] = { 0.1, 0.1, 0.1 }; + +#define SENSOR_COUNT (sizeof SENSOR_FREQ / sizeof SENSOR_FREQ[0]) + +static float SENSOR_OMEGA[SENSOR_COUNT]; +static float SENSOR_NOISE[SENSOR_COUNT]; +static const float AMPLITUDE = UINT16_MAX / 4; + +void ezs_sensors_init(void) { + ezs_counter_init(); + + unsigned int i; + for (i = 0; i < SENSOR_COUNT; ++i) { + SENSOR_OMEGA[i] = 2. * M_PI * SENSOR_FREQ[i]; + SENSOR_NOISE[i] = AMPLITUDE * SENSOR_NOISE_PERCENT[i]; + } +} + +static uint16_t get_sensor_value(unsigned int sensor_id, cyg_uint32 ticks) { + + cyg_resolution_t resolution = ezs_counter_get_resolution(); + + float time = (ticks * (float) resolution.dividend) / (resolution.divisor * 1e9f); + + float res = sinf(SENSOR_OMEGA[sensor_id] * time); + res *= AMPLITUDE; // Amplify. + + int16_t noise = 0; + if (SENSOR_NOISE[sensor_id] != 0.0) { + noise = rand() + % ((int) (SENSOR_NOISE[sensor_id] * 2)) // Cap to the sensor noise factor + - SENSOR_NOISE[sensor_id]; // Shift into the signed value + } + + uint16_t value = + res // The result as signed value + + (UINT16_MAX / 2) // Scale up to unsigned value. + + noise; // Add the noise, skrillex style. + + return value; +} + +uint16_t get_sensor_a_value(void) { + cyg_uint32 ticks = ezs_counter_get(); + return get_sensor_value(0, ticks); +} + +uint16_t get_sensor_b_value(void) { + cyg_uint32 ticks = ezs_counter_get(); + return get_sensor_value(1, ticks); +} + +uint16_t get_sensor_c_value(void) { + cyg_uint32 ticks = ezs_counter_get(); + return get_sensor_value(2, ticks); +} + +uint8_t ezs_adc_get() { + cyg_uint32 ticks = ezs_counter_get(); + + uint64_t val_a = get_sensor_value(0, ticks); + uint64_t val_b = get_sensor_value(1, ticks); + + //scale to 8bit + uint8_t ret = ((val_a+val_b)*UINT8_MAX )/(2*UINT16_MAX); + return ret; +} + +uint8_t ezs_adc_read(void) { + return ezs_adc_get(); +} diff --git a/firmware/libEZS/src/ezs_stopwatch.c b/firmware/libEZS/src/ezs_stopwatch.c new file mode 100644 index 0000000..2b05b84 --- /dev/null +++ b/firmware/libEZS/src/ezs_stopwatch.c @@ -0,0 +1,16 @@ +#include "ezs_stopwatch.h" +#include "ezs_counter.h" +#include <stdlib.h> + +void ezs_watch_start(cyg_uint32* state) { + *state = ezs_counter_get(); +} + +cyg_uint32 ezs_watch_stop(cyg_uint32* state) { + return ezs_counter_get() - (*state); +} + + +void ezs_lose_time(cyg_uint32 wcet, cyg_uint8 percentage) { +} + diff --git a/firmware/libEZS/src/ezs_tracer.cpp b/firmware/libEZS/src/ezs_tracer.cpp new file mode 100644 index 0000000..abc5f84 --- /dev/null +++ b/firmware/libEZS/src/ezs_tracer.cpp @@ -0,0 +1,49 @@ +#include <pkgconf/system.h> +#include <cyg/io/io.h> +#include <cyg/error/codes.h> +#include <stdint.h> +#include <stdio.h> +#include "ezs_counter.h" +#include "ezs_io_fel.h" + +#ifndef TASKLOG_LEN +// Providing a default +#define TASKLOG_LEN 256 +#endif +static volatile struct { cyg_uint32 timestamp; cyg_uint32 id;} tasklog[TASKLOG_LEN]; +volatile int tasklog_index = TASKLOG_LEN; + +#define TRACE_FILE "tracefile" +//! No Time triggered kernel -> normal event triggered ecos: +#ifndef SMLPKG_TTKERNEL +#include <cyg/kernel/kernel.hxx> // C Kernel-API +extern "C" { +#include <cyg/kernel/kapi.h> // C Kernel-API +} +class Cyg_Thread; + + +extern "C" void ezs_instrument(Cyg_Thread* current, Cyg_Thread* next) { + int id = next->get_priority(); // abuse the priority (which must be unique) as sort-of thread-id +#else +#include <sml/ttkernel/task.hxx> +extern "C" void ezs_instrument(TT_Task* current, TT_Task* next){ + int id = next->get_id(); +#endif + if (tasklog_index < TASKLOG_LEN) + { + tasklog[tasklog_index].timestamp = ezs_counter_get(); + tasklog[tasklog_index].id = id; + tasklog_index++; + + if (tasklog_index == TASKLOG_LEN) + { + int i; + ezs_log_file(TRACE_FILE, "# time\tthreadid\n"); + for (i=0; i<TASKLOG_LEN; i++) + ezs_log_file(TRACE_FILE, "%i\t%i\n", tasklog[i].timestamp, tasklog[i].id); + ezs_log_file(TRACE_FILE, "# end of tasklog\n"); + } + } +} + diff --git a/firmware/libEZS/src/ezs_window.c b/firmware/libEZS/src/ezs_window.c new file mode 100644 index 0000000..017a5ea --- /dev/null +++ b/firmware/libEZS/src/ezs_window.c @@ -0,0 +1,34 @@ +#include "ezs_window.h" +#include <math.h> + +#ifndef M_PI +#define M_PI 3.14159265358979323846f /* pi */ +#endif + +#include <assert.h> + +float ezs_rect_window(float alpha, int position, int length) { + return 1.0f; +} + +float ezs_blackman_window(float alpha, int position, int length) { + assert(length > 0); + assert(position >= 0); + assert(position < length); + assert(alpha >= 0.0f); + assert(1.0f >= alpha); + + float a[3] = {(1.0f - alpha) / 2.0f, 0.5f, alpha / 2.0f}; + return a[0] + - a[1] * cos((2.0f * M_PI * ((float) position)) / ((float) (length - 1))) + + a[2] * cos((4.0f * M_PI * ((float) position)) / ((float) (length - 1))); +} + +float ezs_hamming_window(float alpha, int position, int length) { + assert(length > 0); + assert(position >= 0); + assert(position < length); + + return 0.54f - 0.46f * cos((2.0f * M_PI * (float) position) / (float) ( + length - 1)); +} diff --git a/firmware/motor.c b/firmware/motor.c new file mode 100644 index 0000000..61ecdcb --- /dev/null +++ b/firmware/motor.c @@ -0,0 +1,83 @@ +#include "axis.h" +#include "motor.h" +#include "diy_gpio.h" +#include "ezs_io.h" +#include <stdlib.h> +#include <stdio.h> + +uint8_t const phases_28BYJ48[8][4] = { // [phase][pin] +// -------- pins ---------- +// Winding A B A B +// Motor Pin 1 2 3 4 +// Color Bl Pi Ye Or + { 1, 1, 0, 0}, + { 0, 1, 0, 0}, + { 0, 1, 1, 0}, + { 0, 0, 1, 0}, + { 0, 0, 1, 1}, + { 0, 0, 0, 1}, + { 1, 0, 0, 1}, + { 1, 0, 0, 0} +}; + +void setMotorValues_28BYJ48(motor* motor, uint32_t port, uint16_t pin0, uint16_t pin1, uint16_t pin2, uint16_t pin3) { + motor->port = port; + motor->pins[0] = pin0; + motor->pins[1] = pin1; + motor->pins[2] = pin2; + motor->pins[3] = pin3; + motor->phases = &(phases_28BYJ48[0]); + motor->phasesCount = 8; + motor->stepsPerRevo = 64; + motor->gearRatio = 64; + motor->stepsLeft = 0; + motor->currentSpeed = 1e6; + motor->currentTopSpeed = 0; + motor->currentPhase = 0; +} + +void setMotorMotion(motor* motor, int32_t steps, uint16_t speed) { + motor->currentSpeed = MOTOR_BOTTOMSPEED; + motor->currentTopSpeed = 1e6 / speed; + if (motor->currentTopSpeed < motor->currentSpeed) motor->currentSpeed = motor->currentTopSpeed; + motor->stepsLeft = steps; +} + +uint32_t updateMotor(motor* motor) { + if (motor->stepsLeft == 0) return 1e6; + + int8_t dir = (motor->stepsLeft > 0) - (motor->stepsLeft < 0); + uint8_t toClear = 0; + uint8_t toSet = 0; + motor->currentPhase = (motor->currentPhase + dir + motor->phasesCount) % motor->phasesCount; + if (dir == 1) motor->stepsLeft--; + else motor->stepsLeft++; + + uint8_t pin = 0; + while (pin < 4) { + if (motor->phases[motor->currentPhase][pin] == 0) + toClear |= motor->pins[pin]; + else + toSet |= motor->pins[pin]; + pin++; + } + + diy_gpio_clear_pins(motor->port, toClear); + diy_gpio_set_pins(motor->port, toSet); + + if (motor->currentTopSpeed > MOTOR_BOTTOMSPEED) { // requires acceleration + uint32_t speedPerStep = (MOTOR_BOTTOMSPEED - motor->currentTopSpeed) / 10; + if ((MOTOR_BOTTOMSPEED - motor->currentTopSpeed) % 10 != 0) speedPerStep++; // it's basically ceil() + if (motor->stepsLeft <= 10) { + if (motor->stepsLeft + 1 == (MOTOR_BOTTOMSPEED - motor->currentSpeed) / speedPerStep) { + motor->currentSpeed += speedPerStep; + if (motor->currentSpeed < MOTOR_BOTTOMSPEED) motor->currentSpeed = MOTOR_BOTTOMSPEED; + } + } else if (motor->currentSpeed > motor->currentTopSpeed) { + motor->currentSpeed -= speedPerStep; + if (motor->currentSpeed > motor->currentTopSpeed) motor->currentSpeed = motor->currentTopSpeed; + } + } + + return motor->currentSpeed; +} diff --git a/firmware/motor.h b/firmware/motor.h new file mode 100644 index 0000000..f468831 --- /dev/null +++ b/firmware/motor.h @@ -0,0 +1,32 @@ +#ifndef HEADER_MOTOR +#define HEADER_MOTOR + +#include <stdint.h> + +#define MOTOR_BOTTOMSPEED (int)2e5 + +uint8_t const phases_28BYJ48[8][4]; + +typedef struct { + uint32_t port; + uint16_t pins[4]; + const uint8_t (*phases)[4]; + uint8_t phasesCount; + uint8_t stepsPerRevo; + uint8_t gearRatio; + int volatile stepsLeft; + uint32_t volatile currentSpeed; + uint32_t volatile currentTopSpeed; + uint8_t currentPhase; +} motor; + +// Sets default values for motors used in the ToyRep +void setMotorValues_28BYJ48(motor* motor, uint32_t port, uint16_t pin0, uint16_t pin1, uint16_t pin2, uint16_t pin3); + +// Speed in steps per second +void setMotorMotion(motor* motor, int32_t steps, uint16_t speed); + +// Returns time for which the motor thread should wait +uint32_t updateMotor(motor* motor); + +#endif diff --git a/firmware/myLibEZS/exclude b/firmware/myLibEZS/exclude new file mode 100644 index 0000000..fa04264 --- /dev/null +++ b/firmware/myLibEZS/exclude @@ -0,0 +1,4 @@ +ezs_plot_pds* +ezs_plot* +ezs_stopwatch* +ezs_fb* diff --git a/firmware/system.odg b/firmware/system.odg new file mode 100644 index 0000000000000000000000000000000000000000..de1dd087e1a3d3db122246be56605102550d0f25 GIT binary patch literal 13827 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 literal 0 HcmV?d00001 diff --git a/firmware/test.c b/firmware/test.c new file mode 100644 index 0000000..fcb091c --- /dev/null +++ b/firmware/test.c @@ -0,0 +1,12 @@ +#include "gcode.h" +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> + +int main(int argc, char** argv) { + char test[] = "G1 X123.456 Y666"; + gcode gc; + readGcode(&gc, test); + printf("%f, %f\n", *getGcodeParam(&gc, 'X'), *getGcodeParam(&gc, 'Y')); + return 0; +} diff --git a/pinmap.ods b/pinmap.ods new file mode 100644 index 0000000000000000000000000000000000000000..442f39325ac65f434ae0c5c987618d5a7ce57e87 GIT binary patch literal 10369 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 literal 0 HcmV?d00001 diff --git a/pinmap.pdf b/pinmap.pdf new file mode 100644 index 0000000000000000000000000000000000000000..54a0688767cf5de1d1594fb550b66c44784be030 GIT binary patch literal 19210 zcmZ^}b95!$y2jf{I#ws?*tTukwr$(CZQJVDPC9m0)Uj>e^tbmu`;2q%U4PY>Rb#HV zs($l%p7G8imJ<@8rl(<oA|5Cj=p6VpkPF3tM~7!?U;)L&MJr`&W9npv$M`j(Kr3Qy z<z(zYD`KVZWGrNCXlrE5!vp2$<Y26C4ds@Voh2E$KZ+3i_=2o~*<Ph2A)##sb<lQY zlh+5mo6XH)VwJY~bg4NWHNuXNar{6hS6G($Xp}Yjqy*J|LSt+Ead~&!sr89%oDHzd z_I-Z6JLLWSneLP3oAbC^J!wsCd)nDG)#6P9xQElG-)#Ba^Je(+GJm&GdK`LHec!Bg zX?5yS?)3tA8@Zg&N_n1-^?hzldfeS@==LqcO{LJSwY9p$U5cIf_*j<p^_V-|YUq4P z-O636?_5k<v?rbQ;3+k|e`)rzV5f;Da^ifttKFj0+oCwVars@naC+KPTc#~x&AzE~ zD|?HbO>SYU8GAu!zVRSiGFOPs?3?k){{9pyp5j_wKWPrlG{^e*Q_aGv0-z>PV-9G& zYL?!pNvz*z)~QUqec`q74WN}$`gJt1I7VH>^U^#TRjt0j64a28V^xo{$W=9R3dX0S z0{~88#%NgX@RFQG19arr>IJv`LSty)BlNc1!U^7^8g3>6_GkwU+tggAb>D=gvLvFZ zd1Q9&8<Q*eB@IHVJ)XtHrY7!RydX(o8R=ad-GWX$a!M18Ln><B1}Yd?^5868U?hf4 z+<-TrmZ-F)^y@lEE0J8DwM*IBec#eGz#2mn4GC1@cX(b4F%0C490wWYF+TB*ep7ij zS4<*da<NLZ^lzMDh5K#phDk`FkS6Hp#@1SDgc(DL1z}tH=?;J6Vj(TPNS>xkjI6u; z3!!TOj-HWRzLO%&zv=-dJ~dv8O)SK~WMZzR1QW5rHx@!Q`e~U^Q5R0K8zB_Njv!#< z9=*Ky<km?VL=+Bhk3Ull$tRE)0k%)XoF{mz$}v3Q5rwt5kT=twhq8k9>}gu%*dIH4 zCa_o|@=+#Ylm>z?=xC#-T8NQ(ldr$LEs#<P4Qk`v8#~)nAl;T_4cA39c_5Ybiiu?q zF}0FZuCE-Qek3q8i1BI^Bj%D`|7Q<@j~sy>Na$!MqgGaL=MNm8I03?mK3|F*;Sa&S zytE<_p>Oav1z36!GI#=TshTK_slf?d_d>(b@>~=)#;b)I+dyV@QJ8A?M^WcbGZmEX zXpxhFd=KBS1|UE)9q2XB3T90J&FgMvq+BG2M`5t(8H>#6VKl}<qXALc(F%t1V}(29 zVnI@6nX@_Vod>4_<!<fZK|=A+&U4p@xIx%J=n~+@#N0%JTw;Oa6AoGA99gio>bx%V zh8%-|52Gg3P}l=zIEzyPwUM^cID88b^_`e%4`L(P2Q)aBphrejtfU|;&i!}{MRM)r zsm(*(7}3jm6udRYv}`glP*VFo3+vrA=w#}86w9FK!x=?iLpgDl48$iQWa?IkhnCL& z!h~1?C3AcdTwlyDWR7259G)BjUSbS5c8s2aF4^)RKYTTiM*Hs+`G#n7G)h(!Ekb;; z<npKj;RhSN4I-c=4vyDus(hpkTG=q<&i!-@W&cz&nP1y<tw+%#H89{1#*#MvUe@NV zok)JHATyTGVG@()QeIzfV+h%1l4sOcu9dp%RxMK}Z3t~xAQsMnaOXtf`X6i&h@oZn zZyK;n|IWgEJ2QC3pArFn8E-A~b>l5@SwpQgY{`k>KbR$`F2Pcm*Yqe@QDa>}ofuLw zk%p#A9ef!Bp^7sd)HTm2t+~?p9zbyO1(PuTQp-T7J&G0&iavx<?6NYLU@uG}lpV#g z__fkm4|k7qek2I-EClnJDuw}xnJLWXWfg@uiG9rFeAQwY<`5`w8i3J=|AlQYmH|W1 z0d>>sqQ4^hK74{m$o_h7jYv5;E`|#%&9H-Ges3R<fvpKswV5J~Y2-iHTG4vB$skDW zyY#NtRg6kG;Tsz88sz>)7^7ii$>Itq*CH@72qmS|*1Bbu+Lv|xCV?0(2M^K^gz1k4 z1vW&)Ok@yhO5rXKM<+~|eEP>>!r-AnuAwDow3R+Wbf}ujQ^^p=#Vw=ZFT4;X4wKLE zZ%<UlINuw<x6wq%R+1uD4N#+5IPEF6RJ^4AsiSkfss=qw&7L9^6ul#(NF{5W8h_b{ zWFcCv{)GsqMxVm>FS_B8i=__t{3{4?`A%{wbAk+mferOLh7J*W6ptzQhOAwDBN2*i zR1p8+R-b|t9`7W`>`UQ1zbm%2yLF=GA*t8Mgd}n3|3FtD+en&NJD5=|yoQq5Uq%=( zbO>|F8bALZQpCr!8Aatf7FLv6>Vvcx<rM5FmjCK7lGXf5e;S!WfeZ)wP^rT}+&9?b zz=i}I`L7F7Q}@{fn|76G(nCp1;2V^<%wm6j%~}2Zn3~9xzJ@hxd<-NEgE++%WCG)y zEx9ssqyv}(ePVKKTOgY*3Wg%dX584i{$K2N_k%cu$^5U1M8c^?>6XZtSr)CSz8;Un z!laq9w$5%dM;}WxbyPS3@rlq(WBEEA5uf03UR6<OQW&_oqPuzwqY$ageuBH1!2_P; zP~ank)c%7?z#U3LBib@-sl&~;0+I0jzl-VXs*|1T8b6sYY6_nElx%EG{;Rp*iqH4l zZb5JeTxTo%j<@XwdVg0A%3sk9z*S9&qGZ575rR<nLM%Pq@#5M*5=a;v*->os!21R% zO@Wb=xDW?7rhBY*Mb9C0RkwR?0jEV>SHG=911*qCm!UoClOpy}Hf&V(Z`mbu>z%E_ zy#zV>M|a^$96T8d&4n`^*a27`;u(|aWXQNVieK*(n~t@Lf&oc;G+hm+zEa-Aip~9N zRA_K;=O5wy3l4}}f>@9TS{(5@#Go7<8A&+;LgXzT?Kn`$7n|H#HtN51P$V9fkkDC0 zuFG1JjbknRLx;@&QQm*UYixq?`~NC0rOf_>f9x1}K>2!1YUck{Ucx7SVg!bK8xhZw zn~d6j<NJ^DYIswyo<WTM%M#Id_%W1pQg)@j*5YP^&soWcQyBPpJaVanCuP375+`(5 z2(Ho|kWloGi7!ix)uT{FjeP|Et1XE@ng3<jKsS0Apii--`{e{9N5NlDg}J5H5|LPN zoa{?qhB1na=EVu6N14+Ro#!<dQ~oP<eBtcJt>-++m?7WI$gq==@8S@z>DH8VaYoP! zQU8q$T}s7QN!Wi&;`dPEjI{UeSDM1%QzF0qvV*0+|Ms=6DDx7#*Rx@^7a#{l^8}7d zw3bj_B`|G4B%rvcM$CfC*JCpP%gi9eUvjM-r(Y#*@im0xAYCxH4naIbV&APox>8af zOfO$hw4!9g10e{^lms^};lUT~A@?-})88qy7~#J%gOj;`xfW_rjJ{aMjD=zwF|dbF zc-s#NroY;&q5p5~C74(Y-)Wgd7Xd?-VBK%{#eSE}k|VqS+SW(t6y-(s5O{FlENoH) z%}z-C_#2D<T%i=6JtvA1OyJ9+esvC?Vn4aHex-(ZcxU{XW2K94h#5*uWTfQ?*k9#) ztH;m_d0NPsY0DY15cyt4Im<lJXSBrGm^>G1;1%{NU9hv(RmQ^)rQGj&f76cIKM?T0 zEnnaIZKg3>qBVu$`IlZZSezWkJ;gTM|InMp*0MtCDAX_!1xp(1MX?N#&i2PNgr??s zt@LJu^BZxvP+2IDdVe$@3}~Q10tTXezby1W`pc6H`2W^lnJ0FAbk@3)c-j4wTf*n- z(jfOAqd0zsX!&}IG$xVSOlxO;<z780eP8nFMe(@1Z{j@3HwdiQMl-syNYwmwACPS% zjQKV}5kn-`Zs&^6yWDt05?WL&$(iu|F@7-rC|&|SPEs@|ZldCzB70L6ZpSew2TIzw zGyf5q$ZeSmiiftI<=wXenXtcBEy|Oe89Cw!#1X%LVkB0M1Qw4UJSW{&Wew-Oh<Ql? zCbd5j5j%!oL6`h0@A%qIqBvI^g{b})mWmxEo3CON3v5IxPi`=37a@O{Tj@*vB$p@E zJ~CEpGyGrCVXovKucnaN&-jntjdy<8LknV&cG-(kO}HP9VgZdvq{iRWtMnHbSyxbp zzY7Y#SO)Dsz^tgQxm{T`Uq01g6@ZjFa9Y^te#vcnl48R_O*&zj_P^u#SGckNzn1Ww z+jE@Zzv1CaCjKc1E^D0lf5HQT+fu_<LI0$OP5ZwlWs#)zw;-o&rJApB1@%w3iooTv zU(G~U`p2dWbj^4Bl)AH@Ag~EqqXB;fn1FFEI0`{MPQFUs0^|oZx~h@D!kC%jmm%Cw zJiE332jEpDoBsfekDbudRN6^3g7!6sXGaEz>OTm>q>W35%yb5`6bjvlGLr~mNBwHb z!dzK|u-VA?FT{c6>zn@zV%RjYr>iW2wDEJlHhpD!I(a*at*O5ZJB)rA-rs6SSkic% z>?fD$l6g0P$ixW>o|L**&-7an!t(Xxq!a`RSkk!mgt>ds`jl!yC#WM=Px}KDpTQJE z#ee)yieO1&r`iQm;r@ywjy^=ZGFS)vc%I*4^n(JV+tRGzz9_cpEAQMHq22$IYEB&+ zm1QG>_9UeGJ(+aEgs<1c@ozT>_~N?u8KdN;)RRx_XPX>pcF14n{tw6TUq+;Jy_@Rr z<sB`5Ii|<n;rIOVxAjele?{PbqJ%}z-?#KXQ6jN^Jqw0r0Wxqj?jOk;ws|>Rx}R3e zT)zE~>U=oJ)o}Ht(Z<ZZaq|5h;gz#a&y#vl`3V0yvVZz`I>Gv&@6>n{JuN&IaTo7O zfF0b^#k+OU0Y3J+OWZAV<F?`JGhMKyTVUMwk!tk1wfp(&>@<P>l2?UfQel(#4jzVU z*z`twVW~m;p6vBK-+%ct_G6>dm@;?us`GQMaX2CMfu=yv_snBcS7(<I=+YKvzml`| z#(A^llYGXsYO~A!%#=#+xx|aIX6Yu|THSifptws(g4?GQ#%rdac;l00H*${VIEtrb ztDURp{d0ngS>@CCdAi73R%FEGlZO7hC1wdD_<cAwjl<IWsOn|)w(E1_wv75=Nn^|M z{RX>B4PF6oDduIJ+oOB-ServDn|!1AeQ5u-B~sH~+b|JM+QO`@{%vioboa8S<F4)f zQZ=^0u}3@99vvfh>DY5b`PU-|{X45bx7p?X-e$)`_wT_jToq((<Bp5kWz-AxR^yr& z_p3}*<xd#Jtwt~YEvt82xxm0`qFndM1nmc3!j}YG!B=;?mUWMdZQt%N(;_Hi8>4@B z9lnnKHY%Y0_9y-xFfq_E{yqKAAoKsLjluH&)5iFBn}Z&Yo}G@7<$pIdHawx7lt$vs zR3EdavuCs0FwE~#O$Lv6%?=7?!M#P={g^P+^}dU#0S6Jq{n#Od6!!xHKw#2A07l^= zrR{)M^=hwU`*g8JEQwE>cURPJ5o=j}9%}9zVpzik^%{TaV#VE6Tt@Nfjl50)T&Fk> zqYpL#+W-2sRCq8k)ip;7#q0NnwYxZqekM-yJ}(EwwLk&^)~p4mBAd5zg7@tO%+}jK zE+*N#;Xn8wUXk#@v>!{bPgP8K-eQB&>LvSRmt38ld^}b2!hU?p{*dd$0SZiX#egUu zq!?4{aX(txpLG|l&+)$pXSuIFf4cUR{ls3H*7yE%5Tp4jdCwyvmh9(jYCCdJQ}C&W zYlwXvZQ;AMJtLpMDlBGAYI})$bV951jzpx>f%+`S1F?<!DWoqyeVPQx(bY$m@moG& zh(Z)#U~q1K4H+&zMqX|XXZk{=3ikZ@T<EF!$kL|W61p-5ckZ(xN=8_3#EGxibJ%S8 zIHvh=>7Wn8n?qO|$GErWEDb)2?dE&Ku~NBrIf|rl%+~gZIod6R6PpwhXSjFK6V~Ft z9_%FZ=V_Ve9AbkXr$2r=zK35p9h3*l*|6vy<mO;GG2j!(HUWIpFzor8JHq9N{H@C@ zZvyy{!kpx1_&L67LLl1+(u^P+p${iJDCL+%PzZ0OIO=hS{}BW_aco?6D|D@olV{0C zpqT0h7&~v6Q%nL*gRw~L$hPE%9^Br$`AsJnfN{eNq5<{}RD!fSIQdnaRR{Zu=f<5j zQ?$Z))-K~mb4hVqx&7)KF>Iu*PE*}SNxPnPUWrHFo4bW_aZf>Km6MIQ{Vdkd=~!-d zVs>)+pN!-Sv9RcrYLqc6#AvWC8NHvQXBet^8|dQ}@Q~^?dUUzV+Sm|BX+UQ1><B+w zaY*;9mS?h-4J*RhF2JOiqsn!LzOSnDQ{0$xT53(rOjl@6Io277Gp1ZtyEL;2qBh+S zR8tw5BSTUiAFm9kC)RbZp$E8_N|V)Dzl%wGGS6{ZvQXPmA2IAtlbA}IP-WEr9JjyE z4bGC7fnq8xIin&L35UltNN2{*&JQ7;WL_LQKBj(dJQYAuZC(;WF(VRu0mTm#nOhxD zCk@RqHI0p4ca$NqT-%V(u9=Eap2T1B_ZC%~939=rH*+OhR>mIRc(w<g>ZD`>C~G4* zI9A+C*2XCMT8lv(GZ?2j?l}g`+iO3)-^ay32<4Ld%DB<{?O>xrwr2UqKg7p4Dh^m` z$*eLvuuxbO^?(seVPw=Vx0T~!Nx*?#m_v@8pXO6BtoF{m$o)=8p2W{Ux2w72gYc=; zI(AH)FVrlt$M{fS<mb<0lPfts_Sy-ZDmQ{v5g3rn7;q+4Pke)s@486&VSPw#I8XgR zvdO@;;n3{a0j=8TqkbzUHd=M+w3rtK?;I4eoX2CmE%_%wFoiZ@UYqcjnQ3{8@PIRc zs&h8?R2&WTP(YW73!n5KZ4sktgJ*)b*0?ATBVj;RF%8kc@j|P`8sV1pDN>vtqpu6u z5ge_zp`%#!aKIXZdSOOm1gfV~(=Ot@lH~;IP5X;rea*A#a$=+Md}EdRDdI6og!T`D zb4$W5fz1pHo`yz~qArf#z@_^db8m>(($TrpP9(giguz9{8H6L$d|l%e=;jw%s18k} zt~)ZChgLE&@a5F4z0@@aH7GS^Wclm%SYPHxFNDg(vP|o^NUJ`}#o8~{>Ys?jU}=N5 zYas)d$e#?2&KNyqlJQ&PhrEa%qaWz<8&qc~Ou9&?(a%<}{R)nr{#BSUBMi({h<y&r z_6kC`P9JP}Y}HcGK648X9bpdWfU#rh<3F+=RuPj^qrEEwqrn(iHU{ZtkUvD?qri3= zq_#OOtz4YjG_+2$@tgD0r=uf96CH%mGJX?UF1l%3ht$bQ5n*SRQfj5;`*FIL*a<dk zyjw842|8{#H98I+Rp_$xhj$Qshjh?ECD009Y?~chyEuGZMLz14j^fk+OcR<aCtvR0 zdjVovPdG%iCNe0QteWszNH6ycSH-v&Sf{3Qqlc|N)KRh298`iqCRCVuhzcd0^Xi|` zp`7?%-%=XUSC-xqkhYL9k{rmuZz2*^*@}zR=q;YcXv>3OEUN>+W=<@pfoAoF&C%kT z56#d>WCzIlgXp9d_1*$2lj?AcqaHejSI3qQf2G_Lo>Oa$h+|27@A(0&N-Qy=?2b~# zLt*6LJPDt!eaqe%F;LlW#~q3($A|}aV|s}dZ>g0_x_6sOOuXoJy1<+dZiScA$k&NH zjrM&vIH1vEBNTa>E<)HL#l9{kFqi&lh!T1FTj*=Sd?Dj};e2JeBLfIdhE}cR%PrDk z|8#31pGK(<?VGr3l2W{Gd6y_<emf!#b?Ez0ohuwy8c6AUUsg`mg$!>FO;b^hOmS$z zpE#fxg&$^A#hw#+U1%O>b<`L)DtiYB$QEQ^1_!W_lu;E}NK6>esy{-{<gkBlhs7K2 z1hfoeg}IZ3B#-d@X)BkkK;;KOU($Hh#U&#PNaarfmQul~-Q{w@U${mmeo$GT6Hp=N zYkZeS6|C^8uC7LH@;n9AG&i@b#O&GD-tg!<bk-G1;I)!&m)q{56UD~@)iCwJTN2Qo ziaJYRI-o2o5)Q`6IG;sER#DL9$B1TiOS4P~UNfxEDna^CVtnbF9it`v^qi7RX=sM8 zvTV22Hec*@1x&Qq+Q9Eop?h0z*Wkj?MttTMn?2VUTRu?RD_ghM>Tl*)Z$NL<)$Sje ze72P`N~-*x5UV!J)NS;#QOVk~OQl{#JL2l3pmjZt331XDw2!DX2yd|vw-1?&h>iwX z%UBQPna7<Wlp)R3B^WNJXCBal%K)(u{FxP&5m6vtqrZdUnC%+f5k!xwrcHMSyv#1- zG&~5dhzM*L&WE@!L~PG>txzzPmL`Na>0)3xGgfpWz@J<jF=06o4D5QELJgv2q?sV6 zXH#aR1@~a4$|NCz1d8H4OU4ZHG!Gn|oqYO8E#b|hVGdWe;mkhGEjrs};3<KEJUD&c zUTWVjnOmc-yL-d5sljVsdT~C+Id?cc$zt~634Nj-V8<wqpKermqW))XyMS_zrD&F9 zDR@njG-9l|f)H6m5ue$UEpdUP0AFJaXM!hpvf+8bU{0${hGQ-+z1)#yaI76n5^Jgi zD!JDazkLDvf_ifa8Z>^@3}Z&(DWUYw4od2vrk%C9lTo=MJ^;ik04&UT5thlSi}ku= z_QQFEMZ3Mz&bI8fH`03(S55SCN*AC;()($}v98_Dk(S%jFa>QMcQ-@(kiv@l`8*XA zPuiX6F@M3lmcd>^Gt0GMg(&J$-m<5bH_|ZRFw^fqbQJF*22SiE_N|XxqEEWtx__WQ zF~G06Oiy?Hf(-+ec!-`I4+H+x@5m@yvGnA7pbZ;P)k{bj1yY)jr4-0~$!nv^Rxq&H z{^{YZb{Or|uY!^eO(564lqKqPlq_ZWrpi&(oyOO*nxhpq9`}q?0Mlb?%O!RDJt^<C zGV!E1b4Ky>@$}`(F79Q9S$o@f*>V8b4c)MYN>q=OQS*sY!~g-ZupuqB@Kl!_8kt|7 z>33KHW;yJwE^!B~I*sMB(*^pwCgUndsan?lAL0;{8Pn(Y!LFvA(|{A}WLh(r*NC}7 zXW?|Sv@>|Y$Guqn*+RPs`urVT+|T>{Aj6Dqu8__*IQRNEw+3ZxmyG_Foj<K_K~mCG z;rsL@kqx58BJ@pcON08%2v?YvYWz_R^2`i{-IEBX(b`x5lnzc6(`au}7m5^g17&&+ zG)&7dbENb>kqV{_``heqTF!E|d+>=R)S@eDMY~{PqQUe(P4wBj^3<NPeMg`<NtQb$ zQrABM0Td%L*%|BLuG|h;T|Fm*ODEy*PM&YxTgNNDW;+|;H7D<QC*DBmqTQt^XIHp) z^Vss>g=CZb#&pLCP7B$7R>ulw<V=i=)Oj9*-EAF*I5`ssG-xr^&5j$f&86SZA1XA! zK}x95H2Gv{{6N=yMx^7riAZal!pTUU*9`hFJ=s!*hcz%0jACp32hAt^QtF*0nYKuk zQRU>Hc+!6*gMxb1ZmZb0wA-(>tE;bLsPM}VenV?$lMZVX{W&&u4;@`H(cduZ_tK}Q z|FFXLbnz%l-F8~9`9WBGmU7cSJWllvFYVY7``G;s@4mmpG*Jbr-pwHkJYTw0wRWP> zT}pm=d1$LEzku?(HyaIZD^n=&9I$9SwsZ#CZRWf?d67CT<AIR^QMF|zMWe2uwW4;> z*<mp$Cm;E37L@WN1JI_GD!bWF19fi%SB`&K*_Z7oaxh~Z@(#A93@I(IE$<|}8p4n< z6oEe3z;DA5b{&4rxdT58{j$)yU|s&I2s(=?2W>)*vSR%_DnQ*l@ZuK(?JVvkAy-;i z)=c70KBiu|H0NsJzrbNBYAM((Fd*7Yrve>mso(lwMBTjPVR`(#CfWIYSnISZ0W8!i zds#0Q2{Ym@t{9wKoJ1M)t#~N4AP-8V#i5att~Zx)OH=d7An&0%=emEVpGF)cm&6LS zMIQ&lM|WuG^-6tb05mLSaYPE!YI0p!A!C-KU8b4K7O;4H31c+7a#Ql5_t>JbaS^lY z9azepMDNc7l+-WUc*x|0x?GigXjf)g5!sQ7BDI;I+)+YM?lV^PqM6E@t*LuZf&RR@ z;hNLqD=#Z*U@Q)Yw1Mors`~Mv>pQ8lb<^b>G56l}QBAtE=g!fC`HOHvv1d73D3>6& zvuLwz3l?*oj@QwgWRZ9UDFbok#!U?egd=lf$;gniP^7?2Qc3pbMz0=7aQp8RDUBqk zjv_%s<=MM*1{L;&JEsPK{R%(!rhaM52IraaL$c{;We^9Xn*HG2FUdx|B`R$NO`E9o z62;#Y=`k52lM7Z$kVlMp9}{H0UeZlBT``ff8ALrB5%)!5;smU0(DcE-cA_x5fN53} z3Y?mByoebZ%v>kbXLy|tEeo@2P!mp;aIJ8B_E|pPIDMNuSGhG)N@Z$_q&GLV-v11n zlJu|v1h(A1OVPTzr(9|%X{{*5Z`$p>U2OEQEhQ!BCNQ`=Fo?Gq`z#&w1eVpo%zpgw z)PoPluk8|&Qrxw0N#azqf=VN^Hy}?<O5o`K?O@?CbJkS+JvIZEd0vb0+uFV<LfEu@ zGX!QgY%GYe`ZxMYvF3F$-1ya2n55B&s`2-mG%uZ{i3)6`*R=Oe?{yk86wzNo;L;(= z2#ywX0bo+j;D!7~Cdkkx20};?C^@<rpUQdZDJ)*}<}6LH$*|gttag9|IQwh!yf&n` z;LA+{C(57(NNA29XV<>@z9vySob*hhW7@~<b5#IGb~aO)%{8xwt6bN_<46A*=zRoX zMDbD#w(M^mh}&asVll2GsUw#Ws4^3AR2};c?x|E~4gK_BoMhX8K1%;2t|}72GpK^p z`-&X&J9=v{6hKLf`A6U|XT?Bh1`^YNYLVGl>m=%q6<BwdTU)|OJ4;rF*XLl*z;q8h zeeGj3HTMmC2gxV)_=^sDTY5KA##`*6rn6^CR!-;5`k$7IJ6#^k&P(m?9La0$xQMrD zlIcqFiDKtDpK#_`8VS`p*eI5^j`b$;TFO|H?97+qwSc)6On%#d!6-xYJH6po^d#ld zz|H+Zl+^UQ3OG);bJ8=X1vr;!yAZ-g){SGP#~fCmN7Mu`M~A(re5WohHnZ*tsgB7X zreKXU_G`XNoh0j!nlmqXf(R~|U<r1it%qdRnrpvceyqc-*P9XliR^(LSURe>tm?wk zqCb9cQi1fUg(yG4roBAzG}80m2X&N@R;8n>GjiFS)C_orK13c0?WFSFsWCEkvYs{s zD7je*nz`oL?N9k}mv*o3+pM>_Z5|9Y?kD|Ldl{-9b59pOS?Yni1Vvc(K^T`I$*q{) zGE&!H)zfDdNSq<A^Q@9H(bnJ4+b~DIFpwK;<!noa6f~mEC-C?D<^psClz<06?ic>8 zCz#fMZ5EcAKuUHS=?0Wv7(qD0XtFUy9i36*59<=IdU^AY7HH=klXzpfJs0<%t`o%S zqyTjiN&~6sZKMZKiYxRN3a}g*&A@1iUoL<$>)$S8CAVw6602}9ntrxPOBA?vfm<hn zr?COHfQF%w%U=pT%Om<v+4(-z)yFhf`5oxEsJdDTki^@DDa)ijcO+*mCBo`OWRgl2 zOlRJTEr$_|JwwTv+3BYiDl2TM%adi6;by)QW3-DsYhxm48xoK5?afxY=o=@1!$Qrj z*G{L(CfNc`Mp1_2@uTQjCUR7{{a@}6o@IR?&Z}{Ynpte6)b+ISCZr~$83tKhjt6!_ zk=MgnVfuw=2hX9CU8n<4s#$DFNkm(jpp^|Q#v3U^QtIOBOcTs(06h2$`T>SpjoZBR zp$vXjLD)8&8`9+=1!?qJ_sgT2B#*A@r`EcC3o20pmKPCcs)Mzokb*h`lQxs%0UzjL z1}>NSQhNM)i;>1aS8h%vl8@e_Zu5C*@R((%%d2Y5-BWG#?#r6<tq70J^}5pzY5>mG zUMBKcN852saa&#OZhlUJJ0|>+@U%8Fui@urCLqEJ9w4c*Y~5yQnp^B_WbEU<>@S?0 znW8!#ptiX_Z5%rb_o_ff$e>-Gk|cmVWB6@|i0{b9A!&x;R9fZ5n(|J~RSjN4KGFj1 zo$~IaebvQ<)euEJ0uE}uxn?k+Bv}Q$dW|L>%E9VsIQmJ4X}5Ola(o!xs8wZ|cmi)! zFA060sN}a3ak2Y?mE<q;77u^~03Tov(EJ5&HB64#Y2vvoBD<zndma}33y`<AWG2WA z)`wzQXd9&~xczN&6ybgzbhAwMAo>bOG<Y`)v1-o=561V3vM>Y}=Gq3!_O0?w3ZBww z+Q`ok{c|o%-_1?U+1gFddrS)DPMPH?guZt7cvxgj4`h95kOWW$1RDh5vS75nvTkg- zo6$ymgAVcPx_p9AdhwE>k}Cqc41Q(Jw0x+IT?6y`KKL9&<k05BVzHoeiF%!7u&Dk? zLIrWRQ2Udu&HD^KByGj4i-%;%=50sWtGU8nc~KdS>33~JAuk+29)4J9Iv<<4x8o#< ztUq(-btjd;Q$2{IUU(fJ=V!13ld3_1SkI3?X-_3$@WH3f2C-zF*WFK=@!iDz&;)x1 zp*UxDQVYb9d8qjEzZcE0kYov!2W;c%-uZ&&39yj!f7+Y#tm!mDz}x(E4G$e89ZVgP z9hxY}mlrD2q&oD{LOCW!7$5Qw(nlx2LX0I`(}Y+)NAagY0SHxu`8izrh`xyx;p-gC z3>4Uj2O;gC#}5SiAgl?=3EN%SA`{$&lh*wyFvBBA()y{dW{oU5bW3oGl+XXYHp~-t zD$-6QNFL#3aDyOOxU?(+wt$YfzZIg^A>e%FxQI+Ce0yPqPH)}PA6cmwOtR-s5x$Y0 z%s`z#Mr()B5L^Ft(UB#jH3yhRuezVfh4o$HdR!77ZN^h;p0)ES%p@9GnAw0bb%fc{ zq6VNT2S#f#lkNly)U8S*$)@!1(}h8Jh4$^mq2cN@6c?`c9muHwP7mt@FWDl-O7(2P zMmE;r`|y)`lhjWJ85)G_c%p;BK~SVZtA;)axwgs*FJ4E{2H{yAYL~;dd@Egy#@D79 zx=oy^qLsqS-9Ll7y=V~h7Y!kEtyqoH;+37nMB&O)71_EdxVk#(7@BPjT#LOpv&RQD z+^t4C=Mc6Ys5dGyzHf+QnHauHW^f#BpB%x#>ia+fM6%o7m#I200jLgL)SH1iC6E1u zo2Z?a?!4Df;9Yf-(9}9Jp1Ykuw2W>@g}}9vd8s=^2FFOp(Bh^^G_QZ8KVLt#UREc3 z*bYJkeU7d#ujZ3|%5DPzx)-IoFMkwyJ1;|9-mb=(iTIMVe9Lo5Uit3^WO?s(ALemj z_F|uPZ+ecG^=}I-(ew$t$UL0$0PlW;3$Lm#tS_LUxZimOOMN_sKPz$#UTr>|Crx<0 zJR=h2OScJm@zNQye%teIOs20Ml}5hHU4+8GB8zrJIAzUqoRwz#lsyU}lR~TX49E_M zb-abX$v){mKznO^UddtVJUE)9v4EKoew!O9*E-0ixpD6tau1gIMBovgq8K3e8s_Bs z^VvIHH!s5b(;~adhs+z@KlS~r2sgwn^=e(sjg1H8SN6^*R_6pQUjD65-uZ|8r}$@@ zZtpBIuiHD{0va!xDKhikXt+mIrD2s$xTP^azcO1|$kl~;hlN;e`W$-5Q{@agH7iSt z_A(bCO71LsCvLxpMxe!o6Z!OD+q~(4jO_|Vcdd9G1LCQ+nnJrp>sa#~*z8{`D6) z=jA^?Q{-l6%4s&b>2}l2sb21OU~dy{Gi`Jk>}fSwDt-J7W+rK<M-B=Wm@%KdA1Yos z-6>Lb+b}QHSnO$sWx?$WpPg+j55WT~24Pw&zpKlAH~HCGKi)|C9kh=uBzi-XAZU<2 zKIcb%?jaC%hIeNXa~Kx4hl+_^y@{@~N}o(hK0=>b1=LJ~cA}LNTUW^S5EgOCsHrL1 z9k$m++o97GY3|!?tDMX8eVsK$_6xTse;Fz99&)q!XydZr>siNn=(&|4mJy1e4#NsG zzvy{V#(cuOnMn48a6kp4NO*oBJ*lApJynU*ik7JY(tH5P{Mq)-!Y`#0so;f&xq1Z- zEvVu(n8w=x<zl>4f!|izHi3yoy=KG3Fd6ZGlBi+7HcWcb;R;<XmWH$^(SmS~B7k{K zR}f=T*HLRE87zSmDAT9VrbbtSrcu@8_33rJsAKbDv1sa0$6tH48ejVSg?}Mk7Y-O> z`&&)VRr|XSY@E>gyqwW0d}t_DWO8wau1B&=I@X$1<YvNM1OrlA6&G`YV>DAnS8tQp zmEB{~jyf}(BV(|7cIB*e$|pP&-_PdGlvcBjZl-MEMkXiR*Ta7;3Yf&>H+zNN<|V=v zpGoHfb{<A%v3~`!crcyJl2Hf^iO4smQ7JUisEanwV}q0{i&pDRqNy<82}%l;v<2WA z^BGhRKn$;dC1#<BOIo5Ys63`zJx^fmuXO{dCyK{o$rS43mLMv8zJ*dxpJjmebngyT zJL-<rY$<8ayE<N+33Deizq20BHjTxS`l@<Q)50kd+f7ejw(TxtoUJ#Px@=sJW@Mc) z$4>oDOcQU(u+YiJfKNo)gLw{v5W-L)mMf+|?qs5YL_Fk08ZZUX>|@qNPUFwBh6RH_ zABJ79_*U45cap|;C9EyCPq`29oCvN=ho#mWFHOP8uE~xly8S6K67;dCdYr3U{3ru+ z@*u?}j@cX({2*iK%hzUl!<eQ1M6+wkmJZbH-wVkQ44ud=)ifV{ZKY3zS+z=+1-m+L z%J%euk?1GZP=t4x`t(X^@NM9M_DtMs1AR)Dg?Ig;ZtkhSgyQ_{AfsNqLaQCWZf9!v z%$9*#ztBOsbVay{7;a~`6kEEn-DDOS6cefp<<d-?LSF2r3j{bQzik-fRcF-?B)QvB zeSk1#GcqivCAP=RBWg5?yeNVca-Z6)8-jEbAZ!(&mn3eYR^8-fjtrmaKIOro%blHP zyC}nH#$<sa8{&}{XPW%<;qa#<Ff2lvltN9ukC4;%fw0wfxf~cOZ}L-o94-6ll05mG zxjFN+p}}SiEp4lYBS)tP*Z|)jrB=<*!Shz=>0>|bOfOiI$(TY|d}hnHLG#*)*W+|M zoY`i&{ZjUj4CYlHp1YsgVk2g?jv2#cRxoKv9xY-GQy4_Pj?tPZda1a%=)S1FI>sAL z<Fs{X_FV6Ae_;GA`nls~6$hPTA3vRC?3)bCH{wai{(kN6zYxnvqKgvi41gci^h!Zb zs41y2snM7s<ok#ubBcfW3qijv-4NGwCy^tIOVI+k`j!btNJ>mdQc4;cV7#%MOD=$l zmK2Wm-N8K#UIzzq%)xxBhY)$HvcL?TM;F?MoLLECHInQf?x*fEn*0vk+WREWJ@DQ3 zcjdZj0H1Q(ZUu+))Jy$p0oToeL~<W>d%}56xuuCpOF?pQM}%r{<9RqSylH%BmC%mX zPF#*fjftFUomMY_EQMAbR=to_R>%;WfK~&N!IOOz)anuCQYfi(##G95{1J;aS8Lv) zZwhWgZfwUtm7>(4(30GOyPv@fJ~R7mlyMYr6sO1qVu9JmwTjjC!?8ep3VUCnxJurH z@<)E6$>*u7*UoUrAVx_92z*NW=aOBq{?Uj*RDvUGH?$49hBH%gcFrORlPD1IEq@cq zw<W)_-nZWehvF>qV{idn=#>MzLv4qVfOacwyRPN&DsN{2gC`q~n@{24SsIT^k3$9T zQ^XbVB>|t3{(R~J{;cW+K$R)hl3fJ>!&CY>*(&N40$2VlQ_T|qY5^vPN<(ff=q-iv zD*NVeJz(zTPz&6Fyi&!N2^{(Jib5GmTDiC4Ta2AN<{xa(xDRyD?!sRE7|#v?Rg0B< zs6EQKD!-!M^$92~xor?opOW4QD6ZmOd(gNynrN@C28H}$49;*2PF;($x5i<awD(K1 zv#px?t%~|fRX<ldGCn}k#yI4@@;;%l#4OTJkLG-YfwCqq6XVqiW*gOYd?l_@Gst0o z;w)F2=m+JYSB*C46_-it*9u$LLR8j)c*|FhyIK$Li%PXh(}&zYL>4yqt}bi+r5r~z zzxBwojw46pHczdEhY6p%Yf)wbL_?fAZ1p%chPdLgldD<P=q?rzzs2w2$pT+l@o91K z=7wD#f1K}5{|+xHBO@Qr()-xi9gATlDZn-vvr2|VsZ{=aj?6u+R*B^Q6_6EY@qPpQ zi_@~JrKqV&NIlirIM!x5nOnJKlAN+iJx)Pg9&wsQ_gTeD+}(IQfN$~zJJ`x~udA|@ zD_7dIQXYQ4KM*b~!5XrU%;)0=i+1XQ(f2(uyz45J97b*=+h0FB!)N=Ln5?G>gggo8 zq#2!8@Pv(xh^BRtQ~9AFy;FPf9kS&7{o>u=-1SC5_Ho=MK&IV$qYe%rn_h72Jn)u4 z20?P&w>!agZu!CrFYdE$>RjNNJopx`jNl<~+^!HWKQayt;W@`<W8BOF!7I4)t`1<} zg(-Hi_O;=$?|XIN?`}62b7bJ5V}Ih1aP?Z^<Y%+8dYGkov6iBh)LKF)Rz1|I$)@$| zz?Z(JkBoZy9O#F#fn9R%AxJD3<60)}a`!7av5CjX%vRh?HRUk+)izDwup#FR&}FDB z&Tk(-)=|)WFAXgrt|cJ1fMPB>I{&kag*m>NGk(H2Q$DIk-Ws^$F0ytQ^AOCPB?f%@ zvbVSlDx=#X+7vQM6UVy%1&UfjT+<{=*`qPbO-@5jGwXz=wXI(^vn&(Rk4}9he43&t zkv>GhUX>{NAd9mksZxorG3?6X{l;L$I=EK#R8lvBk^kxVP-Ht`mAgY}=W3)YznaEO zx`nB$#L+Sc$o4KqNM6O%WbV;Qp*&C>Zumsuk)69!O<Q;y7M{jT^G8TLz%58LVG!rA z2bGN|3qlW51U3ZNU>`XZ%!JgAuoz^1tU`K(R%cul(38#FEOK!te8qOHSjcBp96eCg z4}b15!0naMPz&if{B8a2EbCjgoXGDxZf3Wjejlhuj2^=x&M3Rm4<PQ1l2Fev*RO9A z@&=nWgcPOf6#dYE)PUEaz_;;#?7+HW;xN&5&3*^t{~@gY$}Q3+vk)GYwy)(_o(^@O zhSm2L{tV6NISKO?bOp)?umtO3pTMH4WxQl{TsaNH$CzY$KSaXfXEe@AP&dMBP!N%Z zalNVIxSO>N1P~o1>9u`dMEofkhtHq&U0`tFsqOnwJr7}@&T*KNgn=*Qb2Kf{lUl$d zk(+b?DiPbzJQI+4Tazva1vf<(O&6&*LAYo=A9L*cKI%w-Cwsp097{NUJyp3{f!Gnh z&UUY8G3t*@Mtq<C&`@iy8If{D14i(VlU6_zy}Buzd{VJ}{%QBHbQ<a|{jqnr&$-s- zyohnFJ#bd0A5l`({L`$1494fs$8(<oq=|T5+wC1A4Jl4s-60WLib!!HB4$FKc7O;@ z6<>Z(4z8KDY5qMIIne$)Mv+gr;VCQ$Ki#)Nk*?$!y9e|w%GvGRa{k9CRy{zk->aqK zj4o)KW)BU(9(f{~gNJUp^j$%O@f#O;^f-?zO^nv|{JOna$AvO+faLew2jk<!Pp;>_ zSpDg}cUwQug3YW>+=l^p(#m5ii*zl>SSc@->)WfG^-%kv(pFlAF}UUfvcRId&btPu z6f?*&om+iI??sr<Nz&hnCMHujA-$sLsElM|ag0A<c0mnA$lfgL<sOQyIFe!C<J}~7 zu785b+S5Of8DzudtjBA4?)^5$I~Fh^n4PyDh*C3n2}PZidyu|Plw+xP;s_`RRLyCp z55PDt_>_M2{=Sw&wjrM&*j-AqM$x-e<Sp)0%0)0=Bc+xD+4i-S&V5`p0!mIJ)-<rR z=RKyB3$t3@RUtn)4qYL_76s(CSy#<!LS|`;5<Qj>jzq}FqbsVR5{K4!(bz`;AOTpj zm^2XU&k)0spy5%zO;pVtJF;H2YtG(Zg#>TQ?4)Pd(HL@+{-LZ`(Ec>UJC~ET6>D*Q z?Y>_o4M8<kYDq?J+1O*wLOO)^_BEU?r$+8B`N(du*2&@HUF*7EeYNd4@4bmgPL64c zNVz!*e(e~CT8gTv!Nyrz*l4aPy;EZ=8JtldoAvP=_Pt!ZvZlnE9{}P$OZ=250T_ve zf#lS)VT|lJStN0nX_~K@tr;7T5Z(=)V*h+OW-ERhF^975EtnDur!$L+1ZmWPXER?X zEq*K0gw6!_dYkE3JQZo7^g5Ez7&vzHdVV_7(+Be@ZlsQtttx%harbse8n1WR-3x3_ zTT$bFL#QC}{jU62hgw6`8Ed^<Y+@uL{kEBwlx5U=pB?J>%rhlS#Hp-WN=I~tykg?Q z*^yeG4C63cwM5UN*EuhS8J#U+u?MEgB+ef{1~wA|XC*(&A1Gg^0N#DQKxP@|@LHuo zl+(Rk3c0W{4F9tU0zFw>Q{>!b(f@Za!FDN79F5oKjq7RzCF<&B4c9mv4oV8I*U?R( z)`2IfErLR@Fi~VuJYmH;qw9#)T4D=f?8P)&20vq~D2gE+=qVO8oQA0x{mlCr+3sbi zeKXXbA{Fj%&ng2qnFwY+BXyNM$p*b7L1Z~)pm*d#<OO*kMPxb^dL4d66V~4eyH#I% z8uo!SSnHOU^lye_=gb;(+1w76BIX?VDaq#&hPsJUPZkX1rT1!|GxIpud_=vz7-)t9 z1?^3h6`yLBQ<RYVmNpeDbt{R=E#z`NzqtIT)|@}g6dg&ODfY_~sX4q|>bPW$(7PLo z`Z;R5{(R(~AA7mYudAPzULN%Ms9!>M``$v%?(e){95XPpOn#GZwSa6Do8{2sh(qs= z^evRZ=Oa}kL!%DC*)=Cz#N3S<8upW~L%Xjdh@>eMB?pM`<~M!i--=SadBc+V5>{!e zHb^1G@^F$24JmMG-Hh*DkUlTPkUW2`gyto~2s>>8Q0CzVO@~NEh0ju@dYB<ikgx;? zm!&V$j~GeVi~|ZuTIatDlBn5em=@eh$LUir$!9`-NAfC(_nN$`3Foo!=o7-F>(fE9 zV(h~}V#?r~*fUDQlM(zVgxu~lUl-D4>=RcU6^c#E+xnhOA}9UBa>r;kG9V{bIye2u zJ@ExN<|FHv83~gmI)jX1M$dwE)&hx*y-f{iXm*6KF!aeSy99q8VV*ouhQ55QHK>K4 ze%3A&MzOgZ!Tuowrg%4NUU4P){#JyCjWll_441LbktFP^E8r>J?kbI&c{GtBR0poi zMyryzECfkudT)h#0*MxUMUJfj6*a4O5PzXM<=Arq)-uVZ^)!CnpHj*DJRbvp#V-E> z|3qac7|?ly)YNgoLT#~d7WZ&rw6i7ic5-<2lk3_MBa2Nmu*#_*FsIccrP9&yGucM9 zR0UFwl&|fZx=9)77YV%Zg^Nw`b5t5q<)et|G=`E=a)!XUkas0)NY>2#0)(y6`yvz= zNYPH^I4DQ{#>bKO3wg22^JVZ%rpJ(wBFsG$XN6=LAVNfZvIm_Zemvs{kT1-kv}b*z z8J>3!t=}&te#~W6>qE{=n$LKVIoTPoCySWZ-euj@7a<i1I4#GB)r#kezl7E%JDWfz z6nmJb-UZ$H7jY7GQF&9)^G683S%|OnW^>)KE{4YcwiG*J98;^QH(grk80T$hku<#Y z&3&H3Op6@?3MFC*JQj(boF?L5^kNe3$F^bk=CM1k^OW|Sz;4yLU(~dX&KQ-U-+~^7 z&SVR)%6|CeXnbJgl%;L3&^J}5y2>e~2LeXMbj1XL1XDIHf^8VT;N(Sa5ss=H#%Zh% zPP3C>4wvqN^?(}Cls?`Wyww8Z6-_ZMwB+!-?Cz?&y9YU$NSz4VlLwhN+td4P|3O!( zM4nNb_xi_s91p{_ER(Cjq)<gki<_`-hNjzLp!HJ3bU5J~Z_DL6=V`a)Ckuyrq<+tZ zb^j-Rs?4V#C4R{GSms!O<>!vafN!bE%vPeshQk~MOv39`dvFROI1jGKieYEWvO^Gp zH~H~W7eCG}YJZABN7!^GD3-vJ>P~)aB8W%lHmt)B{o+pD?~mVTF)xS-e({#f5)<L* zzh0dTPei^S{&A%JwSS8pk-NGFZ5Ddl<hLooYXly&|MW<@QD>v&8;U=5Rl_#1$8;~k zUg%N$^BCtiHN|h=%W38z?L2YCe?|7}{o!%vW=BVsj>N@+acYm3h(JG9TqGBAK<Pny z15F=;2{c7FS@KmG9f+grJf49VYz~#2F+u2;@Hp^Jl*l-T0X`{#F?ULCL=vnKsXMy@ zOM)6%M3S(9f4kUf6xX`LeGh<}4vk#02)-MYTvLoV+1}}gP*wD7CZRE&`ENvWMFagt zLSqpqb@d`DJQ>@fDnjzJ95MCS{Sg9Vkmsl_6mm@Q7&{sT6!8c;9P-RDtv?b)Si&mD zP=v<eZ;>`k3cun2cU{mgFRn0mPPMoW2UU~KC}a}hj^?VRj4Sj^0QKdLrQNI+^F&2K zG$%MGSQl8U(~~<k)TPN<b&lG4o9oG`9DdVKN3*=bMoY($UJ=u+_S09|Gxd4q8Ty6! z<x{PtS<cp`O3%}h7=QOb%MK6D4zR4}Da;=>Wi*!<XnXtYIK_jCZq?Ud3!g!ddz~Go zU)$v0{JFcPNTwNL8}kjzDqTlcX934noon{j?athm9ZcJ6HU9Z<LKm1Cv0gSS95ak7 ztBonKEJtnQ9|7I|AKeh5g4%%gtVoWKkan<Fk7an+`&9QXK#T38lTh3;L5->PmdPb+ zGwk`%<;fYw+403txaShQ^=8u#^b>5M;T8)*0#-(0l%vz3;MJeQ>E~EyCk_rbfnvVe zs-z7|yfZENmgjM$wt0Y#E>pu;R;k+37Jz3oOerGzVb2ogxhn24Dd*_7<32JwZuI^# z>d-3UwkIk)sE=elbMj+?>?fE6xWTmOVve~;H5{r*!py5__Q3u;mD7GxRGt=dZ}tO$ zGv?d{yk_?zgo((pNr>~=E6ytnfit+lbArrkc0Lw@s@SU6;cHZbPv$kY&SLOu&w6L{ zC69QT%Vp_b1io3DTtQXBVzn&8-*)ybwY-snZEdt`nqhQ;r}<-A2f2!_EIoY~7e6zI z`WY^l%3#c!2GY1O&PfK<O7xk{xZ8e)G|hT2R}I&q+tbIi!o51CYY%8u&f@fYq&eWG zEQ{{70U2}W+0T^UXXXI#V&0UG9XBxf&QCk|MY1}q*U}=Hp5jU*JFUA^PDhSrB7FhP zyzo0(vhLPFHKLT(BELW9eFR$>Uzpil%q!QUTmK+GnlZ5!noviHm8s6V(&Se&9-yU6 z>drOzJ-}S1NiWa-p`6I=ykvR|MEF=X-wi5Wihbls@=PVMjs-hkI#>y`TnQ{rf4fFL zjp?=7Gs#H(`rzr)!3xC%tE6E}{)RcXvEZepw-NK}i*DfW_dIBsevC+bB)v^f3~aOm zhp_B1ykHJkpE#qAT2QUn)~K$!MN5&9w7;~uysm!>XFo6Fma>1`s{)1ItLA-B{5X8V z-31!q+{KO7#WFo<t!1Ob5wm-1{46Z-y>2Xt^<(xPEx}syb$TOQv^kMQN&vZhL(@U8 zw0kSVpST|AnY5Sc`VM>eG7Xz+xIUZ1VM+<Xrc>o%e;w&fd*O3E7-_1*bjRy>lRm@v z`voS72R{F>?}ZDkdRm3s^IDw+3j=mm&Wy^5XRy<>VrnK)HaMriP&V5)!XvlJBO%8P zco>KGlTF*}<;whod&Bi*abB@BI5gIj4I@TyOWy6C3=6i1<KslE)9^8VK(r)=Zr|tL zhr^5a4i|?<N)&!z<<D*C@s8)(#c@aIIlL6R%voTU>!dvltO`4rJ(zbFa?B=QJRu}v z2BJ5lG#IYs+-?@2z8bbx*`GZonKB>-`6-ILj`>)QL;%S0#8A&zIZ8*1p*g5RGU5Pi zfjFJr-*sUatPGkBo4-gsayk8**Uwh8yaAvv$~sozz-DopIu?06X};b+bt>wBs*dV_ z#gk^5Uk~c=n!F7%>afZX9cIQy6mTQ{a8rFptHZ`NuJ7yv3v(}V`TE8Xa6t^I*B$Lf z!eYL7LK!MmRy@#lx)a@=m&CV<r-Gmp8G`5K)c5%^RArrXQK0PiR#@p<3`}fI%A6<x zcK$GJ8-anH-#bxw7=Ww4U+`OrH1*~4SHV~l2VV5yqy0aH91Cm|MU*J<voQ!3Neo!V zng*JtnVtRJZmBJIdw0-K+j`ehNG)NxZtqs<?R9q#N~tuY5HAo^{GebW2#CQT2@#@J zp^#K0(hxByg<y?JO9>zllqM2d-(0WlwP4s}Zf4(m^M3Q*TynYhW^`;SSa-v{Xj9KI z_oU2;SJ$51F{dOm2mSu@{0XM2{nXl;C`#OYG-KheC4;!-K;Pc`l!VY)4_XF7I2ReM z32}|qgjB4G>DX^Z9j|VOEF<Qa(AolCOSO6(d))NNEisnqmgX2{G^j;whPJ*4+em-~ z5PCdjV|5->oS-}&J_su)NFi(uE_Sr#M#vovFV_*vV7DF8qYhG7k-=0JeaYhpVX&&j z=Icf{0!RXcK}WA&h-6q%_RwuZ=MXJo2{2HSGF;Unk6JL?oI@rLXw6ac_Q_}~JK5LY zy#D>mSr2_!mG#_i;qj+77M?jcb8hEbSx>h<vG_*+Kb>EFe#ZCX%`RK%$jH1Btp7K= z`OvN-N3+_x4^Hd785I+`7n(BWXP;k!*Z9g_5Q3B2x=-d~_ROB?8?zq!?LzmrU6sox zU29zbI%+<U*VTQYqxa9ohASsu+jeB>gf9}aXD>MIxnzB`?ef>ppxyiHe{H+AX7QK% zd#)e7lfSn7;Ff(mzn|8-_w>@~cI%GB&cM{l%14%-Z&}@NJnw92i}cI0@BI~-`bop( zMN`6aE`Ff+N)xvxD%o#jTgMMiu})pudn9yfbAQK%Q!^47pA~W2H^15WZp$CdP1m>H z;xBHv(wFo6?PG0!4|L_8E2=utJ-DuO;9Ta`yY>&-;66{?;KcTtrWWU&tJ_~Hyz^-v zK3vqZy2aUYb$f8qol6z{1ATkCijJ4`+<o#y_sqfE?*?-6b8nZebUq&Fz41!J?KOUX z-#3S%FGuDYr7=&_!|i;*ri>M*uTS65-ahX>k*SQH;7APOV0@WF1G2)3>q)3bvvnE< z{~L;iWjks_vuKEwXsI<XF}TX8bs}~(FNsK!BqWMMgLAo(>+vubz+D`d9F#VNXGE4o z5@8X~^GJrl0S$#w8cILRR}qHr$$cq2;Fu&Y*q@w14~nlD3hmL1Lo^`+46ZOMqXz9L zgJ^t@33y;J(vHSY5cS?zJW0cY!yplpB)Hr%LqXlC#?avgSLlsSO?n=s?MnK)Tnp>C zT(f9)3X}m3=(ZWRLb{CzB@W;h^;$!tNlyhx1YD+YHF%z7#$(VbCkST;mqd)R2(7|u z5R!d`5z+(mJh&J+aIS@gSOo<^f{kd8oj_VzQ<3z#0!Ab1z=bnj2WC_W*f636b?gG8 z)~-fLP3fy@#;GsTM1aC$WvCilRAv~g4ug?NqZwQl)1&SXz4EGuc){HQp2G_beWh-d zTY8;N4b*MW6fji=RNJjgnn%5xE^fFe4+!0HCt_L!exKjZvJwwNW?2^pvjQ``b8I1~ z44s7F7EX}~l#IYoVeo*4^Q?`B^btIT!*&VSBw0al3Y5K+8Wcx)031kIp3Xj)$*?G} z(F?7NW_$BFmdLEk@~k2VqL|BavsiXkPMR@|U^l}eA~3)y^&m+Uc@fp2AsCT~1i?!m z6ivZk4gVV-2NO62TtlA`IwJEl#>T){fhTY#V_?KZ=qZke@%Pg4+<09GB>FutuzI{) zu!G#IpFp!}tXx^-()K!*247ef4d9^Bq=Tz)z%(HOlabEg;%J?TC}W!L#a>j63OG?! z+$#LIqY~CbT%zO?Igejrd6kGV>+=>e4<@0Z?lnVdL=U}c$LkShRbEoOyeO(fkbOQ$ jmfbFaSKKaHR=sYIN<-9kG|NdIDUn^A#AIjt%KXfKp2QV6 literal 0 HcmV?d00001 -- GitLab