commit
0eeb2a2b8f
70 changed files with 3016 additions and 3670 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
docs/html
|
311
Doxygenfile
311
Doxygenfile
|
@ -1,4 +1,4 @@
|
|||
# Doxyfile 1.7.4
|
||||
# Doxyfile 1.8.2
|
||||
|
||||
# This file describes the settings to be used by the documentation system
|
||||
# doxygen (www.doxygen.org) for a project.
|
||||
|
@ -22,8 +22,9 @@
|
|||
|
||||
DOXYFILE_ENCODING = UTF-8
|
||||
|
||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
||||
# by quotes) that should identify the project.
|
||||
# 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 = ChibiOS/GFX
|
||||
|
||||
|
@ -31,7 +32,7 @@ PROJECT_NAME = ChibiOS/GFX
|
|||
# This could be handy for archiving the generated documentation or
|
||||
# if some version control system is used.
|
||||
|
||||
PROJECT_NUMBER = 0.0.1
|
||||
PROJECT_NUMBER = 1.4
|
||||
|
||||
# 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
|
||||
|
@ -51,7 +52,7 @@ PROJECT_LOGO =
|
|||
# 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 =
|
||||
OUTPUT_DIRECTORY = docs
|
||||
|
||||
# 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
|
||||
|
@ -135,7 +136,9 @@ FULL_PATH_NAMES = NO
|
|||
# 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.
|
||||
# path to strip. Note that you specify absolute paths here, but also
|
||||
# relative paths, which will be relative from the directory where doxygen is
|
||||
# started.
|
||||
|
||||
STRIP_FROM_PATH = "C:/Documents and Settings/Administrator/"
|
||||
|
||||
|
@ -202,27 +205,20 @@ TAB_SIZE = 2
|
|||
# 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 = "iclass=@par Function Class:\n This is an \
|
||||
<b>I-Class</b> API, this function can be \
|
||||
invoked from within a system lock zone by both \
|
||||
threads and interrupt handlers." \
|
||||
"sclass=@par Function Class:\n This is an \
|
||||
<b>S-Class</b> API, this function can be \
|
||||
invoked from within a system lock zone by threads \
|
||||
only." \
|
||||
"api=@par Function Class:\n Normal API, this \
|
||||
function can be invoked by regular system threads \
|
||||
but not from within a lock zone." \
|
||||
"notapi=@par Function Class:\n Not an API, this \
|
||||
function is for internal use only." \
|
||||
"isr=@par Function Class:\n Interrupt handler, \
|
||||
this function should not be directly invoked." \
|
||||
"init=@par Function Class:\n Initializer, this \
|
||||
function just initializes an object and can be \
|
||||
invoked before the kernel is initialized." \
|
||||
"special=@par Function Class:\n Special function, \
|
||||
this function has special requirements see the \
|
||||
notes."
|
||||
ALIASES = "iclass=@par Function Class:\n This is an <b>I-Class</b> API, this function can be invoked from within a system lock zone by both threads and interrupt handlers." \
|
||||
"sclass=@par Function Class:\n This is an <b>S-Class</b> API, this function can be invoked from within a system lock zone by threads only." \
|
||||
"api=@par Function Class:\n Normal API, this function can be invoked by regular system threads but not from within a lock zone." \
|
||||
"notapi=@par Function Class:\n Not an API, this function is for internal use only." \
|
||||
"isr=@par Function Class:\n Interrupt handler, this function should not be directly invoked." \
|
||||
"init=@par Function Class:\n Initializer, this function just initializes an object and can be invoked before the kernel is initialized." \
|
||||
"special=@par Function Class:\n Special function, this function has special requirements see the notes."
|
||||
|
||||
# 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.
|
||||
|
@ -251,17 +247,34 @@ OPTIMIZE_FOR_FORTRAN = NO
|
|||
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.
|
||||
# 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
|
||||
|
||||
# When enabled doxygen tries to link words that correspond to documented classes,
|
||||
# or namespaces to their corresponding documentation. Such a link can be
|
||||
# prevented in individual cases by by putting a % sign in front of the word or
|
||||
# globally by setting AUTOLINK_SUPPORT to NO.
|
||||
|
||||
AUTOLINK_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
|
||||
|
@ -282,12 +295,7 @@ CPP_CLI_SUPPORT = NO
|
|||
|
||||
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.
|
||||
# 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
|
||||
|
||||
|
@ -313,6 +321,15 @@ SUBGROUPING = YES
|
|||
|
||||
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
|
||||
|
@ -335,10 +352,21 @@ TYPEDEF_HIDES_STRUCT = NO
|
|||
# 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
|
||||
# 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
|
||||
#---------------------------------------------------------------------------
|
||||
|
@ -355,6 +383,11 @@ EXTRACT_ALL = NO
|
|||
|
||||
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.
|
||||
|
||||
|
@ -542,12 +575,6 @@ MAX_INITIALIZER_LINES = 30
|
|||
|
||||
SHOW_USED_FILES = NO
|
||||
|
||||
# If the sources in your project are distributed over multiple directories
|
||||
# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
|
||||
# in the documentation. The default is NO.
|
||||
|
||||
SHOW_DIRECTORIES = NO
|
||||
|
||||
# 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.
|
||||
|
@ -573,12 +600,22 @@ 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. The create the layout file
|
||||
# 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 = ./rsc/layout.xml
|
||||
LAYOUT_FILE = docs/rsc/layout.xml
|
||||
|
||||
# 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
|
||||
|
@ -666,13 +703,15 @@ FILE_PATTERNS =
|
|||
|
||||
RECURSIVE = YES
|
||||
|
||||
# The EXCLUDE tag can be used to specify files and/or directories that should
|
||||
# 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 =
|
||||
|
||||
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
|
||||
# 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.
|
||||
|
||||
|
@ -718,7 +757,7 @@ EXAMPLE_RECURSIVE = NO
|
|||
# directories that contain image that are included in the documentation (see
|
||||
# the \image command).
|
||||
|
||||
IMAGE_PATH = ./rsc
|
||||
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
|
||||
|
@ -774,7 +813,7 @@ 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 and C++ comments will always remain visible.
|
||||
# fragments. Normal C, C++ and Fortran comments will always remain visible.
|
||||
|
||||
STRIP_CODE_COMMENTS = NO
|
||||
|
||||
|
@ -861,10 +900,11 @@ HTML_FILE_EXTENSION = .html
|
|||
# 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 adviced to generate a default header using "doxygen -w html
|
||||
# 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!
|
||||
# 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 =
|
||||
|
||||
|
@ -876,13 +916,23 @@ 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
|
||||
# stylesheet in the HTML output directory as well, or it will be erased!
|
||||
# fine-tune the look of the HTML output. If left blank doxygen will
|
||||
# generate a default style sheet. Note that it is recommended to use
|
||||
# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
|
||||
# tag will in the future become obsolete.
|
||||
|
||||
HTML_STYLESHEET =
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
|
||||
# user-defined cascading style sheet that is included after the standard
|
||||
# style sheets created by doxygen. Using this option one can overrule
|
||||
# certain style aspects. This is preferred over using HTML_STYLESHEET
|
||||
# since it does not replace the standard style sheet and is therefor more
|
||||
# robust against future updates. Doxygen will copy the style sheet file to
|
||||
# the output directory.
|
||||
|
||||
HTML_EXTRA_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
|
||||
|
@ -923,20 +973,23 @@ HTML_COLORSTYLE_GAMMA = 80
|
|||
|
||||
HTML_TIMESTAMP = YES
|
||||
|
||||
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
|
||||
# files or namespaces will be aligned in HTML using tables. If set to
|
||||
# NO a bullet list will be used.
|
||||
|
||||
HTML_ALIGN_MEMBERS = 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. For this to work a browser that supports
|
||||
# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
|
||||
# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
|
||||
# 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).
|
||||
|
@ -964,9 +1017,9 @@ DOCSET_FEEDNAME = "Doxygen generated docs"
|
|||
|
||||
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.
|
||||
# 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
|
||||
|
||||
|
@ -986,7 +1039,7 @@ GENERATE_HTMLHELP = NO
|
|||
# can add a path in front of the file if the result should not be
|
||||
# written to the html output directory.
|
||||
|
||||
CHM_FILE = ../ChibiOS/GFX.chm
|
||||
CHM_FILE = ChibiOS-GFX.chm
|
||||
|
||||
# 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
|
||||
|
@ -1088,19 +1141,14 @@ GENERATE_ECLIPSEHELP = NO
|
|||
|
||||
ECLIPSE_DOC_ID = org.doxygen.Project
|
||||
|
||||
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
|
||||
# top of each HTML page. The value NO (the default) enables the index and
|
||||
# the value YES disables it.
|
||||
# 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 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
|
||||
|
||||
# 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
|
||||
|
@ -1108,13 +1156,17 @@ ENUM_VALUES_PER_LINE = 4
|
|||
# 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 = YES
|
||||
|
||||
# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
|
||||
# and Class Hierarchy pages using a tree view instead of an ordered list.
|
||||
# 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.
|
||||
|
||||
USE_INLINE_TREES = NO
|
||||
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
|
||||
|
@ -1147,7 +1199,7 @@ FORMULA_TRANSPARENT = YES
|
|||
# (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 also need to install MathJax separately and
|
||||
# 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
|
||||
|
@ -1156,13 +1208,19 @@ USE_MATHJAX = NO
|
|||
# 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.org site, so you can quickly see the result without installing
|
||||
# MathJax, but it is strongly recommended to install a local copy of MathJax
|
||||
# before deployment.
|
||||
# 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
|
||||
|
@ -1276,6 +1334,12 @@ LATEX_HIDE_INDICES = NO
|
|||
|
||||
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
|
||||
#---------------------------------------------------------------------------
|
||||
|
@ -1498,22 +1562,18 @@ SKIP_FUNCTION_MACROS = NO
|
|||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
# The TAGFILES option can be used to specify one or more tagfiles.
|
||||
# Optionally an initial location of the external documentation
|
||||
# can be added for each tagfile. The format of a tag file without
|
||||
# this location is as follows:
|
||||
# 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. If a location is present for each tag, the installdox tool
|
||||
# does not have to be run to correct the links.
|
||||
# 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.
|
||||
# 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 =
|
||||
|
||||
|
@ -1581,13 +1641,12 @@ HAVE_DOT = YES
|
|||
|
||||
DOT_NUM_THREADS = 0
|
||||
|
||||
# By default doxygen will write a font called Helvetica to the output
|
||||
# directory and reference it in 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.
|
||||
# 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 = FreeSans
|
||||
|
||||
|
@ -1596,17 +1655,16 @@ DOT_FONTNAME = FreeSans
|
|||
|
||||
DOT_FONTSIZE = 8
|
||||
|
||||
# By default doxygen will tell dot to use the output directory to look for the
|
||||
# FreeSans.ttf font (which doxygen will put there itself). If you specify a
|
||||
# different font using DOT_FONTNAME you can set the path where dot
|
||||
# can find it using this tag.
|
||||
# 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
|
||||
# the CLASS_DIAGRAMS tag to NO.
|
||||
# CLASS_DIAGRAMS tag to NO.
|
||||
|
||||
CLASS_GRAPH = YES
|
||||
|
||||
|
@ -1628,6 +1686,15 @@ GROUP_GRAPHS = YES
|
|||
|
||||
UML_LOOK = YES
|
||||
|
||||
# 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.
|
||||
|
||||
|
@ -1668,7 +1735,7 @@ CALLER_GRAPH = NO
|
|||
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
|
||||
# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to 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.
|
||||
|
@ -1677,10 +1744,21 @@ DIRECTORY_GRAPH = NO
|
|||
|
||||
# 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 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.
|
||||
|
||||
|
@ -1744,4 +1822,3 @@ GENERATE_LEGEND = YES
|
|||
# the various graphs.
|
||||
|
||||
DOT_CLEANUP = YES
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "touchpad.h"
|
||||
#include "touchscreen.h"
|
||||
|
||||
#define COLOR_SIZE 20
|
||||
#define PEN_SIZE 20
|
||||
|
@ -43,7 +43,7 @@ static const SPIConfig spicfg = {
|
|||
/* SPI_CR1_BR_2 | */ SPI_CR1_BR_1 | SPI_CR1_BR_0,
|
||||
};
|
||||
|
||||
TOUCHPADDriver TOUCHPADD1 = {
|
||||
TouchscreenDriver TOUCHPADD1 = {
|
||||
&SPID1,
|
||||
&spicfg,
|
||||
TP_IRQ_PORT,
|
||||
|
@ -85,14 +85,14 @@ int main(void) {
|
|||
chSysInit();
|
||||
|
||||
gdispInit();
|
||||
tpInit(&TOUCHPADD1);
|
||||
tpCalibrate();
|
||||
tsInit(&TOUCHPADD1);
|
||||
tsCalibrate();
|
||||
|
||||
drawScreen();
|
||||
|
||||
while (TRUE) {
|
||||
x = tpReadX();
|
||||
y = tpReadY();
|
||||
x = tsReadX();
|
||||
y = tsReadY();
|
||||
|
||||
/* inside color box ? */
|
||||
if(y >= OFFSET && y <= COLOR_SIZE) {
|
||||
|
|
184
docs/rsc/layout.xml
Normal file
184
docs/rsc/layout.xml
Normal file
|
@ -0,0 +1,184 @@
|
|||
<doxygenlayout version="1.0">
|
||||
<!-- Navigation index tabs for HTML output -->
|
||||
<navindex>
|
||||
<tab type="mainpage" visible="yes" title=""/>
|
||||
<tab type="pages" visible="yes" title="" intro=""/>
|
||||
<tab type="modules" visible="yes" title="" intro=""/>
|
||||
<tab type="namespaces" visible="yes" title="">
|
||||
<tab type="namespaces" visible="yes" title="" intro=""/>
|
||||
<tab type="namespacemembers" visible="yes" title="" intro=""/>
|
||||
</tab>
|
||||
<tab type="classes" visible="yes" title="">
|
||||
<tab type="classes" visible="yes" title="" intro=""/>
|
||||
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
|
||||
<tab type="hierarchy" visible="yes" title="" intro=""/>
|
||||
<tab type="classmembers" visible="yes" title="" intro=""/>
|
||||
</tab>
|
||||
<tab type="files" visible="yes" title="">
|
||||
<tab type="files" visible="yes" title="" intro=""/>
|
||||
<tab type="globals" visible="yes" title="" intro=""/>
|
||||
</tab>
|
||||
<!--<tab type="dirs" visible="yes" title="" intro=""/>-->
|
||||
<tab type="examples" visible="yes" title="" intro=""/>
|
||||
</navindex>
|
||||
|
||||
<!-- Layout definition for a class page -->
|
||||
<class>
|
||||
<briefdescription visible="no"/>
|
||||
<detaileddescription title=""/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<inheritancegraph visible="$CLASS_GRAPH"/>
|
||||
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
|
||||
<allmemberslink visible="yes"/>
|
||||
<memberdecl>
|
||||
<nestedclasses visible="yes" title=""/>
|
||||
<publictypes title=""/>
|
||||
<publicslots title=""/>
|
||||
<signals title=""/>
|
||||
<publicmethods title=""/>
|
||||
<publicstaticmethods title=""/>
|
||||
<publicattributes title=""/>
|
||||
<publicstaticattributes title=""/>
|
||||
<protectedtypes title=""/>
|
||||
<protectedslots title=""/>
|
||||
<protectedmethods title=""/>
|
||||
<protectedstaticmethods title=""/>
|
||||
<protectedattributes title=""/>
|
||||
<protectedstaticattributes title=""/>
|
||||
<packagetypes title=""/>
|
||||
<packagemethods title=""/>
|
||||
<packagestaticmethods title=""/>
|
||||
<packageattributes title=""/>
|
||||
<packagestaticattributes title=""/>
|
||||
<properties title=""/>
|
||||
<events title=""/>
|
||||
<privatetypes title=""/>
|
||||
<privateslots title=""/>
|
||||
<privatemethods title=""/>
|
||||
<privatestaticmethods title=""/>
|
||||
<privateattributes title=""/>
|
||||
<privatestaticattributes title=""/>
|
||||
<friends title=""/>
|
||||
<related title="" subtitle=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<memberdef>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<constructors title=""/>
|
||||
<functions title=""/>
|
||||
<related title=""/>
|
||||
<variables title=""/>
|
||||
<properties title=""/>
|
||||
<events title=""/>
|
||||
</memberdef>
|
||||
<usedfiles visible="$SHOW_USED_FILES"/>
|
||||
<authorsection visible="yes"/>
|
||||
</class>
|
||||
|
||||
<!-- Layout definition for a namespace page -->
|
||||
<namespace>
|
||||
<briefdescription visible="no"/>
|
||||
<detaileddescription title=""/>
|
||||
<memberdecl>
|
||||
<nestednamespaces visible="yes" title=""/>
|
||||
<classes visible="yes" title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<memberdef>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</namespace>
|
||||
|
||||
<!-- Layout definition for a file page -->
|
||||
<file>
|
||||
<briefdescription visible="no"/>
|
||||
<detaileddescription title=""/>
|
||||
<includes visible="$SHOW_INCLUDE_FILES"/>
|
||||
<includegraph visible="$INCLUDE_GRAPH"/>
|
||||
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
|
||||
<sourcelink visible="yes"/>
|
||||
<memberdecl>
|
||||
<classes visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
</memberdecl>
|
||||
<memberdef>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
</memberdef>
|
||||
<authorsection/>
|
||||
</file>
|
||||
|
||||
<!-- Layout definition for a group page -->
|
||||
<group>
|
||||
<briefdescription visible="no"/>
|
||||
<groupgraph visible="$GROUP_GRAPHS"/>
|
||||
<detaileddescription title=""/>
|
||||
<memberdecl>
|
||||
<classes visible="yes" title=""/>
|
||||
<namespaces visible="yes" title=""/>
|
||||
<dirs visible="yes" title=""/>
|
||||
<nestedgroups visible="yes" title=""/>
|
||||
<files visible="yes" title=""/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<membergroups visible="yes"/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<enumvalues title=""/>
|
||||
<signals title=""/>
|
||||
<publicslots title=""/>
|
||||
<protectedslots title=""/>
|
||||
<privateslots title=""/>
|
||||
<events title=""/>
|
||||
<properties title=""/>
|
||||
<friends title=""/>
|
||||
</memberdecl>
|
||||
<memberdef>
|
||||
<pagedocs/>
|
||||
<functions title=""/>
|
||||
<variables title=""/>
|
||||
<defines title=""/>
|
||||
<typedefs title=""/>
|
||||
<enums title=""/>
|
||||
<enumvalues title=""/>
|
||||
<signals title=""/>
|
||||
<publicslots title=""/>
|
||||
<protectedslots title=""/>
|
||||
<privateslots title=""/>
|
||||
<events title=""/>
|
||||
<properties title=""/>
|
||||
<friends title=""/>
|
||||
</memberdef>
|
||||
<authorsection visible="yes"/>
|
||||
</group>
|
||||
|
||||
<!-- Layout definition for a directory page -->
|
||||
<directory>
|
||||
<briefdescription visible="no"/>
|
||||
<directorygraph visible="yes"/>
|
||||
<detaileddescription title=""/>
|
||||
<memberdecl>
|
||||
<dirs visible="yes"/>
|
||||
<files visible="yes"/>
|
||||
</memberdecl>
|
||||
</directory>
|
||||
</doxygenlayout>
|
28
docs/src/console.dox
Normal file
28
docs/src/console.dox
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup CONSOLE
|
||||
* @details The CONSOLE module provides a BaseSequentialStream abstraction.
|
||||
* It allows to easily use an LCD to output any generic data, for
|
||||
* example by using the chprintf() provided by ChibiOS/RT.
|
||||
* @details Read more here: http://chibios-gfx.com/documentation/console
|
||||
*/
|
||||
|
26
docs/src/gdisp.dox
Normal file
26
docs/src/gdisp.dox
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup GDISP
|
||||
* @details The GDISP module provides high level abstraction to interface
|
||||
* pixel oriented graphic displays.
|
||||
*/
|
||||
|
28
docs/src/graph.dox
Normal file
28
docs/src/graph.dox
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup GRAPH
|
||||
* @details The GRAPH module provides high level HAL independed routines
|
||||
* to draw graphs on a graphic display. The graph is highly
|
||||
* configurable. There are many options to controll the look
|
||||
* of the graph.
|
||||
*/
|
||||
|
27
docs/src/gwin.dox
Normal file
27
docs/src/gwin.dox
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup GWIN
|
||||
* @details The GWIN module provides simple window management.
|
||||
* @details Please note that GWIN is a module ontop of GDISP. Therefore, GDISP
|
||||
* has to be set up correctly.
|
||||
*/
|
||||
|
|
@ -19,26 +19,19 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file touchpadADS7843/touchpad_lld_config.h
|
||||
* @brief Touchpad Driver subsystem low level driver.
|
||||
* @mainpage ChibiOS/GFX
|
||||
* @author Joel Bodenmann (joel@unormal.org).
|
||||
*
|
||||
* @addtogroup TOUCHPAD
|
||||
* @{
|
||||
* <h2>ChibiOS/GFX</h2>
|
||||
* ChibiOS/GFX is an official add-on library for ChibiOS/RT to
|
||||
* interface all different types of LCDs and touchscreens.
|
||||
*
|
||||
* <h2>Features</h2>
|
||||
* - Modular design to reduce memory footprint
|
||||
* - HAL abstractions allows it to easily write new drivers
|
||||
* - Completely written in C, usable in C++ without any modifications
|
||||
* - Supports hardware accelerated drawing by LCDs
|
||||
* - Very flexible interfaces for calibration storage and more
|
||||
* - We are having our own homepage: http://chibios-gfx.com
|
||||
*/
|
||||
|
||||
#ifndef _TOUCHPAD_LLD_CONFIG_H
|
||||
#define _TOUCHPAD_LLD_CONFIG_H
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#define TOUCHPAD_HAS_IRQ TRUE
|
||||
#define TOUCHPAD_HAS_PRESSURE FALSE
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
|
||||
#endif /* _TOUCHPAD_LLD_CONFIG_H */
|
||||
/** @} */
|
26
docs/src/touchscreen.dox
Normal file
26
docs/src/touchscreen.dox
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @details The TOUCHSCREEN module provides high level abstraction to interface
|
||||
* touchscreens.
|
||||
*/
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispNokia6610/gdisp_lld.c
|
||||
* @file drivers/gdisp/Nokia6610/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the Nokia6610 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -30,7 +30,7 @@
|
|||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
|
@ -448,7 +448,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
|||
#if GDISP_HARDWARE_CONTROL || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Driver Control
|
||||
* @detail Unsupported control codes are ignored.
|
||||
* @details Unsupported control codes are ignored.
|
||||
* @note The value parameter should always be typecast to (void *).
|
||||
* @note There are some predefined and some specific to the low level driver.
|
||||
* @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispNokia6610/gdisp_lld_board_example.h
|
||||
* @file drivers/gdisp/Nokia6610/gdisp_lld_board_example.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the Nokia6610 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @file gdispNokia6610/gdisp_lld_board_olimexsam7ex256.h
|
||||
* @file drivers/gdisp/Nokia6610/gdisp_lld_board_olimexsam7ex256.h
|
||||
* @brief GDISP Graphic Driver subsystem board interface for the Olimex SAM7-EX256 board.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispNokia6610/gdisp_lld_config.h
|
||||
* @file drivers/gdisp/Nokia6610/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for the Nokia6610 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispS6d1121/gdisp_lld.c
|
||||
* @file drivers/gdisp/S6D1121/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for the S6d1121 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -30,7 +30,7 @@
|
|||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
|
@ -411,7 +411,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
|||
#if GDISP_HARDWARE_CONTROL || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Driver Control
|
||||
* @detail Unsupported control codes are ignored.
|
||||
* @details Unsupported control codes are ignored.
|
||||
* @note The value parameter should always be typecast to (void *).
|
||||
* @note There are some predefined and some specific to the low level driver.
|
||||
* @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
|
||||
|
@ -501,3 +501,4 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
|||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispS6d1121/gdisp_lld_config.h
|
||||
* @file drivers/gdisp/S6D1121/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for the S6d1121 display.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -51,3 +51,4 @@
|
|||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
@ -251,3 +251,4 @@ static void lld_lcdResetViewPort(void) {
|
|||
}
|
||||
|
||||
#endif /* S6D1121_H */
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
|
@ -385,7 +385,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
|||
#if (GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Driver Control
|
||||
* @detail Unsupported control codes are ignored.
|
||||
* @details Unsupported control codes are ignored.
|
||||
* @note The value parameter should always be typecast to (void *).
|
||||
* @note There are some predefined and some specific to the low level driver.
|
||||
* @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file SSD1963/gdisp_lld.c
|
||||
* @file drivers/gdisp/SSD1963/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -30,7 +30,7 @@
|
|||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
|
@ -511,7 +511,7 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
|||
#if (GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Driver Control
|
||||
* @detail Unsupported control codes are ignored.
|
||||
* @details Unsupported control codes are ignored.
|
||||
* @note The value parameter should always be typecast to (void *).
|
||||
* @note There are some predefined and some specific to the low level driver.
|
||||
* @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file SSD1963/gdisp_lld_config.h
|
||||
* @file drivers/gdisp/SSD1963/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -29,7 +29,7 @@
|
|||
#ifndef _GDISP_LLD_CONFIG_H
|
||||
#define _GDISP_LLD_CONFIG_H
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
|
@ -50,3 +50,4 @@
|
|||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -18,14 +18,6 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SSD1963/ssd1963.h
|
||||
* @brief SSD1963 specific data.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef SSD1963_H
|
||||
#define SSD1963_H
|
||||
|
||||
|
@ -138,4 +130,4 @@
|
|||
#define SSD1963_GET_PIXEL_DATA_INTERFACE 0x00F1
|
||||
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispTestStub/gdisp_lld.c
|
||||
* @file drivers/gdisp/TestStub/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source (stub).
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -30,7 +30,7 @@
|
|||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispTestStub/gdisp_lld_config.h
|
||||
* @file drivers/gdisp/TestStub/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header (stub).
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispVMT/gdisp_lld.c
|
||||
* @file drivers/gdisp/VMT/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for VMT.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -30,7 +30,7 @@
|
|||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
#define GDISP_LLD_NO_STRUCT
|
||||
|
||||
|
@ -279,3 +279,4 @@ bool_t gdisp_lld_init_VMT(void) {
|
|||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispVMT/gdisp_lld_config.h
|
||||
* @file drivers/gdisp/VMT/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header template.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -68,3 +68,4 @@
|
|||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispVMT/gdisp_lld.c
|
||||
* @file drivers/gdisp/VMT/gdisp_lld_driver1.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for VMT.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -29,7 +29,7 @@
|
|||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
#define CONFIGFILE() <../GDISP_VMT_NAME1()/gdisp_lld_config.h>
|
||||
#define DRIVERFILE() <../GDISP_VMT_NAME1()/gdisp_lld.c>
|
||||
|
@ -49,3 +49,4 @@
|
|||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdispVMT/gdisp_lld.c
|
||||
* @file drivers/gdisp/VMT/gdisp_lld_driver2.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for VMT.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -29,7 +29,7 @@
|
|||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
#define CONFIGFILE() <../GDISP_VMT_NAME2()/gdisp_lld_config.h>
|
||||
#define DRIVERFILE() <../GDISP_VMT_NAME2()/gdisp_lld.c>
|
||||
|
@ -49,3 +49,4 @@
|
|||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file Win32/gdisp_lld.c
|
||||
* @file drivers/gdisp/Win32/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source for Win32.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -30,7 +30,7 @@
|
|||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
|
@ -443,3 +443,4 @@ void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
|||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file Win32/gdisp_lld_config.h
|
||||
* @file drivers/gdisp/Win32/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header for Win32.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -29,7 +29,7 @@
|
|||
#ifndef _GDISP_LLD_CONFIG_H
|
||||
#define _GDISP_LLD_CONFIG_H
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
#if GFX_USE_GDISP /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
|
@ -50,3 +50,4 @@
|
|||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_TOUCHPAD TRUE
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/touchpadADS7843/touchpad_lld.mk
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/touchpad/ADS7843/touchpad_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/touchpad/ADS7843
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_TOUCHPAD TRUE
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/touchpad/XPT2046/touchpad_lld.mk
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/touchpad/XPT2046/touchpad_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/touchpad/XPT2046
|
||||
|
8
drivers/touchscreen/ADS7843/readme.txt
Normal file
8
drivers/touchscreen/ADS7843/readme.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_TOUCHSCREEN TRUE
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/touchscreen/ADS7843/touchscreen_lld.mk
|
||||
|
|
@ -19,18 +19,18 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file touchpadXPT2046/touchpad_lld.c
|
||||
* @brief Touchpad Driver subsystem low level driver source.
|
||||
* @file drivers/touchscreen/ADS7843/touchscreen_lld.c
|
||||
* @brief Touchscreen Driver subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup TOUCHPAD
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "touchpad.h"
|
||||
#include "touchscreen.h"
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
|
@ -44,8 +44,8 @@
|
|||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
#if !defined(__DOXYGEN__)
|
||||
/* Local copy of the current touchpad driver */
|
||||
static const TOUCHPADDriver *tpDriver;
|
||||
/* Local copy of the current touchscreen driver */
|
||||
static const TouchscreenDriver *tsDriver;
|
||||
|
||||
static uint16_t sampleBuf[7];
|
||||
#endif
|
||||
|
@ -65,22 +65,24 @@
|
|||
/* ---- Required Routines ---- */
|
||||
|
||||
/**
|
||||
* @brief Low level Touchpad driver initialization.
|
||||
* @brief Low level touchscreen driver initialization.
|
||||
*
|
||||
* @param[in] ts The touchscreen driver
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void tp_lld_init(const TOUCHPADDriver *tp) {
|
||||
tpDriver = tp;
|
||||
void ts_lld_init(const TouchscreenDriver *ts) {
|
||||
tsDriver = ts;
|
||||
|
||||
if(tpDriver->direct_init)
|
||||
spiStart(tpDriver->spip, tpDriver->spicfg);
|
||||
if(tsDriver->direct_init)
|
||||
spiStart(tsDriver->spip, tsDriver->spicfg);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Reads a conversion from the touchpad
|
||||
* @brief Reads a conversion from the touchscreen
|
||||
*
|
||||
* @param[in] cmd The command bits to send to the touchpad
|
||||
* @param[in] cmd The command bits to send to the touchscreen
|
||||
*
|
||||
* @return The read value 12-bit right-justified
|
||||
*
|
||||
|
@ -89,14 +91,14 @@ void tp_lld_init(const TOUCHPADDriver *tp) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_value(uint8_t cmd) {
|
||||
uint16_t ts_lld_read_value(uint8_t cmd) {
|
||||
static uint8_t txbuf[3] = {0};
|
||||
static uint8_t rxbuf[3] = {0};
|
||||
uint16_t ret;
|
||||
|
||||
txbuf[0] = cmd;
|
||||
|
||||
spiExchange(tpDriver->spip, 3, txbuf, rxbuf);
|
||||
spiExchange(tsDriver->spip, 3, txbuf, rxbuf);
|
||||
|
||||
ret = (rxbuf[1] << 5) | (rxbuf[2] >> 3);
|
||||
|
||||
|
@ -104,13 +106,13 @@ uint16_t tp_lld_read_value(uint8_t cmd) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 7-point median filtering code for touchpad samples
|
||||
* @brief 7-point median filtering code for touchscreen samples
|
||||
*
|
||||
* @note This is an internally used routine only.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static void tp_lld_filter(void) {
|
||||
static void ts_lld_filter(void) {
|
||||
uint16_t temp;
|
||||
int i,j;
|
||||
|
||||
|
@ -133,37 +135,37 @@ static void tp_lld_filter(void) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_x(void) {
|
||||
uint16_t ts_lld_read_x(void) {
|
||||
int i;
|
||||
|
||||
#if defined(SPI_USE_MUTUAL_EXCLUSION)
|
||||
spiAcquireBus(tpDriver->spip);
|
||||
spiAcquireBus(tsDriver->spip);
|
||||
#endif
|
||||
|
||||
TOUCHPAD_SPI_PROLOGUE();
|
||||
palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
|
||||
TOUCHSCREEN_SPI_PROLOGUE();
|
||||
palClearPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad);
|
||||
|
||||
/* Discard the first conversion - very noisy and keep the ADC on hereafter
|
||||
* till we are done with the sampling. Note that PENIRQ is disabled.
|
||||
*/
|
||||
tp_lld_read_value(0xD1);
|
||||
ts_lld_read_value(0xD1);
|
||||
|
||||
for(i = 0; i < 7; i++) {
|
||||
sampleBuf[i]=tp_lld_read_value(0xD1);
|
||||
sampleBuf[i] = ts_lld_read_value(0xD1);
|
||||
}
|
||||
|
||||
/* Switch on PENIRQ once again - perform a dummy read */
|
||||
tp_lld_read_value(0xD0);
|
||||
ts_lld_read_value(0xD0);
|
||||
|
||||
palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
|
||||
TOUCHPAD_SPI_EPILOGUE();
|
||||
palSetPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad);
|
||||
TOUCHSCREEN_SPI_EPILOGUE();
|
||||
|
||||
#if defined(SPI_USE_MUTUAL_EXCLUSION)
|
||||
spiReleaseBus(tpDriver->spip);
|
||||
spiReleaseBus(tsDriver->spip);
|
||||
#endif
|
||||
|
||||
/* Find the median - use selection sort */
|
||||
tp_lld_filter();
|
||||
ts_lld_filter();
|
||||
|
||||
return sampleBuf[3];
|
||||
}
|
||||
|
@ -173,43 +175,43 @@ uint16_t tp_lld_read_x(void) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_y(void) {
|
||||
uint16_t ts_lld_read_y(void) {
|
||||
int i;
|
||||
|
||||
#if defined(SPI_USE_MUTUAL_EXCLUSION)
|
||||
spiAcquireBus(tpDriver->spip);
|
||||
spiAcquireBus(tsDriver->spip);
|
||||
#endif
|
||||
|
||||
TOUCHPAD_SPI_PROLOGUE();
|
||||
palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
|
||||
TOUCHSCREEN_SPI_PROLOGUE();
|
||||
palClearPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad);
|
||||
|
||||
/* Discard the first conversion - very noisy and keep the ADC on hereafter
|
||||
* till we are done with the sampling. Note that PENIRQ is disabled.
|
||||
*/
|
||||
tp_lld_read_value(0x91);
|
||||
ts_lld_read_value(0x91);
|
||||
|
||||
for(i = 0; i < 7; i++) {
|
||||
sampleBuf[i] = tp_lld_read_value(0x91);
|
||||
sampleBuf[i] = ts_lld_read_value(0x91);
|
||||
}
|
||||
|
||||
/* Switch on PENIRQ once again - perform a dummy read */
|
||||
tp_lld_read_value(0x90);
|
||||
ts_lld_read_value(0x90);
|
||||
|
||||
palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
|
||||
TOUCHPAD_SPI_EPILOGUE();
|
||||
palSetPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad);
|
||||
TOUCHSCREEN_SPI_EPILOGUE();
|
||||
|
||||
#ifdef SPI_USE_MUTUAL_EXCLUSION
|
||||
spiReleaseBus(tpDriver->spip);
|
||||
spiReleaseBus(tsDriver->spip);
|
||||
#endif
|
||||
|
||||
/* Find the median - use selection sort */
|
||||
tp_lld_filter();
|
||||
ts_lld_filter();
|
||||
|
||||
return sampleBuf[3];
|
||||
}
|
||||
|
||||
/* ---- Optional Routines ---- */
|
||||
#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__)
|
||||
#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__)
|
||||
/*
|
||||
* @brief for checking if touchpad is pressed or not.
|
||||
*
|
||||
|
@ -217,23 +219,23 @@ uint16_t tp_lld_read_y(void) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint8_t tp_lld_irq(void) {
|
||||
return (!palReadPad(tpDriver->tpIRQPort, tpDriver->tpIRQPin));
|
||||
uint8_t ts_lld_irq(void) {
|
||||
return (!palReadPad(tsDriver->tsIRQPort, tsDriver->tsIRQPin));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__)
|
||||
#if TOUCHSCREEN_HAS_PRESSURE || defined(__DOXYGEN__)
|
||||
/*
|
||||
* @brief Reads out the Z direction / pressure.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_z(void) {
|
||||
uint16_t ts_lld_read_z(void) {
|
||||
/* ToDo */
|
||||
return 42;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
/** @} */
|
||||
|
6
drivers/touchscreen/ADS7843/touchscreen_lld.mk
Normal file
6
drivers/touchscreen/ADS7843/touchscreen_lld.mk
Normal file
|
@ -0,0 +1,6 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/touchscreen/ADS7843/touchscreen_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/touchscreen/ADS7843
|
||||
|
|
@ -19,26 +19,27 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file touchpadXPT2046/touchpad_lld_config.h
|
||||
* @brief Touchppad Driver subsystem low level driver.
|
||||
* @file drivers/touchscreen/ADS7843/touchscreen_lld_config.h
|
||||
* @brief Touchscreen Driver subsystem low level driver.
|
||||
*
|
||||
* @addtogroup TOUCHPAD
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _TOUCHPAD_LLD_CONFIG_H
|
||||
#define _TOUCHPAD_LLD_CONFIG_H
|
||||
#ifndef TOUCHSCREEN_LLD_CONFIG_H
|
||||
#define TOUCHSCREEN_LLD_CONFIG_H
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#define TOUCHPAD_HAS_IRQ TRUE
|
||||
#define TOUCHPAD_HAS_PRESSURE TRUE
|
||||
#define TOUCHSCREEN_HAS_IRQ TRUE
|
||||
#define TOUCHSCREEN_HAS_PRESSURE FALSE
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
|
||||
#endif /* _TOUCHPAD_LLD_CONFIG_H */
|
||||
#endif /* TOUCHSCREEN_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
8
drivers/touchscreen/XPT2046/readme.txt
Normal file
8
drivers/touchscreen/XPT2046/readme.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_TOUCHSCREEN TRUE
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(GFXLIB)/drivers/touchscreen/XPT2046/touchscreen_lld.mk
|
||||
|
|
@ -19,18 +19,18 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file touchpadXPT2046/touchpad_lld.c
|
||||
* @brief Touchpad Driver subsystem low level driver source.
|
||||
* @file drivers/touchscreen/XPT2046/touchscreen_lld.c
|
||||
* @brief Touchscreen Driver subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup TOUCHPAD
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "touchpad.h"
|
||||
#include "touchscreen.h"
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
|
@ -45,7 +45,7 @@
|
|||
/*===========================================================================*/
|
||||
#if !defined(__DOXYGEN__)
|
||||
/* Local copy of the current touchpad driver */
|
||||
static const TOUCHPADDriver *tpDriver;
|
||||
static const TouchscreenDriver *tsDriver;
|
||||
|
||||
static uint16_t sampleBuf[7];
|
||||
#endif
|
||||
|
@ -65,22 +65,24 @@
|
|||
/* ---- Required Routines ---- */
|
||||
|
||||
/**
|
||||
* @brief Low level Touchpad driver initialization.
|
||||
* @brief Low level Touchscreen driver initialization.
|
||||
*
|
||||
* @param[in] ts The touchscreen driver struct
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void tp_lld_init(const TOUCHPADDriver *tp) {
|
||||
tpDriver = tp;
|
||||
void ts_lld_init(const TouchscreenDriver *ts) {
|
||||
tsDriver = ts;
|
||||
|
||||
if(tpDriver->direct_init)
|
||||
spiStart(tpDriver->spip, tpDriver->spicfg);
|
||||
if(tsDriver->direct_init)
|
||||
spiStart(tsDriver->spip, tsDriver->spicfg);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Reads a conversion from the touchpad
|
||||
* @brief Reads a conversion from the touchscreen
|
||||
*
|
||||
* @param[in] cmd The command bits to send to the touchpad
|
||||
* @param[in] cmd The command bits to send to the touchscreen
|
||||
*
|
||||
* @return The read value 12-bit right-justified
|
||||
*
|
||||
|
@ -89,14 +91,14 @@ void tp_lld_init(const TOUCHPADDriver *tp) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_value(uint8_t cmd) {
|
||||
uint16_t ts_lld_read_value(uint8_t cmd) {
|
||||
static uint8_t txbuf[3] = {0};
|
||||
static uint8_t rxbuf[3] = {0};
|
||||
uint16_t ret;
|
||||
|
||||
txbuf[0] = cmd;
|
||||
|
||||
spiExchange(tpDriver->spip, 3, txbuf, rxbuf);
|
||||
spiExchange(tsDriver->spip, 3, txbuf, rxbuf);
|
||||
|
||||
ret = (rxbuf[1] << 5) | (rxbuf[2] >> 3);
|
||||
|
||||
|
@ -104,13 +106,13 @@ uint16_t tp_lld_read_value(uint8_t cmd) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief 7-point median filtering code for touchpad samples
|
||||
* @brief 7-point median filtering code for touchscreen samples
|
||||
*
|
||||
* @note This is an internally used routine only.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static void tp_lld_filter(void) {
|
||||
static void ts_lld_filter(void) {
|
||||
uint16_t temp;
|
||||
int i,j;
|
||||
|
||||
|
@ -133,37 +135,37 @@ static void tp_lld_filter(void) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_x(void) {
|
||||
uint16_t ts_lld_read_x(void) {
|
||||
int i;
|
||||
|
||||
#if defined(SPI_USE_MUTUAL_EXCLUSION)
|
||||
spiAcquireBus(tpDriver->spip);
|
||||
spiAcquireBus(tsDriver->spip);
|
||||
#endif
|
||||
|
||||
TOUCHPAD_SPI_PROLOGUE();
|
||||
palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
|
||||
TOUCHSCREEN_SPI_PROLOGUE();
|
||||
palClearPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad);
|
||||
|
||||
/* Discard the first conversion - very noisy and keep the ADC on hereafter
|
||||
* till we are done with the sampling. Note that PENIRQ is disabled.
|
||||
*/
|
||||
tp_lld_read_value(0xD1);
|
||||
ts_lld_read_value(0xD1);
|
||||
|
||||
for(i = 0; i < 7; i++) {
|
||||
sampleBuf[i]=tp_lld_read_value(0xD1);
|
||||
sampleBuf[i] = ts_lld_read_value(0xD1);
|
||||
}
|
||||
|
||||
/* Switch on PENIRQ once again - perform a dummy read */
|
||||
tp_lld_read_value(0xD0);
|
||||
ts_lld_read_value(0xD0);
|
||||
|
||||
palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
|
||||
TOUCHPAD_SPI_EPILOGUE();
|
||||
palSetPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad);
|
||||
TOUCHSCREEN_SPI_EPILOGUE();
|
||||
|
||||
#if defined(SPI_USE_MUTUAL_EXCLUSION)
|
||||
spiReleaseBus(tpDriver->spip);
|
||||
spiReleaseBus(tsDriver->spip);
|
||||
#endif
|
||||
|
||||
/* Find the median - use selection sort */
|
||||
tp_lld_filter();
|
||||
ts_lld_filter();
|
||||
|
||||
return sampleBuf[3];
|
||||
}
|
||||
|
@ -173,67 +175,67 @@ uint16_t tp_lld_read_x(void) {
|
|||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_y(void) {
|
||||
uint16_t ts_lld_read_y(void) {
|
||||
int i;
|
||||
|
||||
#if defined(SPI_USE_MUTUAL_EXCLUSION)
|
||||
spiAcquireBus(tpDriver->spip);
|
||||
spiAcquireBus(tsDriver->spip);
|
||||
#endif
|
||||
|
||||
TOUCHPAD_SPI_PROLOGUE();
|
||||
palClearPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
|
||||
TOUCHSCREEN_SPI_PROLOGUE();
|
||||
palClearPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad);
|
||||
|
||||
/* Discard the first conversion - very noisy and keep the ADC on hereafter
|
||||
* till we are done with the sampling. Note that PENIRQ is disabled.
|
||||
*/
|
||||
tp_lld_read_value(0x91);
|
||||
ts_lld_read_value(0x91);
|
||||
|
||||
for(i = 0; i < 7; i++) {
|
||||
sampleBuf[i] = tp_lld_read_value(0x91);
|
||||
sampleBuf[i] = ts_lld_read_value(0x91);
|
||||
}
|
||||
|
||||
/* Switch on PENIRQ once again - perform a dummy read */
|
||||
tp_lld_read_value(0x90);
|
||||
ts_lld_read_value(0x90);
|
||||
|
||||
palSetPad(tpDriver->spicfg->ssport, tpDriver->spicfg->sspad);
|
||||
TOUCHPAD_SPI_EPILOGUE();
|
||||
palSetPad(tsDriver->spicfg->ssport, tsDriver->spicfg->sspad);
|
||||
TOUCHSCREEN_SPI_EPILOGUE();
|
||||
|
||||
#ifdef SPI_USE_MUTUAL_EXCLUSION
|
||||
spiReleaseBus(tpDriver->spip);
|
||||
spiReleaseBus(tsDriver->spip);
|
||||
#endif
|
||||
|
||||
/* Find the median - use selection sort */
|
||||
tp_lld_filter();
|
||||
ts_lld_filter();
|
||||
|
||||
return sampleBuf[3];
|
||||
}
|
||||
|
||||
/* ---- Optional Routines ---- */
|
||||
#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__)
|
||||
#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__)
|
||||
/*
|
||||
* @brief for checking if touchpad is pressed or not.
|
||||
* @brief for checking if touchscreen is pressed or not.
|
||||
*
|
||||
* @return 1 if pressed / 0 if not pressed
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint8_t tp_lld_irq(void) {
|
||||
return (!palReadPad(tpDriver->tpIRQPort, tpDriver->tpIRQPin));
|
||||
uint8_t ts_lld_irq(void) {
|
||||
return (!palReadPad(tsDriver->tsIRQPort, tsDriver->tsIRQPin));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__)
|
||||
#if TOUCHSCREEN_HAS_PRESSURE || defined(__DOXYGEN__)
|
||||
/*
|
||||
* @brief Reads out the Z direction / pressure.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_z(void) {
|
||||
uint16_t ts_lld_read_z(void) {
|
||||
/* ToDo */
|
||||
return 42;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
/** @} */
|
||||
|
6
drivers/touchscreen/XPT2046/touchscreen_lld.mk
Normal file
6
drivers/touchscreen/XPT2046/touchscreen_lld.mk
Normal file
|
@ -0,0 +1,6 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/touchscreen/XPT2046/touchscreen_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/touchscreen/XPT2046
|
||||
|
|
@ -19,27 +19,27 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file touchpadXPT2046/touchpad_lld_config.h
|
||||
* @brief Touchppad Driver subsystem low level driver.
|
||||
* @file drivers/touchscreen/XPT2046/touchscreen_lld_config.h
|
||||
* @brief Touchscreen Driver subsystem low level driver.
|
||||
*
|
||||
* @addtogroup TOUCHPAD
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _TOUCHPAD_LLD_CONFIG_H
|
||||
#define _TOUCHPAD_LLD_CONFIG_H
|
||||
#ifndef TOUCHSCREEN_LLD_CONFIG_H
|
||||
#define TOUCHSCREEN_LLD_CONFIG_H
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
#if GFX_USE_TOUCHSCREEN /*|| defined(__DOXYGEN__)*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#define TOUCHPAD_HAS_IRQ TRUE
|
||||
#define TOUCHPAD_HAS_PRESSURE TRUE
|
||||
#define TOUCHSCREEN_HAS_IRQ TRUE
|
||||
#define TOUCHSCREEN_HAS_PRESSURE TRUE
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
|
||||
#endif /* _TOUCHPAD_LLD_CONFIG_H */
|
||||
#endif /* TOUCHSCREEN_LLD_CONFIG_H */
|
||||
/** @} */
|
||||
|
2
gfx.mk
2
gfx.mk
|
@ -6,7 +6,7 @@ endif
|
|||
GFXSRC += $(GFXLIB)/src/gdisp.c \
|
||||
$(GFXLIB)/src/gdisp_fonts.c \
|
||||
$(GFXLIB)/src/gwin.c \
|
||||
$(GFXLIB)/src/touchpad.c \
|
||||
$(GFXLIB)/src/touchscreen.c \
|
||||
$(GFXLIB)/src/console.c \
|
||||
$(GFXLIB)/src/graph.c \
|
||||
|
||||
|
|
|
@ -18,6 +18,14 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/console.h
|
||||
* @brief CONSOLE header file.
|
||||
*
|
||||
* @addtogroup CONSOLE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef CONSOLE_H
|
||||
#define CONSOLE_H
|
||||
|
||||
|
@ -81,4 +89,5 @@ msg_t gfxConsoleWrite(GConsole *console, const uint8_t *bp, size_t n);
|
|||
#endif /* GFX_USE_CONSOLE */
|
||||
|
||||
#endif /* CONSOLE_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -17,13 +17,15 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file gdisp.h
|
||||
* @file include/gdisp.h
|
||||
* @brief GDISP Graphic Driver subsystem header file.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_H
|
||||
#define _GDISP_H
|
||||
|
||||
|
@ -317,3 +319,4 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color);
|
|||
|
||||
#endif /* _GDISP_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -767,3 +767,4 @@ void *GDISP_LLD(query)(unsigned what) {
|
|||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
#endif /* GDISP_EMULATION_C */
|
||||
|
||||
|
|
|
@ -17,8 +17,9 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file gdisp_fonts.h
|
||||
* @file include/gdisp_fonts.h
|
||||
* @brief GDISP internal font definitions.
|
||||
* @details This is not generally needed by an application. It is used
|
||||
* by the low level drivers that need to understand a font.
|
||||
|
@ -88,3 +89,4 @@ struct font {
|
|||
|
||||
#endif /* _GDISP_FONTS_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -17,8 +17,9 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file gdisp_lld.h
|
||||
* @file include/gdisp_lld.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -146,7 +147,7 @@
|
|||
|
||||
/**
|
||||
* @brief Driver Control Constants
|
||||
* @detail Unsupported control codes are ignored.
|
||||
* @details Unsupported control codes are ignored.
|
||||
* @note The value parameter should always be typecast to (void *).
|
||||
* @note There are some predefined and some specific to the low level driver.
|
||||
* @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
|
||||
|
@ -166,7 +167,7 @@
|
|||
|
||||
/**
|
||||
* @brief Driver Query Constants
|
||||
* @detail Unsupported query codes return (void *)-1.
|
||||
* @details Unsupported query codes return (void *)-1.
|
||||
* @note There are some predefined and some specific to the low level driver.
|
||||
* @note The result should be typecast the required type.
|
||||
* @note GDISP_QUERY_WIDTH - Gets the width of the screen
|
||||
|
@ -398,7 +399,7 @@
|
|||
* GDISP_PIXELFORMAT_RGB666
|
||||
* GDISP_PIXELFORMAT_CUSTOM
|
||||
* @note If you use GDISP_PIXELFORMAT_CUSTOM and packed bit fills
|
||||
* you need to also define @P gdispPackPixels(buf,cx,x,y,c)
|
||||
* you need to also define @p gdispPackPixels(buf,cx,x,y,c)
|
||||
* @note If you are using GDISP_HARDWARE_BITFILLS = FALSE then the pixel
|
||||
* format must not be a packed format as the software blit does
|
||||
* not support packed pixels
|
||||
|
@ -648,3 +649,4 @@ extern "C" {
|
|||
|
||||
#endif /* _GDISP_LLD_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -17,8 +17,9 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file gdisp_lld_msgs.h
|
||||
* @file include/gdisp_lld_msgs.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver message structures.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -191,3 +192,4 @@ typedef union gdisp_lld_msg {
|
|||
#endif /* GFX_USE_GDISP */
|
||||
#endif /* _GDISP_LLD_MSGS_H */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -18,6 +18,14 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file include/graph.h
|
||||
* @brief GRAPH module header file.
|
||||
*
|
||||
* @addtogroup GRAPH
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef GRAPH_H
|
||||
#define GRAPH_H
|
||||
|
||||
|
@ -25,7 +33,11 @@
|
|||
#define GFX_USE_GRAPH FALSE
|
||||
#endif
|
||||
|
||||
#if GFX_USE_GRAPH
|
||||
#if GFX_USE_GRAPH || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
typedef struct _Graph {
|
||||
coord_t origin_x;
|
||||
|
@ -52,6 +64,10 @@ typedef struct _Graph {
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
/*===========================================================================*/
|
||||
|
||||
void graphDrawSystem(Graph *g);
|
||||
void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color);
|
||||
void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t color);
|
||||
|
@ -64,4 +80,5 @@ void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, u
|
|||
#endif /* GFX_USE_GRAPH */
|
||||
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,16 +19,17 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file touchpad.h
|
||||
* @brief TOUCHPAD Touchpad Driver subsystem header file.
|
||||
* @file include/touchscreen.h
|
||||
* @brief TOUCHSCREEN Touchscreen driver subsystem header file.
|
||||
*
|
||||
* @addgroup TOUCHPAD
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
#ifndef _TOUCHPAD_H
|
||||
#define _TOUCHPAD_H
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
#ifndef TOUCHSCREEN_H
|
||||
#define TOUCHSCREEN_H
|
||||
|
||||
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
|
||||
|
||||
/**
|
||||
* @brief specifies how many conversions are made for a readout.
|
||||
|
@ -46,7 +47,10 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/* Include the low level driver information */
|
||||
#include "touchpad_lld.h"
|
||||
#include "touchscreen_lld.h"
|
||||
|
||||
/* For definitions of coord_t, we require gdisp.h */
|
||||
#include "gdisp.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Type definitions */
|
||||
|
@ -56,10 +60,12 @@
|
|||
* @brief Struct used for calibration
|
||||
*/
|
||||
typedef struct cal_t {
|
||||
float xm;
|
||||
float ym;
|
||||
float xn;
|
||||
float yn;
|
||||
float ax;
|
||||
float bx;
|
||||
float cx;
|
||||
float ay;
|
||||
float by;
|
||||
float cy;
|
||||
} cal_t;
|
||||
|
||||
/*===========================================================================*/
|
||||
|
@ -70,25 +76,25 @@ typedef struct cal_t {
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
void tpInit(const TOUCHPADDriver *tp);
|
||||
uint16_t tpReadX(void);
|
||||
uint16_t tpReadY(void);
|
||||
void tpCalibrate(void);
|
||||
void tsInit(const TouchscreenDriver *ts);
|
||||
coord_t tsReadX(void);
|
||||
coord_t tsReadY(void);
|
||||
void tsCalibrate(void);
|
||||
|
||||
#if TOUCHPAD_HAS_IRQ
|
||||
uint8_t tpIRQ(void);
|
||||
#if TOUCHSCREEN_HAS_IRQ
|
||||
bool_t tsIRQ(void);
|
||||
#endif
|
||||
|
||||
#if TOUCHPAD_HAS_PRESSURE
|
||||
uint16_t tpReadZ(void);
|
||||
#if TOUCHSCREEN_HAS_PRESSURE
|
||||
uint16_t tsReadZ(void);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
|
||||
#endif /* _TOUCHPAD_H */
|
||||
#endif /* TOUCHSCREEN_H */
|
||||
/** @} */
|
||||
|
|
@ -19,54 +19,58 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file touchpad_lld.h
|
||||
* @brief TOUCHPAD Driver subsystem low level driver header.
|
||||
* @file include/touchscreen_lld.h
|
||||
* @brief TOUCHSCREEN Driver subsystem low level driver header.
|
||||
*
|
||||
* @addgroup TOUCHPAD
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _TOUCHPAD_LLD_H
|
||||
#define _TOUCHPAD_LLD_H
|
||||
#ifndef TOUCHSCREEN_LLD_H
|
||||
#define TOUCHSCREEN_LLD_H
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Include the low level driver configuration information */
|
||||
/*===========================================================================*/
|
||||
|
||||
#include "touchpad_lld_config.h"
|
||||
#include "touchscreen_lld_config.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifndef TOUCHPAD_NEED_MULTITHREAD
|
||||
#define TOUCHPAD_NEED_MULTITHREAD FALSE
|
||||
#ifndef TOUCHSCREEN_NEED_MULTITHREAD
|
||||
#define TOUCHSCREEN_NEED_MULTITHREAD FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHPAD_XY_INVERTED
|
||||
#define TOUCHPAD_XY_INVERTED FALSE
|
||||
#ifndef TOUCHSCREEN_XY_INVERTED
|
||||
#define TOUCHSCREEN_XY_INVERTED FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHPAD_STORE_CALIBRATION
|
||||
#define TOUCHPAD_STORE_CALIBRATION FALSE
|
||||
#ifndef TOUCHSCREEN_STORE_CALIBRATION
|
||||
#define TOUCHSCREEN_STORE_CALIBRATION FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHPAD_HAS_IRQ
|
||||
#define TOUCHPAD_HAS_IRQ FALSE
|
||||
#ifndef TOUCHSCREEN_VERIFY_CALIBRATION
|
||||
#define TOUCHSCREEN_VERIFY_CALIBRATION FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHPAD_HAS_PRESSURE
|
||||
#define TOUCHPAD_HAS_PRESSURE FALSE
|
||||
#ifndef TOUCHSCREEN_HAS_IRQ
|
||||
#define TOUCHSCREEN_HAS_IRQ FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHPAD_SPI_PROLOGUE
|
||||
#define TOUCHPAD_SPI_PROLOGUE()
|
||||
#ifndef TOUCHSCREEN_HAS_PRESSURE
|
||||
#define TOUCHSCREEN_HAS_PRESSURE FALSE
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHPAD_SPI_EPILOGUE
|
||||
#define TOUCHPAD_SPI_EPILOGUE()
|
||||
#ifndef TOUCHSCREEN_SPI_PROLOGUE
|
||||
#define TOUCHSCREEN_SPI_PROLOGUE()
|
||||
#endif
|
||||
|
||||
#ifndef TOUCHSCREEN_SPI_EPILOGUE
|
||||
#define TOUCHSCREEN_SPI_EPILOGUE()
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
|
@ -74,9 +78,9 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Structure representing a Touchpad driver.
|
||||
* @brief Structure representing a touchscreen driver.
|
||||
*/
|
||||
typedef struct _TOUCHPADDriver {
|
||||
typedef struct TouchscreenDriver {
|
||||
/*
|
||||
* @brief Pointer to SPI driver.
|
||||
* @note SPI driver must be enabled in mcuconf.h and halconf.h
|
||||
|
@ -93,27 +97,27 @@ typedef struct _TOUCHPADDriver {
|
|||
/*
|
||||
* @brief Touchscreen controller TPIRQ pin GPIO port
|
||||
*/
|
||||
ioportid_t tpIRQPort;
|
||||
ioportid_t tsIRQPort;
|
||||
|
||||
/*
|
||||
* @brief Touchscreen controller TPIRQ GPIO pin
|
||||
* @note The interface is polled as of now, interrupt support is
|
||||
* to be implemented in the future.
|
||||
*/
|
||||
ioportmask_t tpIRQPin;
|
||||
ioportmask_t tsIRQPin;
|
||||
|
||||
/*
|
||||
* @brief Initialize the SPI with the configuration struct given or not
|
||||
* If TRUE, spiStart is called by the init, otherwise not
|
||||
* @note This is provided in such a case when SPI port is being shared
|
||||
* across multiple peripherals, so not to disturb the SPI bus.
|
||||
* You can use TOUCHPAD_SPI_PROLOGUE() and TOUCHPAD_SPI_EPILOGUE()
|
||||
* You can use TOUCHSCREEN_SPI_PROLOGUE() and TOUCHSCREEN_SPI_EPILOGUE()
|
||||
* macros to change the SPI configuration or speed before and
|
||||
* after using the touchpad. An example case would be sharing the
|
||||
* bus with a fast flash memory chip.
|
||||
*/
|
||||
bool_t direct_init;
|
||||
} TOUCHPADDriver;
|
||||
} TouchscreenDriver;
|
||||
|
||||
|
||||
/*===========================================================================*/
|
||||
|
@ -126,26 +130,26 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/* Core functions */
|
||||
void tp_lld_init(const TOUCHPADDriver *tp);
|
||||
void ts_lld_init(const TouchscreenDriver *ts);
|
||||
|
||||
uint16_t tp_lld_read_value(uint8_t cmd);
|
||||
uint16_t tp_lld_read_x(void);
|
||||
uint16_t tp_lld_read_y(void);
|
||||
uint16_t ts_lld_read_value(uint8_t cmd);
|
||||
uint16_t ts_lld_read_x(void);
|
||||
uint16_t ts_lld_read_y(void);
|
||||
|
||||
#if TOUCHPAD_HAS_IRQ
|
||||
uint8_t tp_lld_irq(void);
|
||||
#if TOUCHSCREEN_HAS_IRQ
|
||||
uint8_t ts_lld_irq(void);
|
||||
#endif
|
||||
|
||||
#if TOUCHPAD_HAS_PRESSURE
|
||||
uint16_t tp_lld_read_z(void);
|
||||
#if TOUCHSCREEN_HAS_PRESSURE
|
||||
uint16_t ts_lld_read_z(void);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
|
||||
#endif /* _TOUCHPAD_LLD_H */
|
||||
#endif /* _TOUCHSCREEN_LLD_H */
|
||||
/** @} */
|
||||
|
334
old/gui/gui.c
334
old/gui/gui.c
|
@ -1,334 +0,0 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "gui.h"
|
||||
|
||||
static struct guiNode_t *firstGUI = NULL;
|
||||
uint16_t x, y; // global touchpad coordinates
|
||||
|
||||
static uint8_t addElement(struct guiNode_t *newNode) {
|
||||
struct guiNode_t *new;
|
||||
|
||||
if(firstGUI == NULL) {
|
||||
firstGUI = chHeapAlloc(NULL, sizeof(struct guiNode_t));
|
||||
if(firstGUI == NULL)
|
||||
return 0;
|
||||
|
||||
*firstGUI = *newNode;
|
||||
firstGUI->next = NULL;
|
||||
} else {
|
||||
new = firstGUI;
|
||||
while(new->next != NULL)
|
||||
new = new->next;
|
||||
|
||||
new->next = chHeapAlloc(NULL, sizeof(struct guiNode_t));
|
||||
if(new->next == NULL)
|
||||
return 0;
|
||||
|
||||
new = new->next;
|
||||
*new = *newNode;
|
||||
new->next = NULL;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static uint8_t deleteElement(char *label) {
|
||||
struct guiNode_t *pointer, *pointer1;
|
||||
|
||||
if(firstGUI != NULL) {
|
||||
if(strcmp(firstGUI->label, label) == 0) {
|
||||
pointer = firstGUI->next;
|
||||
chHeapFree(firstGUI);
|
||||
firstGUI = pointer;
|
||||
} else {
|
||||
pointer = firstGUI;
|
||||
|
||||
while(pointer->next != NULL) {
|
||||
pointer1 = pointer->next;
|
||||
|
||||
if(strcmp(firstGUI->label, label) == 0) {
|
||||
pointer->next = pointer1->next;
|
||||
chHeapFree(pointer1);
|
||||
break;
|
||||
}
|
||||
|
||||
pointer = pointer1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return 1; // successful
|
||||
}
|
||||
|
||||
return 0; // not successful
|
||||
}
|
||||
|
||||
void guiPrintElements(BaseSequentialStream *chp) {
|
||||
struct guiNode_t *pointer = firstGUI;
|
||||
|
||||
chprintf(chp, "\r\n\nguiNodes:\r\n\n");
|
||||
|
||||
while(pointer != NULL) {
|
||||
chprintf(chp, "x0: %d\r\n", pointer->x0);
|
||||
chprintf(chp, "y0: %d\r\n", pointer->y0);
|
||||
chprintf(chp, "x1: %d\r\n", pointer->x1);
|
||||
chprintf(chp, "y1: %d\r\n", pointer->y1);
|
||||
chprintf(chp, "label: %s\r\n", pointer->label);
|
||||
chprintf(chp, "active: %d\r\n", *(pointer->active));
|
||||
chprintf(chp, "state: %d\r\n", *(pointer->state));
|
||||
chprintf(chp, "*next: 0x%x\r\n", pointer->next);
|
||||
chprintf(chp, "\r\n\n");
|
||||
pointer = pointer->next;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void buttonUpdate(struct guiNode_t *node) {
|
||||
if(x >= node->x0 && x <= node->x1 && y >= node->y0 && y <= node->y1) {
|
||||
*(node->state) = 1;
|
||||
} else {
|
||||
*(node->state) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void sliderUpdate(struct guiNode_t *node) {
|
||||
uint16_t length = 1;
|
||||
|
||||
if(node->orientation == horizontal)
|
||||
length = node->x1 - node->x0;
|
||||
else if(node->orientation == vertical)
|
||||
length = node->y1 - node->y0;
|
||||
|
||||
if(node->mode == modePassive) {
|
||||
node->percentage = *(node->state);
|
||||
} else if(node->mode == modeActive) {
|
||||
if(x >= node->x0 && x <= node->x1 && y >= node->y0 && y <= node->y1) {
|
||||
if(node->orientation == horizontal) {
|
||||
node->percentage = (((x - node->x0) * 100) / length);
|
||||
} else if(node->orientation == vertical) {
|
||||
node->percentage = (((y - node->y0) * 100) / length);
|
||||
}
|
||||
}
|
||||
|
||||
*(node->state) = node->percentage;
|
||||
}
|
||||
|
||||
// a bit of safety here
|
||||
if(node->percentage > 100)
|
||||
node->percentage = 100;
|
||||
|
||||
if(node->orientation == horizontal) {
|
||||
node->value = ((((node->x1)-(node->x0)) * node->percentage) / 100);
|
||||
if(node->oldValue > node->value || node->value == 0)
|
||||
lcdFillArea(node->x0+1, node->y0+1, node->x1, node->y1, node->bkColor);
|
||||
else
|
||||
lcdDrawRect(node->x0+1, node->y0+1, node->x0+node->value, node->y1, filled, node->valueColor);
|
||||
} else if(node->orientation == vertical) {
|
||||
node->value = ((((node->y1)-(node->y0)) * node->percentage) / 100);
|
||||
if(node->oldValue > node->value || node->value == 0)
|
||||
lcdFillArea(node->x0+1, node->y0+1, node->x1, node->y1, node->bkColor);
|
||||
else
|
||||
lcdDrawRect(node->x0+1, node->y0+1, node->x1, node->y0+node->value, filled, node->valueColor);
|
||||
}
|
||||
|
||||
node->oldValue = node->value;
|
||||
}
|
||||
|
||||
static inline void wheelUpdate(struct guiNode_t *node) {
|
||||
(void)node;
|
||||
}
|
||||
|
||||
static inline void keymatrixUpdate(struct guiNode_t *node) {
|
||||
(void)node;
|
||||
}
|
||||
|
||||
static void guiThread(const uint16_t interval) {
|
||||
struct guiNode_t *node;
|
||||
|
||||
chRegSetThreadName("GUI");
|
||||
|
||||
while(TRUE) {
|
||||
for(node = firstGUI; node; node = node->next) {
|
||||
// check if GUI element is set active
|
||||
if(*(node->active) == active) {
|
||||
x = tpReadX();
|
||||
y = tpReadY();
|
||||
|
||||
switch(node->type) {
|
||||
case button:
|
||||
buttonUpdate(node);
|
||||
break;
|
||||
case slider:
|
||||
sliderUpdate(node);
|
||||
break;
|
||||
case wheel:
|
||||
wheelUpdate(node);
|
||||
break;
|
||||
case keymatrix:
|
||||
keymatrixUpdate(node);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
chThdSleepMilliseconds(interval);
|
||||
}
|
||||
}
|
||||
|
||||
Thread *guiInit(uint16_t interval, tprio_t priority) {
|
||||
Thread *tp = NULL;
|
||||
|
||||
tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(512), priority, guiThread, interval);
|
||||
|
||||
return tp;
|
||||
}
|
||||
|
||||
uint8_t guiDeleteElement(char *label) {
|
||||
return deleteElement(label);
|
||||
}
|
||||
|
||||
uint8_t guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, char *str, font_t font, uint16_t fontColor, uint16_t buttonColor, uint16_t shadow, char *label, uint8_t *active, uint8_t *state) {
|
||||
struct guiNode_t *newNode;
|
||||
uint16_t i;
|
||||
|
||||
newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t));
|
||||
if(newNode == NULL)
|
||||
return 0;
|
||||
|
||||
newNode->type = button;
|
||||
newNode->label = label;
|
||||
newNode->x0 = x0;
|
||||
newNode->y0 = y0;
|
||||
newNode->x1 = x1;
|
||||
newNode->y1 = y1;
|
||||
newNode->shadow = shadow;
|
||||
newNode->active = active;
|
||||
newNode->state = state;
|
||||
|
||||
if(addElement(newNode) != 1)
|
||||
return 0;
|
||||
|
||||
lcdDrawRectString(x0, y0, x1, y1, str, font, fontColor, buttonColor);
|
||||
|
||||
if(shadow != 0) {
|
||||
for(i = 0; i < shadow; i++) {
|
||||
lcdDrawLine(x0+shadow, y1+i, x1+shadow-1, y1+i, Black);
|
||||
lcdDrawLine(x1+i, y0+shadow, x1+i, y1+shadow-1, Black);
|
||||
}
|
||||
}
|
||||
|
||||
chHeapFree(newNode);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t guiDrawSlider(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint8_t orientation, uint8_t mode, uint16_t frameColor, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value) {
|
||||
struct guiNode_t *newNode;
|
||||
|
||||
newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t));
|
||||
if(newNode == NULL)
|
||||
return 0;
|
||||
|
||||
newNode->type = slider;
|
||||
newNode->label = label;
|
||||
newNode->x0 = x0;
|
||||
newNode->y0 = y0;
|
||||
newNode->x1 = x1;
|
||||
newNode->y1 = y1;
|
||||
newNode->mode = mode;
|
||||
newNode->bkColor = bkColor;
|
||||
newNode->valueColor = valueColor;
|
||||
newNode->state = value;
|
||||
newNode->active = active;
|
||||
newNode->orientation = orientation;
|
||||
newNode->percentage = 0;
|
||||
|
||||
if(addElement(newNode) != 1)
|
||||
return 0;
|
||||
|
||||
(void)bkColor;
|
||||
(void)valueColor;
|
||||
|
||||
// lcdDraw functions
|
||||
lcdDrawRect(x0, y0, x1, y1, frame, frameColor);
|
||||
|
||||
chHeapFree(newNode);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t guiDrawWheel(uint16_t x0, uint16_t y0, uint16_t radius1, uint16_t radius2, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value) {
|
||||
struct guiNode_t *newNode;
|
||||
|
||||
newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t));
|
||||
if(newNode == NULL)
|
||||
return 0;
|
||||
|
||||
newNode->type = wheel;
|
||||
newNode->label = label;
|
||||
newNode->x0 = x0;
|
||||
newNode->y0 = y0;
|
||||
newNode->r1 = radius1;
|
||||
newNode->r2 = radius2;
|
||||
newNode->active = active;
|
||||
newNode->state = value;
|
||||
|
||||
if(addElement(newNode) != 1)
|
||||
return 0;
|
||||
|
||||
(void)bkColor;
|
||||
(void)valueColor;
|
||||
// lcdDraw functions
|
||||
|
||||
chHeapFree(newNode);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t guiDrawKeymatrix(uint16_t x0, uint16_t y0, uint16_t size, uint16_t space, uint16_t shadow, uint16_t buttonColor, uint16_t fontColor, font_t font, char *label, uint8_t *active, uint8_t *value) {
|
||||
struct guiNode_t *newNode;
|
||||
|
||||
newNode = chHeapAlloc(NULL, sizeof(struct guiNode_t));
|
||||
if(newNode == NULL)
|
||||
return 0;
|
||||
|
||||
newNode->type = keymatrix;
|
||||
newNode->label = label;
|
||||
newNode->x0 = x0;
|
||||
newNode->y0 = y0;
|
||||
newNode->shadow = shadow;
|
||||
newNode->active = active;
|
||||
newNode->state = value;
|
||||
|
||||
if(addElement(newNode) != 1)
|
||||
return 0;
|
||||
|
||||
// lcdDraw functions
|
||||
(void)size;
|
||||
(void)space;
|
||||
(void)buttonColor;
|
||||
(void)fontColor;
|
||||
(void)font;
|
||||
|
||||
chHeapFree(newNode);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
115
old/gui/gui.h
115
old/gui/gui.h
|
@ -1,115 +0,0 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef GUI_H
|
||||
#define GUI_H
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "glcd.h"
|
||||
#include "chprintf.h"
|
||||
#include "touchpad.h"
|
||||
#include <string.h>
|
||||
|
||||
struct guiNode_t {
|
||||
uint8_t type;
|
||||
uint16_t x0;
|
||||
uint16_t y0;
|
||||
uint16_t x1;
|
||||
uint16_t y1;
|
||||
uint16_t r1;
|
||||
uint16_t r2;
|
||||
uint16_t shadow;
|
||||
uint16_t bkColor;
|
||||
uint16_t valueColor;
|
||||
uint16_t value;
|
||||
uint16_t oldValue;
|
||||
uint16_t percentage;
|
||||
uint8_t orientation;
|
||||
uint8_t mode;
|
||||
uint8_t *active;
|
||||
uint8_t *state;
|
||||
char *label;
|
||||
struct guiNode_t *next;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum {button, slider, wheel, keymatrix};
|
||||
enum {horizontal, vertical};
|
||||
enum {inactive, active};
|
||||
enum {modePassive, modeActive};
|
||||
|
||||
/*
|
||||
* Description: creates the GUI thread
|
||||
*
|
||||
* param: - interval: thread sleep in milliseconds after each GUI element update
|
||||
* - priority: priority of the thread
|
||||
*
|
||||
* return: pointer to created thread
|
||||
*/
|
||||
Thread *guiInit(uint16_t interval, tprio_t priority);
|
||||
|
||||
/*
|
||||
* Description: prints all GUI elements structs (linked list)
|
||||
*
|
||||
* param: - chp: pointer to output stream
|
||||
*
|
||||
* return: none
|
||||
*/
|
||||
void guiPrintElements(BaseSequentialStream *chp);
|
||||
|
||||
/*
|
||||
* Description: deletes a GUI element from the linked list
|
||||
*
|
||||
* param: - label: label of the element (parameter of each guiDrawXXX function)
|
||||
*
|
||||
* return: 1 if successful, 0 otherwise
|
||||
*/
|
||||
uint8_t guiDeleteElement(char *label);
|
||||
|
||||
/*
|
||||
* Description: draws a button on the screen and keeps it's state up to date
|
||||
*
|
||||
* param: - x0, y0, x1, y1: start and end coordinates of the button's rectangle
|
||||
* - str: string that gets drawn into the rectangle - button's lable
|
||||
* - fontColor: color of the lable
|
||||
* - buttonColor: color of the rectangle
|
||||
* - shadow: draws a black shadow with N pixels size if != 0
|
||||
* - active: pass pointer to variable which holds the state 'active' or 'inactive'
|
||||
* - state: pass pointer to variable whcih will keep the state of the button (pressed / unpressed)'
|
||||
*
|
||||
* return: 1 if button successfully created
|
||||
*/
|
||||
uint8_t guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, char *str, font_t font, uint16_t fontColor, uint16_t buttonColor, uint16_t shadow, char *label, uint8_t *active, uint8_t *state);
|
||||
|
||||
uint8_t guiDrawSlider(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint8_t orientation, uint8_t mode, uint16_t frameColor, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value);
|
||||
|
||||
uint8_t guiDrawWheel(uint16_t x0, uint16_t y0, uint16_t radius1, uint16_t radius2, uint16_t bkColor, uint16_t valueColor, char *label, uint8_t *active, uint8_t *value);
|
||||
|
||||
uint8_t guiDrawKeymatrix(uint16_t x0, uint16_t y0, uint16_t buttonSize, uint16_t space, uint16_t shadow, uint16_t buttonColor, uint16_t fontColor, font_t font, char *label, uint8_t *active, uint8_t *value);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,3 +0,0 @@
|
|||
GDISP_GUI_SRC = $(GFXLIB)/gui/gui.c
|
||||
|
||||
GDISP_GUI_INC = $(GFXLIB)/gui
|
|
@ -2,7 +2,12 @@
|
|||
*** Releases ***
|
||||
*****************************************************************************
|
||||
|
||||
current stable: 1.3
|
||||
current stable: 1.4
|
||||
|
||||
|
||||
*** changes after 1.4 ***
|
||||
FEATURE: Added three point calibration
|
||||
FIX: Touchpad renamed into Touchscreen
|
||||
|
||||
|
||||
*** changes after 1.3 ***
|
||||
|
@ -14,6 +19,7 @@ FIX: Fix axis orientation for Arc routines
|
|||
FEATURE: new gdisp rounded box routines
|
||||
FEATURE: new gdispDrawStringBox()
|
||||
FEATURE: GWIN infrastructure
|
||||
FEATURE: now we fully support doxygen
|
||||
|
||||
|
||||
*** changes after 1.2 ***
|
||||
|
|
|
@ -18,11 +18,19 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file src/console.c
|
||||
* @brief CONSOLE code.
|
||||
*
|
||||
* @addtogroup CONSOLE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "console.h"
|
||||
|
||||
#if GFX_USE_CONSOLE
|
||||
#if GFX_USE_CONSOLE || defined(__DOXYGEN__)
|
||||
|
||||
/*
|
||||
* Interface implementation. The interface is write only
|
||||
|
@ -86,6 +94,18 @@ static const struct GConsoleVMT vmt = {
|
|||
putt, gett, writet, readt
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Initializes a console.
|
||||
*
|
||||
* @param[in] console The console driver struct
|
||||
* @param[in] x0,y0 The location of the upper left corner of the resulting window
|
||||
* @param[in] width, height The width and height of the window
|
||||
* @param[in] font The font to be used when printing to the console
|
||||
* @param[in] bkcolor The background color
|
||||
* @param[in] color The foreground / font color
|
||||
*
|
||||
* @return RDY_OK if done
|
||||
*/
|
||||
msg_t gfxConsoleInit(GConsole *console, coord_t x0, coord_t y0, coord_t width, coord_t height, font_t font, pixel_t bkcolor, pixel_t color) {
|
||||
console->vmt = &vmt;
|
||||
/* read font, get height & padding */
|
||||
|
@ -110,6 +130,14 @@ msg_t gfxConsoleInit(GConsole *console, coord_t x0, coord_t y0, coord_t width, c
|
|||
return RDY_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write a single character to the console.
|
||||
*
|
||||
* @param[in] console The console driver struct
|
||||
* @param[in] c The char to be written
|
||||
*
|
||||
* @return RDY_OK if done
|
||||
*/
|
||||
msg_t gfxConsolePut(GConsole *console, char c) {
|
||||
uint8_t width;
|
||||
|
||||
|
@ -164,6 +192,17 @@ msg_t gfxConsolePut(GConsole *console, char c) {
|
|||
return RDY_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write a string to the console.
|
||||
*
|
||||
* @param[in] console The console driver struct
|
||||
* @param[in] bp The buffer / string
|
||||
* @param[in] n The size of the buffer
|
||||
*
|
||||
* @return RDY_OK if done
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
msg_t gfxConsoleWrite(GConsole *console, const uint8_t *bp, size_t n) {
|
||||
size_t i;
|
||||
for(i = 0; i < n; i++)
|
||||
|
@ -172,5 +211,6 @@ msg_t gfxConsoleWrite(GConsole *console, const uint8_t *bp, size_t n) {
|
|||
return RDY_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* GFX_USE_CONSOLE */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
The new GDISP driver is an architecture independent rewrite of the GLCD interface.
|
||||
This new architecture independence should allow many new low level drivers to be easily added.
|
||||
|
||||
GDISP allows low-level driver hardware accelerated drawing routines while providing a software emulation
|
||||
if the low level driver can not provide it. A basic low level driver now only requires 2 routines to be written.
|
||||
|
||||
A glcd.h compatibility file has been included that allow applications written to use the existing GLCD driver to
|
||||
use the GDISP driver with little or no change.
|
||||
|
||||
It is written in the ChibiOS style with ChibiOS style includes and documentation.
|
||||
|
||||
It is encapsulated into a "halext" structure with appropriate readme's that allow for easy inclusion in any
|
||||
ChibiOS project. This structure can be seamlessly added to as new driver types are added and it supports
|
||||
low level drivers that are neither platform or board specific (although they can be).
|
65
src/gdisp.c
65
src/gdisp.c
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gdisp.c
|
||||
* @file src/gdisp.c
|
||||
* @brief GDISP Driver code.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
|
@ -144,6 +144,8 @@
|
|||
* @note This function is NOT currently implicitly invoked by @p halInit().
|
||||
* It must be called manually.
|
||||
*
|
||||
* @return True if succeeded, False otherwise
|
||||
*
|
||||
* @init
|
||||
*/
|
||||
bool_t gdispInit(void) {
|
||||
|
@ -194,6 +196,8 @@
|
|||
* @note This function will always return FALSE if
|
||||
* GDISP_NEED_ASYNC is not defined.
|
||||
*
|
||||
* @return TRUE if gdisp is busy, FALSE otherwise
|
||||
*
|
||||
* @init
|
||||
*/
|
||||
bool_t gdispIsBusy(void) {
|
||||
|
@ -208,7 +212,6 @@
|
|||
#if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Clear the display to the specified color.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] color The color to use when clearing the screen
|
||||
*
|
||||
|
@ -230,7 +233,6 @@
|
|||
#if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Set a pixel in the specified color.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The position to set the pixel.
|
||||
* @param[in] color The color to use
|
||||
|
@ -255,7 +257,6 @@
|
|||
#if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a line.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x0,y0 The start position
|
||||
* @param[in] x1,y1 The end position
|
||||
|
@ -280,24 +281,11 @@
|
|||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Draw a dashed line.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x0,y0 The start position
|
||||
* @param[in] x1,y1 The end position
|
||||
* @param[in] length The length of the dash
|
||||
* @param[in] color The color of the dashed line
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
|
||||
#if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Fill an area with a color.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x0,y0 The start position
|
||||
* @param[in] x,y The start position
|
||||
* @param[in] cx,cy The size of the box (outside dimensions)
|
||||
* @param[in] color The color to use
|
||||
*
|
||||
|
@ -323,7 +311,6 @@
|
|||
#if GDISP_NEED_MULTITHREAD || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Fill an area using the supplied bitmap.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
* @details The bitmap is in the pixel format specified by the low level driver
|
||||
* @note If a packed pixel format is used and the width doesn't
|
||||
* match a whole number of bytes, the next line will start on a
|
||||
|
@ -334,7 +321,9 @@
|
|||
*
|
||||
* @param[in] x,y The start position
|
||||
* @param[in] cx,cy The size of the filled area
|
||||
* @param[in] buffer The bitmap in the driver's pixel format.
|
||||
* @param[in] srcx,srcy I've no idea
|
||||
* @param[in] srccx Really, I've no fucking idea
|
||||
* @param[in] buffer The bitmap in the driver's pixel format
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
|
@ -361,7 +350,6 @@
|
|||
#if (GDISP_NEED_CLIP && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Clip all drawing to the defined area.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The start position
|
||||
* @param[in] cx,cy The size of the clip area
|
||||
|
@ -387,9 +375,8 @@
|
|||
#if (GDISP_NEED_CIRCLE && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a circle.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x0,y0 The center of the circle
|
||||
* @param[in] x,y The center of the circle
|
||||
* @param[in] radius The radius of the circle
|
||||
* @param[in] color The color to use
|
||||
*
|
||||
|
@ -414,9 +401,8 @@
|
|||
#if (GDISP_NEED_CIRCLE && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a filled circle.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x0,y0 The center of the circle
|
||||
* @param[in] x,y The center of the circle
|
||||
* @param[in] radius The radius of the circle
|
||||
* @param[in] color The color to use
|
||||
*
|
||||
|
@ -441,9 +427,8 @@
|
|||
#if (GDISP_NEED_ELLIPSE && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw an ellipse.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x0,y0 The center of the ellipse
|
||||
* @param[in] x,y The center of the ellipse
|
||||
* @param[in] a,b The dimensions of the ellipse
|
||||
* @param[in] color The color to use
|
||||
*
|
||||
|
@ -469,9 +454,8 @@
|
|||
#if (GDISP_NEED_ELLIPSE && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a filled ellipse.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x0,y0 The center of the ellipse
|
||||
* @param[in] x,y The center of the ellipse
|
||||
* @param[in] a,b The dimensions of the ellipse
|
||||
* @param[in] color The color to use
|
||||
*
|
||||
|
@ -497,7 +481,6 @@
|
|||
#if (GDISP_NEED_ARC && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/*
|
||||
* @brief Draw an arc.
|
||||
* @pre The GDISP must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x0,y0 The center point
|
||||
* @param[in] radius The radius of the arc
|
||||
|
@ -528,7 +511,6 @@
|
|||
#if (GDISP_NEED_ARC && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/*
|
||||
* @brief Draw a filled arc.
|
||||
* @pre The GDISP must be in powerOn or powerSleep mode.
|
||||
* @note Not very efficient currently - does lots of overdrawing
|
||||
*
|
||||
* @param[in] x0,y0 The center point
|
||||
|
@ -560,7 +542,6 @@
|
|||
#if GDISP_NEED_ARC || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a rectangular box with rounded corners
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The start position
|
||||
* @param[in] cx,cy The size of the box (outside dimensions)
|
||||
|
@ -588,7 +569,6 @@ void gdispDrawRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r
|
|||
#if GDISP_NEED_ARC || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a filled rectangular box with rounded corners
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The start position
|
||||
* @param[in] cx,cy The size of the box (outside dimensions)
|
||||
|
@ -618,10 +598,10 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r
|
|||
#if (GDISP_NEED_TEXT && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a text character.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The position for the text
|
||||
* @param[in] c The character to draw
|
||||
* @param[in] font The font to use
|
||||
* @param[in] color The color to use
|
||||
*
|
||||
* @api
|
||||
|
@ -646,10 +626,10 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r
|
|||
#if (GDISP_NEED_TEXT && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a text character with a filled background.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The position for the text
|
||||
* @param[in] c The character to draw
|
||||
* @param[in] font The font to use
|
||||
* @param[in] color The color to use
|
||||
* @param[in] bgcolor The background color to use
|
||||
*
|
||||
|
@ -697,6 +677,7 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r
|
|||
#if (GDISP_NEED_SCROLL && GDISP_NEED_MULTITHREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Scroll vertically a section of the screen.
|
||||
* @pre GDISP_NEED_SCROLL must be set to TRUE in halconf.h
|
||||
* @note Optional.
|
||||
* @note If lines is >= cy, it is equivelent to a area fill with bgcolor.
|
||||
*
|
||||
|
@ -732,7 +713,8 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r
|
|||
* @note Depending on the hardware implementation this function may not
|
||||
* support some codes. They will be ignored.
|
||||
*
|
||||
* @param[in] powerMode The power mode to use
|
||||
* @param[in] what what you want to control
|
||||
* @param[in] value The value to be assigned
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
|
@ -779,7 +761,6 @@ void gdispFillRoundedBox(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t r
|
|||
|
||||
/**
|
||||
* @brief Draw a rectangular box.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The start position
|
||||
* @param[in] cx,cy The size of the box (outside dimensions)
|
||||
|
@ -817,9 +798,9 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
|
|||
#if GDISP_NEED_TEXT || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a text string.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The position for the text
|
||||
* @param[in] font The font to use
|
||||
* @param[in] str The string to draw
|
||||
* @param[in] color The color to use
|
||||
*
|
||||
|
@ -859,10 +840,10 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
|
|||
#if GDISP_NEED_TEXT || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a text string.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The position for the text
|
||||
* @param[in] str The string to draw
|
||||
* @param[in] font The font to use
|
||||
* @param[in] color The color to use
|
||||
* @param[in] bgcolor The background color to use
|
||||
*
|
||||
|
@ -904,10 +885,11 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
|
|||
#if GDISP_NEED_TEXT || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a text string verticly centered within the specified box.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
*
|
||||
* @param[in] x,y The position for the text (need to define top-right or base-line - check code)
|
||||
* @param[in] cx,cy The width and height of the box
|
||||
* @param[in] str The string to draw
|
||||
* @param[in] font The font to use
|
||||
* @param[in] color The color to use
|
||||
* @param[in] justify Justify the text left, center or right within the box
|
||||
*
|
||||
|
@ -1035,11 +1017,12 @@ void gdispDrawBox(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
|
|||
#if GDISP_NEED_TEXT || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a text string verticly centered within the specified box. The box background is filled with the specified background color.
|
||||
* @pre The GDISP unit must be in powerOn or powerSleep mode.
|
||||
* @note The entire box is filled
|
||||
*
|
||||
* @param[in] x,y The position for the text (need to define top-right or base-line - check code)
|
||||
* @param[in] cx,cy The width and height of the box
|
||||
* @param[in] str The string to draw
|
||||
* @param[in] font The font to use
|
||||
* @param[in] color The color to use
|
||||
* @param[in] bgcolor The background color to use
|
||||
* @param[in] justify Justify the text left, center or right within the box
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
Font tables included into gdisp.c
|
||||
*/
|
||||
|
@ -653,3 +654,4 @@
|
|||
#endif /* GDISP_NEED_TEXT */
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
|
|
71
src/graph.c
71
src/graph.c
|
@ -18,13 +18,20 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file src/graph.c
|
||||
* @brief GRAPH module code.
|
||||
*
|
||||
* @addtogroup GRAPH
|
||||
* @{
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "graph.h"
|
||||
|
||||
#if GFX_USE_GRAPH
|
||||
#if GFX_USE_GRAPH || defined(__DOXYGEN__)
|
||||
|
||||
static void _horizontalDotLine(coord_t x0, coord_t y0, coord_t x1, uint16_t space, color_t color) {
|
||||
uint16_t offset = x0;
|
||||
|
@ -46,6 +53,16 @@ static void _verticalDotLine(coord_t x0, coord_t y0, coord_t y1, uint16_t space,
|
|||
} while(count--);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a graph system
|
||||
* @details Draws a graph system with two axis, X and Y.
|
||||
* Different optinal parameters like grid size, grid color,
|
||||
* arrow color (if any) etc. are defined in the struct.
|
||||
*
|
||||
* @param[in] g A pointer to a Graph struct
|
||||
*
|
||||
* @init
|
||||
*/
|
||||
void graphDrawSystem(Graph *g) {
|
||||
uint16_t i;
|
||||
|
||||
|
@ -85,7 +102,17 @@ void graphDrawSystem(Graph *g) {
|
|||
}
|
||||
}
|
||||
|
||||
bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) {
|
||||
/**
|
||||
* @brief Checks if x and y are inside the graph area
|
||||
*
|
||||
* @param[in] g The pointer to the graph
|
||||
* @param[in] x,y The coordinates to be checked
|
||||
*
|
||||
* @return 1 if outside the graph area, 0 otherwise
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
static bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) {
|
||||
if(g->origin_x + x > g->x1)
|
||||
return 1;
|
||||
if(g->origin_x + x < g->x0)
|
||||
|
@ -98,6 +125,18 @@ bool_t _boundaryCheck(Graph *g, coord_t x, coord_t y) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a single dot into the graph
|
||||
* @note The dot won't be drawn if it's outsite the max and min
|
||||
* values of the graph.
|
||||
*
|
||||
* @param[in] g The pointer to the graph
|
||||
* @param[in] x,y The coordinates where the data point will be drawn
|
||||
* @param[in] radius The radius of the dot. One pixel if 0.
|
||||
* @param[in] color The color of the dot.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color) {
|
||||
if(_boundaryCheck(g, x, y))
|
||||
return;
|
||||
|
@ -108,6 +147,19 @@ void graphDrawDot(Graph *g, coord_t x, coord_t y, uint16_t radius, color_t color
|
|||
gdispFillCircle(g->origin_x + x, g->origin_y - y, radius, color);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws multiple dots into the graph
|
||||
* @note A dot won't be drawn if it's outsite the max and min
|
||||
* values of the graph.
|
||||
*
|
||||
* @param[in] g The pointer to the graph
|
||||
* @param[in] coord A two dimensional int array containing the dots coordinates.
|
||||
* @param[in] entries How many dots will be drawn (array index from 0 to entries);
|
||||
* @param[in] radius The radius of the dots. One pixel if 0.
|
||||
* @param[in] color The color of the dots.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t color) {
|
||||
uint16_t i;
|
||||
|
||||
|
@ -122,6 +174,20 @@ void graphDrawDots(Graph *g, int coord[][2], uint16_t entries, uint16_t radius,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws multiple dots into the graph and connects them by a line
|
||||
* @note A dot won't be drawn if it's outsite the max and min
|
||||
* values of the graph.
|
||||
*
|
||||
* @param[in] g The pointer to the graph
|
||||
* @param[in] coord A two dimensional int array containing the dots coordinates.
|
||||
* @param[in] entries How many dots will be drawn (array index from 0 to entries);
|
||||
* @param[in] radius The radius of the dots. One pixel if 0.
|
||||
* @param[in] lineColor The color of the line.
|
||||
* @param[in] dotColor The color of the dots.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, uint16_t lineColor, uint16_t dotColor) {
|
||||
uint16_t i;
|
||||
|
||||
|
@ -146,4 +212,5 @@ void graphDrawNet(Graph *g, int coord[][2], uint16_t entries, uint16_t radius, u
|
|||
}
|
||||
|
||||
#endif /* GFX_USE_GRAPH */
|
||||
/** @} */
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file gwin.c
|
||||
* @file src/gwin.c
|
||||
* @brief GWIN Driver code.
|
||||
*
|
||||
* @addtogroup GWIN
|
||||
|
@ -166,6 +166,7 @@ void gwinClear(GHandle gh) {
|
|||
* @note May leave GDISP clipping to this window's dimensions
|
||||
*
|
||||
* @param[in] gh The window handle
|
||||
* @param[in] x,y The coordinates of the pixel
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
|
@ -887,3 +888,4 @@ void gwinButtonDraw(GHandle gh) {
|
|||
|
||||
#endif /* _GWIN_C */
|
||||
/** @} */
|
||||
|
||||
|
|
278
src/touchpad.c
278
src/touchpad.c
|
@ -1,278 +0,0 @@
|
|||
/* ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file touchpad.c
|
||||
* @brief Touchpad Driver code.
|
||||
*
|
||||
* @addgroup TOUCHPAD
|
||||
* @{
|
||||
*/
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "touchpad.h"
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
|
||||
#if TOUCHPAD_STORE_CALIBRATION
|
||||
extern void tp_store_calibration_lld(struct cal_t *cal);
|
||||
extern struct cal_t *tp_restore_calibration_lld(void);
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
static struct cal_t *cal;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief returns the uncalibrated readout of the X direction from the controller
|
||||
*
|
||||
* @noapi
|
||||
*/
|
||||
static uint16_t _tpReadRealX(void) {
|
||||
uint32_t results = 0;
|
||||
uint16_t i, x;
|
||||
|
||||
/* Median filtering is already done in LLD */
|
||||
for(i = 0; i < CONVERSIONS; i++) {
|
||||
results += tp_lld_read_x();
|
||||
}
|
||||
|
||||
/* Take the average of the readings */
|
||||
x = results / CONVERSIONS;
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief return the uncalibrated readout of the Y-direction from the controller
|
||||
*
|
||||
* @noapi
|
||||
*/
|
||||
static uint16_t _tpReadRealY(void) {
|
||||
uint32_t results = 0;
|
||||
uint16_t i, y;
|
||||
|
||||
/* Median filtering is already done in LLD */
|
||||
for(i = 0; i < CONVERSIONS; i++) {
|
||||
results += tp_lld_read_y();
|
||||
}
|
||||
|
||||
/* Take the average of the readings */
|
||||
y = results / CONVERSIONS;
|
||||
|
||||
return y;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief draws a cross. Used for calibration.
|
||||
*
|
||||
* @noapi
|
||||
*/
|
||||
static void _tpDrawCross(uint16_t x, uint16_t y) {
|
||||
gdispDrawLine(x-15, y, x-2, y, 0xffff);
|
||||
gdispDrawLine(x+2, y, x+15, y, 0xffff);
|
||||
gdispDrawLine(x, y-15, x, y-2, 0xffff);
|
||||
gdispDrawLine(x, y+2, x, y+15, 0xffff);
|
||||
|
||||
gdispDrawLine(x-15, y+15, x-7, y+15, RGB565CONVERT(184,158,131));
|
||||
gdispDrawLine(x-15, y+7, x-15, y+15, RGB565CONVERT(184,158,131));
|
||||
|
||||
gdispDrawLine(x-15, y-15, x-7, y-15, RGB565CONVERT(184,158,131));
|
||||
gdispDrawLine(x-15, y-7, x-15, y-15, RGB565CONVERT(184,158,131));
|
||||
|
||||
gdispDrawLine(x+7, y+15, x+15, y+15, RGB565CONVERT(184,158,131));
|
||||
gdispDrawLine(x+15, y+7, x+15, y+15, RGB565CONVERT(184,158,131));
|
||||
|
||||
gdispDrawLine(x+7, y-15, x+15, y-15, RGB565CONVERT(184,158,131));
|
||||
gdispDrawLine(x+15, y-15, x+15, y-7, RGB565CONVERT(184,158,131));
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Touchpad Driver initialization.
|
||||
* @note This function is NOT currently implicitly invoked by @p halInit().
|
||||
* It must be called manually.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void tpInit(const TOUCHPADDriver *tp) {
|
||||
cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t));
|
||||
if(cal == NULL)
|
||||
return;
|
||||
|
||||
/* Initialise Mutex */
|
||||
//MUTEX_INIT
|
||||
|
||||
/* Initialise driver */
|
||||
//MUTEX_ENTER
|
||||
tp_lld_init(tp);
|
||||
//MUTEX_EXIT
|
||||
|
||||
#if TOUCHPAD_STORE_CALIBRATION
|
||||
cal = tp_restore_calibration_lld();
|
||||
if(cal == NULL) {
|
||||
cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t));
|
||||
tpCalibrate();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the X-Coordinate, relative to screen zero point.
|
||||
*
|
||||
* @return The X position in pixels.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
uint16_t tpReadX(void) {
|
||||
uint16_t x, y;
|
||||
|
||||
#if TOUCHPAD_XY_INVERTED == TRUE
|
||||
x = cal->xm * _tpReadRealY() + cal->xn;
|
||||
y = cal->ym * _tpReadRealX() + cal->yn;
|
||||
#else
|
||||
x = cal->xm * _tpReadRealX() + cal->xn;
|
||||
y = cal->ym * _tpReadRealY() + cal->yn;
|
||||
#endif
|
||||
|
||||
switch(gdispGetOrientation()) {
|
||||
case GDISP_ROTATE_0:
|
||||
return x;
|
||||
case GDISP_ROTATE_90:
|
||||
return y;
|
||||
case GDISP_ROTATE_180:
|
||||
return GDISP_SCREEN_WIDTH - x - 1;
|
||||
case GDISP_ROTATE_270:
|
||||
return GDISP_SCREEN_HEIGHT - y - 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the X-Coordinate, relative to screen zero point.
|
||||
*
|
||||
* @return The Y position in pixels.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
uint16_t tpReadY(void) {
|
||||
uint16_t x, y;
|
||||
|
||||
#if TOUCHPAD_XY_INVERTED == TRUE
|
||||
x = cal->xm * _tpReadRealY() + cal->xn;
|
||||
y = cal->ym * _tpReadRealX() + cal->yn;
|
||||
#else
|
||||
x = cal->xm * _tpReadRealX() + cal->xn;
|
||||
y = cal->ym * _tpReadRealY() + cal->yn;
|
||||
#endif
|
||||
|
||||
switch(gdispGetOrientation()) {
|
||||
case GDISP_ROTATE_0:
|
||||
return y;
|
||||
case GDISP_ROTATE_90:
|
||||
return GDISP_SCREEN_WIDTH - x - 1;
|
||||
case GDISP_ROTATE_180:
|
||||
return GDISP_SCREEN_HEIGHT - y - 1;
|
||||
case GDISP_ROTATE_270:
|
||||
return x;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tpCalibrate(void) {
|
||||
const uint16_t h = gdispGetHeight();
|
||||
const uint16_t w = gdispGetWidth();
|
||||
const uint16_t cross[2][2] = {{(w/8), (h/8)}, {(w-(w/8)) , (h-(h/8))}};
|
||||
uint16_t points[2][2];
|
||||
uint8_t i;
|
||||
|
||||
gdispSetOrientation(GDISP_ROTATE_0);
|
||||
gdispClear(Red);
|
||||
gdispFillStringBox(0, 10, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Red, justifyCenter);
|
||||
|
||||
for(i = 0; i < 2; i++) {
|
||||
_tpDrawCross(cross[i][0], cross[i][1]);
|
||||
while(!tpIRQ());
|
||||
points[i][0] = _tpReadRealX();
|
||||
points[i][1] = _tpReadRealY();
|
||||
chThdSleepMilliseconds(100);
|
||||
while(tpIRQ());
|
||||
gdispFillArea(cross[i][0]-15, cross[i][1]-15, 42, 42, Red);
|
||||
}
|
||||
|
||||
cal->xm = ((float)cross[1][0] - (float)cross[0][0]) / ((float)points[1][0] - (float)points[0][0]);
|
||||
cal->ym = ((float)cross[1][1] - (float)cross[0][1]) / ((float)points[1][1] - (float)points[0][1]);
|
||||
|
||||
cal->xn = (float)cross[0][0] - cal->xm * (float)points[0][0];
|
||||
cal->yn = (float)cross[0][1] - cal->ym * (float)points[0][1];
|
||||
|
||||
#if TOUCHPAD_STORE_CALIBRATION
|
||||
tp_store_calibration_lld(cal);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief returns if touchpad is pressed or not
|
||||
*
|
||||
* @return 1 if pressed, 0 otherwise
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__)
|
||||
uint8_t tpIRQ(void) {
|
||||
return tp_lld_irq();
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Get the pressure.
|
||||
*
|
||||
* @return The pressure.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__)
|
||||
uint16_t tpReadZ(void) {
|
||||
/* ToDo */
|
||||
return (tp_lld_read_z());
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
/** @} */
|
||||
|
374
src/touchscreen.c
Normal file
374
src/touchscreen.c
Normal file
|
@ -0,0 +1,374 @@
|
|||
/* ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file src/touchscreen.c
|
||||
* @brief Touchscreen Driver code.
|
||||
*
|
||||
* @addtogroup TOUCHSCREEN
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
#include "touchscreen.h"
|
||||
|
||||
#if GFX_USE_TOUCHSCREEN || defined(__DOXYGEN__)
|
||||
|
||||
#if TOUCHSCREEN_STORE_CALIBRATION
|
||||
extern void ts_store_calibration_lld(struct cal_t *cal);
|
||||
extern struct cal_t *ts_restore_calibration_lld(void);
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
static struct cal_t *cal;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
static coord_t _tsReadRealX(void) {
|
||||
int32_t results = 0;
|
||||
int16_t i;
|
||||
coord_t x;
|
||||
|
||||
for(i = 0; i < CONVERSIONS; i++) {
|
||||
results += ts_lld_read_x();
|
||||
}
|
||||
|
||||
/* Take the average of the readings */
|
||||
x = results / CONVERSIONS;
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
static coord_t _tsReadRealY(void) {
|
||||
int32_t results = 0;
|
||||
int16_t i;
|
||||
coord_t y;
|
||||
|
||||
for(i = 0; i < CONVERSIONS; i++) {
|
||||
results += ts_lld_read_y();
|
||||
}
|
||||
|
||||
/* Take the average of the readings */
|
||||
y = results / CONVERSIONS;
|
||||
|
||||
return y;
|
||||
}
|
||||
|
||||
static void _tsDrawCross(uint16_t x, uint16_t y) {
|
||||
gdispDrawLine(x-15, y, x-2, y, 0xffff);
|
||||
gdispDrawLine(x+2, y, x+15, y, 0xffff);
|
||||
gdispDrawLine(x, y-15, x, y-2, 0xffff);
|
||||
gdispDrawLine(x, y+2, x, y+15, 0xffff);
|
||||
|
||||
gdispDrawLine(x-15, y+15, x-7, y+15, RGB565CONVERT(184,158,131));
|
||||
gdispDrawLine(x-15, y+7, x-15, y+15, RGB565CONVERT(184,158,131));
|
||||
|
||||
gdispDrawLine(x-15, y-15, x-7, y-15, RGB565CONVERT(184,158,131));
|
||||
gdispDrawLine(x-15, y-7, x-15, y-15, RGB565CONVERT(184,158,131));
|
||||
|
||||
gdispDrawLine(x+7, y+15, x+15, y+15, RGB565CONVERT(184,158,131));
|
||||
gdispDrawLine(x+15, y+7, x+15, y+15, RGB565CONVERT(184,158,131));
|
||||
|
||||
gdispDrawLine(x+7, y-15, x+15, y-15, RGB565CONVERT(184,158,131));
|
||||
gdispDrawLine(x+15, y-15, x+15, y-7, RGB565CONVERT(184,158,131));
|
||||
}
|
||||
|
||||
static void _tsTransform(coord_t *x, coord_t *y) {
|
||||
*x = (coord_t) (cal->ax * (*x) + cal->bx * (*y) + cal->cx);
|
||||
*y = (coord_t) (cal->ay * (*x) + cal->by * (*y) + cal->cy);
|
||||
}
|
||||
|
||||
static void _tsDo3PointCalibration(const coord_t (*cross)[2], coord_t (*points)[2], cal_t *c) {
|
||||
float dx, dx0, dx1, dx2, dy0, dy1, dy2;
|
||||
|
||||
/* Compute all the required determinants */
|
||||
dx = ((float)(points[0][0] - points[2][0])) * ((float)(points[1][1] - points[2][1]))
|
||||
- ((float)(points[1][0] - points[2][0])) * ((float)(points[0][1] - points[2][1]));
|
||||
|
||||
dx0 = ((float)(cross[0][0] - cross[2][0])) * ((float)(points[1][1] - points[2][1]))
|
||||
- ((float)(cross[1][0] - cross[2][0])) * ((float)(points[0][1] - points[2][1]));
|
||||
|
||||
dx1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][0] - cross[2][0]))
|
||||
- ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][0] - cross[2][0]));
|
||||
|
||||
dx2 = cross[0][0] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) -
|
||||
cross[1][0] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) +
|
||||
cross[2][0] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]);
|
||||
|
||||
dy0 = ((float)(cross[0][1] - cross[2][1])) * ((float)(points[1][1] - points[2][1]))
|
||||
- ((float)(cross[1][1] - cross[2][1])) * ((float)(points[0][1] - points[2][1]));
|
||||
|
||||
dy1 = ((float)(points[0][0] - points[2][0])) * ((float)(cross[1][1] - cross[2][1]))
|
||||
- ((float)(points[1][0] - points[2][0])) * ((float)(cross[0][1] - cross[2][1]));
|
||||
|
||||
dy2 = cross[0][1] * ((float)points[1][0] * (float)points[2][1] - (float)points[2][0] * (float)points[1][1]) -
|
||||
cross[1][1] * ((float)points[0][0] * (float)points[2][1] - (float)points[2][0] * (float)points[0][1]) +
|
||||
cross[2][1] * ((float)points[0][0] * (float)points[1][1] - (float)points[1][0] * (float)points[0][1]);
|
||||
|
||||
/* Now, calculate all the required coefficients */
|
||||
c->ax = dx0 / dx;
|
||||
c->bx = dx1 / dx;
|
||||
c->cx = dx2 / dx;
|
||||
|
||||
c->ay = dy0 / dx;
|
||||
c->by = dy1 / dx;
|
||||
c->cy = dy2 / dx;
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Touchscreen Driver initialization.
|
||||
* @note This function is NOT currently implicitly invoked by @p halInit().
|
||||
* It must be called manually.
|
||||
*
|
||||
* @param[in] ts The touchscreen driver struct
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void tsInit(const TouchscreenDriver *ts) {
|
||||
cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t));
|
||||
if(cal == NULL)
|
||||
return;
|
||||
|
||||
/* Initialise Mutex */
|
||||
//MUTEX_INIT
|
||||
|
||||
/* Initialise driver */
|
||||
//MUTEX_ENTER
|
||||
ts_lld_init(ts);
|
||||
//MUTEX_EXIT
|
||||
|
||||
#if TOUCHSCREEN_STORE_CALIBRATION
|
||||
cal = ts_restore_calibration_lld();
|
||||
if(cal == NULL) {
|
||||
cal = (struct cal_t*)chHeapAlloc(NULL, sizeof(struct cal_t));
|
||||
tsCalibrate();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the X-Coordinate, relative to screen zero point.
|
||||
*
|
||||
* @return The X position in pixels.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
coord_t tsReadX(void) {
|
||||
coord_t x, y;
|
||||
|
||||
#if TOUCHSCREEN_XY_INVERTED == TRUE
|
||||
x = _tsReadRealY();
|
||||
y = _tsReadRealX();
|
||||
#else
|
||||
x = _tsReadRealX();
|
||||
y = _tsReadRealY();
|
||||
#endif
|
||||
|
||||
_tsTransform(&x, &y);
|
||||
|
||||
switch(gdispGetOrientation()) {
|
||||
case GDISP_ROTATE_0:
|
||||
return x;
|
||||
case GDISP_ROTATE_90:
|
||||
return y;
|
||||
case GDISP_ROTATE_180:
|
||||
return GDISP_SCREEN_WIDTH - x - 1;
|
||||
case GDISP_ROTATE_270:
|
||||
return GDISP_SCREEN_HEIGHT - y - 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the X-Coordinate, relative to screen zero point.
|
||||
*
|
||||
* @return The Y position in pixels.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
coord_t tsReadY(void) {
|
||||
coord_t x, y;
|
||||
|
||||
#if TOUCHSCREEN_XY_INVERTED == TRUE
|
||||
x = _tsReadRealY();
|
||||
y = _tsReadRealX();
|
||||
#else
|
||||
x = _tsReadRealX();
|
||||
y = _tsReadRealY();
|
||||
#endif
|
||||
|
||||
_tsTransform(&x, &y);
|
||||
|
||||
switch(gdispGetOrientation()) {
|
||||
case GDISP_ROTATE_0:
|
||||
return y;
|
||||
case GDISP_ROTATE_90:
|
||||
return GDISP_SCREEN_WIDTH - x - 1;
|
||||
case GDISP_ROTATE_180:
|
||||
return GDISP_SCREEN_HEIGHT - y - 1;
|
||||
case GDISP_ROTATE_270:
|
||||
return x;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the pressure.
|
||||
*
|
||||
* @return The pressure.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#if TOUCHSCREEN_HAS_PRESSURE || defined(__DOXYGEN__)
|
||||
uint16_t tsReadZ(void) {
|
||||
/* ToDo */
|
||||
return (ts_lld_read_z());
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Returns if touchscreen is pressed or not
|
||||
*
|
||||
* @return TRUE if pressed, FALSE otherwise
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#if TOUCHSCREEN_HAS_IRQ || defined(__DOXYGEN__)
|
||||
bool_t tsIRQ(void) {
|
||||
return ts_lld_irq();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Define maximum no. of times to sample the calibration point */
|
||||
#define MAX_CAL_SAMPLES 10
|
||||
|
||||
/**
|
||||
* @brief Function to calibrate touchscreen
|
||||
* @details This function interactively performs calibration of the touchscreen
|
||||
* using 3-point calibration algorithm. Optionally, it also verifies
|
||||
* the accuracy of the calibration coefficients obtained if the symbol
|
||||
* TOUCHSCREEN_VERIFY_CALIBRATION is defined in the configuration.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
void tsCalibrate(void) {
|
||||
const uint16_t height = gdispGetHeight();
|
||||
const uint16_t width = gdispGetWidth();
|
||||
const coord_t cross[][2] = {{(width / 4), (height / 4)},
|
||||
{(width - (width / 4)) , (height / 4)},
|
||||
{(width - (width / 4)) , (height - (height / 4))},
|
||||
{(width / 2), (height / 2)}}; /* Check point */
|
||||
coord_t points[4][2];
|
||||
int32_t px, py;
|
||||
uint8_t i, j;
|
||||
|
||||
gdispSetOrientation(GDISP_ROTATE_0);
|
||||
gdispClear(Blue);
|
||||
|
||||
gdispFillStringBox(0, 5, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Blue, justifyCenter);
|
||||
|
||||
#if TOUCHSCREEN_VERIFY_CALIBRATION
|
||||
calibrate:
|
||||
for(i = 0; i < 4; i++) {
|
||||
#else
|
||||
for(i = 0; i < 3; i++) {
|
||||
#endif
|
||||
_tsDrawCross(cross[i][0], cross[i][1]);
|
||||
|
||||
while(!tsIRQ())
|
||||
chThdSleepMilliseconds(2); /* Be nice to other threads*/
|
||||
|
||||
chThdSleepMilliseconds(20); /* Allow screen to settle */
|
||||
|
||||
/* Take a little more samples per point and their average
|
||||
* for precise calibration */
|
||||
px = py = 0;
|
||||
|
||||
j = 0;
|
||||
while (j < MAX_CAL_SAMPLES) {
|
||||
if (tsIRQ()) {
|
||||
/* We have valid pointer data */
|
||||
px += _tsReadRealX();
|
||||
py += _tsReadRealY();
|
||||
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
points[i][0] = px / j;
|
||||
points[i][1] = py / j;
|
||||
|
||||
chThdSleepMilliseconds(100);
|
||||
|
||||
while(tsIRQ())
|
||||
chThdSleepMilliseconds(2); /* Be nice to other threads*/
|
||||
|
||||
gdispFillArea(cross[i][0] - 15, cross[i][1] - 15, 42, 42, Blue);
|
||||
}
|
||||
|
||||
/* Apply 3 point calibration algorithm */
|
||||
_tsDo3PointCalibration(cross, points, cal);
|
||||
|
||||
#if TOUCHSCREEN_VERIFY_CALIBRATION
|
||||
/* Verification of correctness of calibration (optional) :
|
||||
* See if the 4th point (Middle of the screen) coincides with the calibrated
|
||||
* result. If point is with +/- 2 pixel margin, then successful calibration
|
||||
* Else, start from the beginning.
|
||||
*/
|
||||
|
||||
/* Transform the co-ordinates */
|
||||
_tpTransform(&points[3][0], &points[3][1]);
|
||||
|
||||
/* Calculate the delta */
|
||||
px = (points[3][0] - cross[3][0]) * (points[3][0] - cross[3][0]) +
|
||||
(points[3][1] - cross[3][1]) * (points[3][1] - cross[3][1]);
|
||||
|
||||
if(px > 4)
|
||||
goto calibrate;
|
||||
#endif
|
||||
|
||||
/* If enabled, serialize the calibration values for storage */
|
||||
#if TOUCHSCREEN_STORE_CALIBRATION
|
||||
ts_store_calibration_lld(cal);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* GFX_USE_TOUCHSCREEN */
|
||||
/** @} */
|
||||
|
|
@ -1,558 +0,0 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file templates/gdisp_lld.c
|
||||
* @brief GDISP Graphics Driver subsystem low level driver source template.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "gdisp.h"
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
|
||||
/* Include the emulation code for things we don't support */
|
||||
#include "gdisp_emulation.c"
|
||||
|
||||
#if GDISP_NEED_TEXT && GDISP_HARDWARE_TEXT
|
||||
#include "gdisp_fonts.h"
|
||||
#endif
|
||||
|
||||
/* All the board specific code should go in these include file so the driver
|
||||
* can be ported to another board just by creating a suitable file.
|
||||
*/
|
||||
#if defined(BOARD_YOURBOARDNAME)
|
||||
#include "gdisp_lld_board_yourboardname.h"
|
||||
#else
|
||||
/* Include the user supplied board definitions */
|
||||
#include "gdisp_lld_board.h"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver interrupt handlers. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* ---- Required Routines ---- */
|
||||
/*
|
||||
The following 2 routines are required.
|
||||
All other routines are optional.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Low level GDISP driver initialisation.
|
||||
* @return TRUE if successful, FALSE on error.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
bool_t GDISP_LLD(init)(void) {
|
||||
/* Initialise your display */
|
||||
|
||||
/* Initialise the GDISP structure to match */
|
||||
GDISP.Width = GDISP_SCREEN_WIDTH;
|
||||
GDISP.Height = GDISP_SCREEN_HEIGHT;
|
||||
GDISP.Orientation = GDISP_ROTATE_0;
|
||||
GDISP.Powermode = powerOn;
|
||||
GDISP.Backlight = 100;
|
||||
GDISP.Contrast = 50;
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
GDISP.clipx0 = 0;
|
||||
GDISP.clipy0 = 0;
|
||||
GDISP.clipx1 = GDISP.Width;
|
||||
GDISP.clipy1 = GDISP.Height;
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Draws a pixel on the display.
|
||||
*
|
||||
* @param[in] x X location of the pixel
|
||||
* @param[in] y Y location of the pixel
|
||||
* @param[in] color The color of the pixel
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(drawpixel)(coord_t x, coord_t y, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
if (x < GDISP.clipx0 || y < GDISP.clipy0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
|
||||
/* ---- Optional Routines ---- */
|
||||
/*
|
||||
All the below routines are optional.
|
||||
Defining them will increase speed but everything
|
||||
will work if they are not defined.
|
||||
If you are not using a routine - turn it off using
|
||||
the appropriate GDISP_HARDWARE_XXXX macro.
|
||||
Don't bother coding for obvious similar routines if
|
||||
there is no performance penalty as the emulation software
|
||||
makes a good job of using similar routines.
|
||||
eg. If fillarea() is defined there is little
|
||||
point in defining clear() unless the
|
||||
performance bonus is significant.
|
||||
For good performance it is suggested to implement
|
||||
fillarea() and blitarea().
|
||||
*/
|
||||
|
||||
#if GDISP_HARDWARE_CLEARS || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Clear the display.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
*
|
||||
* @param[in] color The color of the pixel
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(clear)(color_t color) {
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_HARDWARE_LINES || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a line.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
*
|
||||
* @param[in] x0, y0 The start of the line
|
||||
* @param[in] x1, y1 The end of the line
|
||||
* @param[in] color The color of the line
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(drawline)(coord_t x0, coord_t y0, coord_t x1, coord_t y1, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_HARDWARE_FILLS || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Fill an area with a color.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
*
|
||||
* @param[in] x, y The start filled area
|
||||
* @param[in] cx, cy The width and height to be filled
|
||||
* @param[in] color The color of the fill
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(fillarea)(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; x = GDISP.clipx0; }
|
||||
if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; y = GDISP.clipy0; }
|
||||
if (cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
|
||||
if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x;
|
||||
if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y;
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_HARDWARE_BITFILLS || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Fill an area with a bitmap.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
*
|
||||
* @param[in] x, y The start filled area
|
||||
* @param[in] cx, cy The width and height to be filled
|
||||
* @param[in] srcx, srcy The bitmap position to start the fill from
|
||||
* @param[in] srccx The width of a line in the bitmap.
|
||||
* @param[in] buffer The pixels to use to fill the area.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(blitareaex)(coord_t x, coord_t y, coord_t cx, coord_t cy, coord_t srcx, coord_t srcy, coord_t srccx, const pixel_t *buffer) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; srcx += GDISP.clipx0 - x; x = GDISP.clipx0; }
|
||||
if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; srcy += GDISP.clipy0 - y; y = GDISP.clipy0; }
|
||||
if (srcx+cx > srccx) cx = srccx - srcx;
|
||||
if (cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
|
||||
if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x;
|
||||
if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y;
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Circular Drawing Functions */
|
||||
#if (GDISP_NEED_CIRCLE && GDISP_HARDWARE_CIRCLES) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a circle.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave
|
||||
* correctly if the circle is over the edges of the screen.
|
||||
*
|
||||
* @param[in] x, y The centre of the circle
|
||||
* @param[in] radius The radius of the circle
|
||||
* @param[in] color The color of the circle
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(drawcircle)(coord_t x, coord_t y, coord_t radius, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_CIRCLE && GDISP_HARDWARE_CIRCLEFILLS) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Create a filled circle.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave
|
||||
* correctly if the circle is over the edges of the screen.
|
||||
*
|
||||
* @param[in] x, y The centre of the circle
|
||||
* @param[in] radius The radius of the circle
|
||||
* @param[in] color The color of the circle
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(fillcircle)(coord_t x, coord_t y, coord_t radius, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_ELLIPSE && GDISP_HARDWARE_ELLIPSES) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw an ellipse.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave
|
||||
* correctly if the ellipse is over the edges of the screen.
|
||||
*
|
||||
* @param[in] x, y The centre of the ellipse
|
||||
* @param[in] a, b The dimensions of the ellipse
|
||||
* @param[in] color The color of the ellipse
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(drawellipse)(coord_t x, coord_t y, coord_t a, coord_t b, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_ELLIPSE && GDISP_HARDWARE_ELLIPSEFILLS) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Create a filled ellipse.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave
|
||||
* correctly if the ellipse is over the edges of the screen.
|
||||
*
|
||||
* @param[in] x, y The centre of the ellipse
|
||||
* @param[in] a, b The dimensions of the ellipse
|
||||
* @param[in] color The color of the ellipse
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(fillellipse)(coord_t x, coord_t y, coord_t a, coord_t b, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Arc Drawing Functions */
|
||||
#if (GDISP_NEED_ARC && GDISP_HARDWARE_ARCS) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw an arc.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave
|
||||
* correctly if the circle is over the edges of the screen.
|
||||
*
|
||||
* @param[in] x, y The centre of the arc circle
|
||||
* @param[in] radius The radius of the arc circle
|
||||
* @param[in] startangle, endangle The start and end angles for the arc (0..359)
|
||||
* @param[in] color The color of the circle
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(drawarc)(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_ARC && GDISP_HARDWARE_ARCFILLS) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Create a filled arc.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
* @note If GDISP_NEED_CLIPPING is defined this routine MUST behave
|
||||
* correctly if the circle is over the edges of the screen.
|
||||
*
|
||||
* @param[in] x, y The centre of the arc circle
|
||||
* @param[in] radius The radius of the arc circle
|
||||
* @param[in] startangle, endangle The start and end angles for the arc (0..359)
|
||||
* @param[in] color The color of the circle
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(fillarc)(coord_t x, coord_t y, coord_t radius, coord_t startangle, coord_t endangle, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_TEXT && GDISP_HARDWARE_TEXT) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a character using a transparent background.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
*
|
||||
* @param[in] x, y The top-left corner of the text
|
||||
* @param[in] c The character to print
|
||||
* @param[in] color The color of the character
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(drawchar)(coord_t x, coord_t y, char c, font_t font, color_t color) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_TEXT && GDISP_HARDWARE_TEXTFILLS) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Draw a character using a filled background.
|
||||
* @note Optional - The high level driver can emulate using software.
|
||||
*
|
||||
* @param[in] x, y The top-left corner of the text
|
||||
* @param[in] c The character to print
|
||||
* @param[in] color The color of the character
|
||||
* @param[in] bgcolor The background color
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(fillchar)(coord_t x, coord_t y, char c, font_t font, color_t color, color_t bgcolor) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
/* Code here */
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_PIXELREAD && GDISP_HARDWARE_PIXELREAD) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Get the color of a particular pixel.
|
||||
* @note Optional.
|
||||
* @note If x,y is off the screen, the result is undefined.
|
||||
* @return The color of the specified pixel.
|
||||
*
|
||||
* @param[in] x, y The start of the text
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
color_t GDISP_LLD(getpixelcolor)(coord_t x, coord_t y) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
if (x < 0 || x >= GDISP.Width || y < 0 || y >= GDISP.Height) return 0;
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_SCROLL && GDISP_HARDWARE_SCROLL) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Scroll vertically a section of the screen.
|
||||
* @note Optional.
|
||||
* @note If x,y + cx,cy is off the screen, the result is undefined.
|
||||
* @note If lines is >= cy, it is equivelent to a area fill with bgcolor.
|
||||
*
|
||||
* @param[in] x, y The start of the area to be scrolled
|
||||
* @param[in] cx, cy The size of the area to be scrolled
|
||||
* @param[in] lines The number of lines to scroll (Can be positive or negative)
|
||||
* @param[in] bgcolor The color to fill the newly exposed area.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(verticalscroll)(coord_t x, coord_t y, coord_t cx, coord_t cy, int lines, color_t bgcolor) {
|
||||
#if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
|
||||
if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; x = GDISP.clipx0; }
|
||||
if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; y = GDISP.clipy0; }
|
||||
if (!lines || cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
|
||||
if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x;
|
||||
if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y;
|
||||
#endif
|
||||
/* Code here */
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Driver Control
|
||||
* @detail Unsupported control codes are ignored.
|
||||
* @note The value parameter should always be typecast to (void *).
|
||||
* @note There are some predefined and some specific to the low level driver.
|
||||
* @note GDISP_CONTROL_POWER - Takes a gdisp_powermode_t
|
||||
* GDISP_CONTROL_ORIENTATION - Takes a gdisp_orientation_t
|
||||
* GDISP_CONTROL_BACKLIGHT - Takes an int from 0 to 100. For a driver
|
||||
* that only supports off/on anything other
|
||||
* than zero is on.
|
||||
* GDISP_CONTROL_CONTRAST - Takes an int from 0 to 100.
|
||||
* GDISP_CONTROL_LLD - Low level driver control constants start at
|
||||
* this value.
|
||||
*
|
||||
* @param[in] what What to do.
|
||||
* @param[in] value The value to use (always cast to a void *).
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void GDISP_LLD(control)(unsigned what, void *value) {
|
||||
switch(what) {
|
||||
case GDISP_CONTROL_POWER:
|
||||
if (GDISP.Powermode == (gdisp_powermode_t)value)
|
||||
return;
|
||||
switch((gdisp_powermode_t)value) {
|
||||
case powerOff:
|
||||
/* Code here */
|
||||
break;
|
||||
case powerOn:
|
||||
/* Code here */
|
||||
/* You may need this ---
|
||||
if (GDISP.Powermode != powerSleep)
|
||||
GDISP_LLD(init)();
|
||||
*/
|
||||
break;
|
||||
case powerSleep:
|
||||
/* Code here */
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
GDISP.Powermode = (gdisp_powermode_t)value;
|
||||
return;
|
||||
case GDISP_CONTROL_ORIENTATION:
|
||||
if (GDISP.Orientation == (gdisp_orientation_t)value)
|
||||
return;
|
||||
switch((gdisp_orientation_t)value) {
|
||||
case GDISP_ROTATE_0:
|
||||
/* Code here */
|
||||
GDISP.Height = GDISP_SCREEN_HEIGHT;
|
||||
GDISP.Width = GDISP_SCREEN_WIDTH;
|
||||
break;
|
||||
case GDISP_ROTATE_90:
|
||||
/* Code here */
|
||||
GDISP.Height = GDISP_SCREEN_WIDTH;
|
||||
GDISP.Width = GDISP_SCREEN_HEIGHT;
|
||||
break;
|
||||
case GDISP_ROTATE_180:
|
||||
/* Code here */
|
||||
GDISP.Height = GDISP_SCREEN_HEIGHT;
|
||||
GDISP.Width = GDISP_SCREEN_WIDTH;
|
||||
break;
|
||||
case GDISP_ROTATE_270:
|
||||
/* Code here */
|
||||
GDISP.Height = GDISP_SCREEN_WIDTH;
|
||||
GDISP.Width = GDISP_SCREEN_HEIGHT;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
#if GDISP_NEED_CLIP || GDISP_NEED_VALIDATION
|
||||
GDISP.clipx0 = 0;
|
||||
GDISP.clipy0 = 0;
|
||||
GDISP.clipx1 = GDISP.Width;
|
||||
GDISP.clipy1 = GDISP.Height;
|
||||
#endif
|
||||
GDISP.Orientation = (gdisp_orientation_t)value;
|
||||
return;
|
||||
/*
|
||||
case GDISP_CONTROL_BACKLIGHT:
|
||||
case GDISP_CONTROL_CONTRAST:
|
||||
*/
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (GDISP_NEED_QUERY && GDISP_HARDWARE_QUERY) || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Query a driver value.
|
||||
* @detail Typecase the result to the type you want.
|
||||
* @note GDISP_QUERY_WIDTH - (coord_t) Gets the width of the screen
|
||||
* GDISP_QUERY_HEIGHT - (coord_t) Gets the height of the screen
|
||||
* GDISP_QUERY_POWER - (gdisp_powermode_t) Get the current powermode
|
||||
* GDISP_QUERY_ORIENTATION - (gdisp_orientation_t) Get the current screen orientation
|
||||
* GDISP_QUERY_BACKLIGHT - (coord_t) Get the backlight state (0 to 100)
|
||||
* GDISP_QUERY_CONTRAST - (coord_t) Get the contrast (0 to 100).
|
||||
* GDISP_QUERY_LLD - Low level driver control constants start at
|
||||
* this value.
|
||||
*
|
||||
* @param[in] what What to Query
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void *GDISP_LLD(query)(unsigned what) {
|
||||
switch(what) {
|
||||
case GDISP_QUERY_WIDTH: return (void *)(unsigned)GDISP.Width;
|
||||
case GDISP_QUERY_HEIGHT: return (void *)(unsigned)GDISP.Height;
|
||||
case GDISP_QUERY_POWER: return (void *)(unsigned)GDISP.Powermode;
|
||||
case GDISP_QUERY_ORIENTATION: return (void *)(unsigned)GDISP.Orientation;
|
||||
case GDISP_QUERY_BACKLIGHT: return (void *)(unsigned)GDISP.Backlight;
|
||||
case GDISP_QUERY_CONTRAST: return (void *)(unsigned)GDISP.Contrast;
|
||||
case GDISP_QUERY_LLD+0:
|
||||
/* Code here */
|
||||
default: return (void *)-1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if GDISP_NEED_CLIP && GDISP_HARDWARE_CLIP
|
||||
void GDISP_LLD(setclip)(coord_t x, coord_t y, coord_t cx, coord_t cy) {
|
||||
#if GDISP_NEED_VALIDATION
|
||||
if (x >= GDISP.Width || y >= GDISP.Height || cx < 0 || cy < 0)
|
||||
return;
|
||||
if (x < 0) x = 0;
|
||||
if (y < 0) y = 0;
|
||||
if (x+cx > GDISP.Width) cx = GDISP.Width - x;
|
||||
if (y+cy > GDISP.Height) cy = GDISP.Height - y;
|
||||
#endif
|
||||
GDISP.clipx0 = x;
|
||||
GDISP.clipy0 = y;
|
||||
GDISP.clipx1 = x+cx;
|
||||
GDISP.clipy1 = y+cy;
|
||||
/* Code here to set hardware clipping */
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
/** @} */
|
|
@ -1,5 +0,0 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE/gdisp_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/gdisp/gdispYOURDEVICE
|
|
@ -1,69 +0,0 @@
|
|||
/*
|
||||
ChibiOS/RT - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file templates/gdisp_lld_config.h
|
||||
* @brief GDISP Graphic Driver subsystem low level driver header template.
|
||||
*
|
||||
* @addtogroup GDISP
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _GDISP_LLD_CONFIG_H
|
||||
#define _GDISP_LLD_CONFIG_H
|
||||
|
||||
#if GFX_USE_GDISP || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver hardware support. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#define GDISP_DRIVER_NAME "YourDriverName"
|
||||
#define GDISP_LLD(x) gdisp_lld_##x##_YourDriverName
|
||||
|
||||
#define GDISP_HARDWARE_LINES FALSE
|
||||
#define GDISP_HARDWARE_CLEARS FALSE
|
||||
#define GDISP_HARDWARE_FILLS FALSE
|
||||
#define GDISP_HARDWARE_BITFILLS FALSE
|
||||
#define GDISP_HARDWARE_CIRCLES FALSE
|
||||
#define GDISP_HARDWARE_CIRCLEFILLS FALSE
|
||||
#define GDISP_HARDWARE_ELLIPSES FALSE
|
||||
#define GDISP_HARDWARE_ELLIPSEFILLS FALSE
|
||||
#define GDISP_HARDWARE_ARCS FALSE
|
||||
#define GDISP_HARDWARE_ARCFILLS FALSE
|
||||
#define GDISP_HARDWARE_TEXT FALSE
|
||||
#define GDISP_HARDWARE_TEXTFILLS FALSE
|
||||
#define GDISP_HARDWARE_SCROLL FALSE
|
||||
#define GDISP_HARDWARE_PIXELREAD FALSE
|
||||
#define GDISP_HARDWARE_CONTROL FALSE
|
||||
#define GDISP_HARDWARE_QUERY FALSE
|
||||
#define GDISP_HARDWARE_CLIP FALSE
|
||||
|
||||
#define GDISP_SOFTWARE_TEXTFILLDRAW FALSE
|
||||
#define GDISP_SOFTWARE_TEXTBLITCOLUMN FALSE
|
||||
|
||||
#define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB565
|
||||
#define GDISP_PACKED_PIXELS FALSE
|
||||
#define GDISP_PACKED_LINES FALSE
|
||||
|
||||
#endif /* GFX_USE_GDISP */
|
||||
|
||||
#endif /* _GDISP_LLD_CONFIG_H */
|
||||
/** @} */
|
|
@ -1,35 +0,0 @@
|
|||
To use this driver template
|
||||
1. Copy this entire directory (including the directory itself)
|
||||
into halext/drivers
|
||||
2. Rename the directory to match your hardware.
|
||||
3. Customise each file in the directory including the .mk file
|
||||
and this file. An example for this file is below...
|
||||
4. Keep any board specific code in a file you create called
|
||||
gdisp_lld_board_yourboardname.h and adjust gdisp.c to match.
|
||||
This enables someone porting to a new board to add another
|
||||
suitable boad definition without worrying about the rest of
|
||||
the driver. See the gdispNokia6610 driver as an example.
|
||||
|
||||
------------------------------------------------------------------
|
||||
To use this driver:
|
||||
|
||||
1. Add in your halconf.h:
|
||||
a) #define GFX_USE_GDISP TRUE
|
||||
b) Any optional high level driver defines (see gdisp.h) eg: GDISP_NEED_MULTITHREAD
|
||||
c) One (only) of:
|
||||
#define GDISP_USE_GPIO
|
||||
#define GDISP_USE_SPI
|
||||
#define GDISP_USE_FSMC
|
||||
d) All of the following (with appropriate values):
|
||||
#define GDISP_SCREEN_WIDTH 128
|
||||
#define GDISP_SCREEN_HEIGHT 128
|
||||
e) If you are not using a known board then create a gdisp_lld_board.h file
|
||||
and ensure it is on your include path.
|
||||
Use the gdisp_lld_board_example.h file as a basis.
|
||||
Currently known boards are:
|
||||
XXXXXXXXX
|
||||
|
||||
|
||||
2. To your makefile add the following lines:
|
||||
include $(CHIBIOS)/os/halext/halext.mk
|
||||
include $(CHIBIOS)/os/halext/drivers/gdispXXXXX/gdisp_lld.mk
|
|
@ -1,9 +0,0 @@
|
|||
The following low level driver templates are available:
|
||||
|
||||
GDISP:
|
||||
gdispXXXXX - Generalised GDISP driver
|
||||
|
||||
TOUCHPAD:
|
||||
touchpadXXXXX - Generalised TOUCHPAD driver
|
||||
|
||||
|
|
@ -1,145 +0,0 @@
|
|||
/*
|
||||
ChibiOS/GFX - Copyright (C) 2012
|
||||
Joel Bodenmann aka Tectu <joel@unormal.org>
|
||||
|
||||
This file is part of ChibiOS/GFX.
|
||||
|
||||
ChibiOS/GFX is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/GFX is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file touchpadXPT2046/touchpad_lld.c
|
||||
* @brief Touchpad Driver subsystem low level driver source.
|
||||
*
|
||||
* @addtogroup TOUCHPAD
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
#include "hal.h"
|
||||
#include "touchpad.h"
|
||||
|
||||
#if GFX_USE_TOUCHPAD || defined(__DOXYGEN__)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local definitions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* put needed macros for your interface/driver here.
|
||||
* when using SPI, macros for setting and clearing CS line
|
||||
*/
|
||||
#define TP_CS_HIGH palSetPad(TP_CS_PORT, TP_CS)
|
||||
#define TP_CS_LOW palClearPad(TP_CS_PORT, TP_CS)
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
TOUCHPADDriver Touchpad;
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver interrupt handlers. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* ---- Required Routines ---- */
|
||||
|
||||
/**
|
||||
* @brief Low level Touchpad driver initialization.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void tp_lld_init(TOUCHPADDriver *tp) {
|
||||
/* do communicate with the touchpad controller
|
||||
* to do any inizialisation (mostly spiStart())
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reads out the X direction.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_x(void) {
|
||||
uint16_t x;
|
||||
|
||||
/* do communicate with the touchpad controller
|
||||
* to receive the X-Coordinate
|
||||
*/
|
||||
x = 0;
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief Reads out the Y direction.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_y(void) {
|
||||
uint16_t y;
|
||||
|
||||
/* do communicate with the touchpad controller
|
||||
* to receive the Y-Coordinate
|
||||
*/
|
||||
y = 0;
|
||||
|
||||
return y;
|
||||
}
|
||||
|
||||
/* ---- Optional Routines ---- */
|
||||
#if TOUCHPAD_HAS_IRQ || defined(__DOXYGEN__)
|
||||
/*
|
||||
* @brief for checking if touchpad is pressed or not.
|
||||
*
|
||||
* @return 1 if pressed / 0 if not pressed
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint8_t tp_lld_irq(void) {
|
||||
/* do return PEN IRQ state if your
|
||||
* touchpad controller does have any
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TOUCHPAD_HAS_PRESSURE || defined(__DOXYGEN__)
|
||||
/*
|
||||
* @brief Reads out the Z direction / pressure.
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
uint16_t tp_lld_read_z(void) {
|
||||
/* return the pressure */
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GFX_USE_TOUCHPAD */
|
||||
/** @} */
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
# List the required driver.
|
||||
GFXSRC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE/touchpad_lld.c
|
||||
|
||||
# Required include directories
|
||||
GFXINC += $(GFXLIB)/drivers/touchpad/touchpadYOURDEVICE
|
||||
|
Loading…
Add table
Reference in a new issue