Sean Wilson / Mbed OS AdiSense1000_V21

Fork of AdiSense1000 by PoC_Team

Files at this revision

API Documentation at this revision

Comitter:
kevin1990
Date:
Thu May 17 10:34:45 2018 +0100
Parent:
26:12d0204be712
Child:
32:262fc8aeb486
Commit message:
Adding host library and example code for v1.3 release

Changed in this revision

Doxyfile Show annotated file Show diff for this revision Revisions of this file
README.md Show annotated file Show diff for this revision Revisions of this file
cjc0_thermistor-10k-ntc_config.c Show annotated file Show diff for this revision Revisions of this file
common/utils.c Show annotated file Show diff for this revision Revisions of this file
common/utils.h Show annotated file Show diff for this revision Revisions of this file
current_honeywellPressure_config.c Show annotated file Show diff for this revision Revisions of this file
doc/README.md Show annotated file Show diff for this revision Revisions of this file
doc/adsns1000.md Show annotated file Show diff for this revision Revisions of this file
doc/key_topics.md Show annotated file Show diff for this revision Revisions of this file
doc/porting.md Show annotated file Show diff for this revision Revisions of this file
i2c0_honeywellHumidicon_config.c Show annotated file Show diff for this revision Revisions of this file
i2c0_onsemiNOA1305_config.c Show annotated file Show diff for this revision Revisions of this file
i2c0_sensirionSHT3X_config.c Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_1000/adi_sense_1000_api.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_1000/adi_sense_1000_config.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_1000/adi_sense_1000_host_comms.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_1000/adi_sense_1000_lut_data.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_1000/adi_sense_1000_sensor_types.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_api.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_config_types.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_gpio.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_log.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_platform.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_spi.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_time.h Show annotated file Show diff for this revision Revisions of this file
inc/adi_sense_types.h Show annotated file Show diff for this revision Revisions of this file
inc/mbed/adi_sense_platform.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
multichannel_continuous_config.c Show annotated file Show diff for this revision Revisions of this file
multichannel_multicycle_config.c Show annotated file Show diff for this revision Revisions of this file
multichannel_singlecycle_config.c Show annotated file Show diff for this revision Revisions of this file
sensor0_diode_2c_config.c Show annotated file Show diff for this revision Revisions of this file
sensor0_microphone_config.c Show annotated file Show diff for this revision Revisions of this file
sensor0_rtd-2w-pt100_config.c Show annotated file Show diff for this revision Revisions of this file
sensor1_diode_3c_config.c Show annotated file Show diff for this revision Revisions of this file
sensor1_rtd-3w-pt100_config.c Show annotated file Show diff for this revision Revisions of this file
sensor1_typeK_cjc1_config.c Show annotated file Show diff for this revision Revisions of this file
sensor2_bridge-6w-pressure_config.c Show annotated file Show diff for this revision Revisions of this file
sensor2_typeT_cjc0_config.c Show annotated file Show diff for this revision Revisions of this file
sensor3_thermistor-10k-ntc_config.c Show annotated file Show diff for this revision Revisions of this file
sensor3_typeJ_cjc0_config.c Show annotated file Show diff for this revision Revisions of this file
spi0_adiAdxl355_config.c Show annotated file Show diff for this revision Revisions of this file
spi0_adiAdxl362_config.c Show annotated file Show diff for this revision Revisions of this file
spi0_honeywellTrustability_config.c Show annotated file Show diff for this revision Revisions of this file
src/adi_sense_1000.c Show annotated file Show diff for this revision Revisions of this file
src/adi_sense_1000/ADISENSE1000_REGISTERS.h Show annotated file Show diff for this revision Revisions of this file
src/adi_sense_1000/ADISENSE1000_REGISTERS_typedefs.h Show annotated file Show diff for this revision Revisions of this file
src/crc16.c Show annotated file Show diff for this revision Revisions of this file
src/crc16.h Show annotated file Show diff for this revision Revisions of this file
src/mbed/adi_sense_gpio.cpp Show annotated file Show diff for this revision Revisions of this file
src/mbed/adi_sense_log.cpp Show annotated file Show diff for this revision Revisions of this file
src/mbed/adi_sense_spi.cpp Show annotated file Show diff for this revision Revisions of this file
src/mbed/adi_sense_time.cpp Show annotated file Show diff for this revision Revisions of this file
uart_cozirCO2_config.c Show annotated file Show diff for this revision Revisions of this file
voltage_honeywellPressure_config.c Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Doxyfile	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,2432 @@
+# Doxyfile 1.8.11
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = "ADISENSE Host Library"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. 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       =
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES                += degreesC="@htmlonly &#176C @endhtmlonly"
+ALIASES                += degreesF="@htmlonly &#176F @endhtmlonly"
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: 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,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. 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: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled 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.
+# The default value is: YES.
+
+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 putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+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
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: 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 will make
+# doxygen to 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.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef 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, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# 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 appears 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. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: 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.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This 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. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = src inc doc
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl,
+# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js.
+
+FILE_PATTERNS          =
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE                = \
+                       src/adi_sense_1000/ \
+                       inc/registers/
+
+
+# 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.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE = README.md
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = NO
+
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse-libclang=ON option for CMake.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+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 left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are 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 therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+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
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
+
+# 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.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+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.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+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 (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_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.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values 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.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
+# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+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. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = YES
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             = \
+                       __attribute__(x)=
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. 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. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: YES.
+
+HAVE_DOT               = YES
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates 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.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTNAME           = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is 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.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: 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).
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+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.
+# Note: 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.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag 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.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_CLEANUP            = YES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,87 @@
+# Getting started with Blinky on mbed OS
+
+This guide reviews the steps required to get Blinky working on an mbed OS platform.
+
+Please install [mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli).
+
+## Import the example application
+
+From the command-line, import the example:
+
+```
+mbed import mbed-os-example-blinky
+cd mbed-os-example-blinky
+```
+
+### Now compile
+
+Invoke `mbed compile`, and specify the name of your platform and your favorite toolchain (`GCC_ARM`, `ARM`, `IAR`). For example, for the ARM Compiler 5:
+
+```
+mbed compile -m K64F -t ARM
+```
+
+Your PC may take a few minutes to compile your code. At the end, you see the following result:
+
+```
+[snip]
++----------------------------+-------+-------+------+
+| Module                     | .text | .data | .bss |
++----------------------------+-------+-------+------+
+| Misc                       | 13939 |    24 | 1372 |
+| core/hal                   | 16993 |    96 |  296 |
+| core/rtos                  |  7384 |    92 | 4204 |
+| features/FEATURE_IPV4      |    80 |     0 |  176 |
+| frameworks/greentea-client |  1830 |    60 |   44 |
+| frameworks/utest           |  2392 |   512 |  292 |
+| Subtotals                  | 42618 |   784 | 6384 |
++----------------------------+-------+-------+------+
+Allocated Heap: unknown
+Allocated Stack: unknown
+Total Static RAM memory (data + bss): 7168 bytes
+Total RAM memory (data + bss + heap + stack): 7168 bytes
+Total Flash memory (text + data + misc): 43402 bytes
+Image: .\.build\K64F\ARM\mbed-os-example-blinky.bin
+```
+
+### Program your board
+
+1. Connect your mbed device to the computer over USB.
+1. Copy the binary file to the mbed device.
+1. Press the reset button to start the program.
+
+The LED on your platform turns on and off.
+
+## Export the project to Keil MDK, and debug your application
+
+From the command-line, run the following command:
+
+```
+mbed export -m K64F -i uvision
+```
+
+To debug the application:
+
+1. Start uVision.
+1. Import the uVision project generated earlier.
+1. Compile your application, and generate an `.axf` file.
+1. Make sure uVision is configured to debug over CMSIS-DAP (From the Project menu > Options for Target '...' > Debug tab > Use CMSIS-DAP Debugger).
+1. Set breakpoints, and start a debug session.
+
+![Image of uVision](img/uvision.png)
+
+## Troubleshooting
+
+1. Make sure `mbed-cli` is working correctly and its version is `>1.0.0`
+
+ ```
+ mbed --version
+ ```
+
+ If not, you can update it:
+
+ ```
+ pip install mbed-cli --upgrade
+ ```
+
+2. If using Keil MDK, make sure you have a license installed. [MDK-Lite](http://www.keil.com/arm/mdk.asp) has a 32 KB restriction on code size.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cjc0_thermistor-10k-ntc_config.c	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,79 @@
+/*
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
+#include "inc/adi_sense_config_types.h"
+
+ADI_SENSE_CONFIG cjc0_thermistor_10k_ntc_config = {
+    .versionId = { .major = 1, .minor = 4 },
+    .productId = ADI_SENSE_PRODUCT_ID_ADSNS1000,
+    .adisense1000 = {
+        .power = {
+            .powerMode = ADI_SENSE_1000_POWER_MODE_FULL,
+        },
+        .measurement = {
+            .operatingMode = ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE,
+            .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
+        },
+        .channels = {
+            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
+                .enableChannel = true,
+                .disablePublishing = false,
+                .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
+                .measurementsPerCycle = 10,
+                .extraSettlingTime = 0,
+                .adcChannelConfig = {
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_A_10K_DEF_L1,
+                    .gain = ADI_SENSE_1000_ADC_GAIN_1X,
+                    .filter = {
+                        .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
+                    },
+                    .reference = {
+                        .type = ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_INTERNAL_2,
+                        .disableBuffer = true,
+                    },
+                    .enableVbias = false,
+                },
+            },
+        },
+    },
+};
--- a/common/utils.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/common/utils.c	Thu May 17 10:34:45 2018 +0100
@@ -26,6 +26,8 @@
             ADI_SENSE_LOG_INFO("\tActive Configuration Errors - ATTENTION REQUIRED");
         if (pStatus->deviceStatus & ADI_SENSE_DEVICE_STATUS_LUT_ERROR)
             ADI_SENSE_LOG_INFO("\tActive Look-Up Table Errors - ATTENTION REQUIRED");
+        if (pStatus->deviceStatus & ADI_SENSE_DEVICE_STATUS_EXT_FLASH_ERROR)
+            ADI_SENSE_LOG_INFO("\tActive External Flash Errors - ATTENTION REQUIRED");
 
         if (pStatus->deviceStatus & ADI_SENSE_DEVICE_STATUS_ERROR)
         {
@@ -49,14 +51,6 @@
                     ADI_SENSE_LOG_INFO("\t\t\tSupply Monitor fault detected");
                 if (pStatus->diagnosticsStatus & ADI_SENSE_DIAGNOSTICS_STATUS_SUPPLY_CAP_ERROR)
                     ADI_SENSE_LOG_INFO("\t\t\tSupply Regulator Capacitor fault detected");
-                if (pStatus->diagnosticsStatus & ADI_SENSE_DIAGNOSTICS_STATUS_AINM_UV_ERROR)
-                    ADI_SENSE_LOG_INFO("\t\t\tNegative Analog Input Under-Voltage fault detected");
-                if (pStatus->diagnosticsStatus & ADI_SENSE_DIAGNOSTICS_STATUS_AINM_OV_ERROR)
-                    ADI_SENSE_LOG_INFO("\t\t\tNegative Analog Input Over-Voltage fault detected");
-                if (pStatus->diagnosticsStatus & ADI_SENSE_DIAGNOSTICS_STATUS_AINP_UV_ERROR)
-                    ADI_SENSE_LOG_INFO("\t\t\tPositive Analog Input Under-Voltage fault detected");
-                if (pStatus->diagnosticsStatus & ADI_SENSE_DIAGNOSTICS_STATUS_AINP_OV_ERROR)
-                    ADI_SENSE_LOG_INFO("\t\t\tPositive Analog Input Over-Voltage fault detected");
                 if (pStatus->diagnosticsStatus & ADI_SENSE_DIAGNOSTICS_STATUS_CONVERSION_ERROR)
                     ADI_SENSE_LOG_INFO("\t\t\tInternal ADC Conversions fault detected");
                 if (pStatus->diagnosticsStatus & ADI_SENSE_DIAGNOSTICS_STATUS_CALIBRATION_ERROR)
@@ -101,10 +95,6 @@
                     ADI_SENSE_LOG_INFO("\t\t\tSensor Not Ready alert detected");
                 if (pStatus->channelAlerts[i] & ADI_SENSE_CHANNEL_ALERT_COMP_NOT_READY)
                     ADI_SENSE_LOG_INFO("\t\t\tCompensation Channel Not Ready alert detected");
-                if (pStatus->channelAlerts[i] & ADI_SENSE_CHANNEL_ALERT_UNDER_VOLTAGE)
-                    ADI_SENSE_LOG_INFO("\t\t\tUnder Voltage alert detected");
-                if (pStatus->channelAlerts[i] & ADI_SENSE_CHANNEL_ALERT_OVER_VOLTAGE)
-                    ADI_SENSE_LOG_INFO("\t\t\tOver Voltage alert detected");
                 if (pStatus->channelAlerts[i] & ADI_SENSE_CHANNEL_ALERT_LUT_UNDER_RANGE)
                     ADI_SENSE_LOG_INFO("\t\t\tUnder Look-Up Table Range alert detected");
                 if (pStatus->channelAlerts[i] & ADI_SENSE_CHANNEL_ALERT_LUT_OVER_RANGE)
@@ -116,17 +106,33 @@
 
 void utils_printSamples(
     ADI_SENSE_DATA_SAMPLE *pSampleBuffer,
-    uint32_t nNumSamples)
+    uint32_t nNumSamples,
+    ADI_SENSE_MEASUREMENT_MODE eMeasurementMode)
 {
+    bool fftMode = (eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_FFT);
+
     for (uint32_t i = 0; i < nNumSamples; i++)
     {
-        ADI_SENSE_LOG_INFO("Sample # %2d Channel # %2d :: Raw %8d  :: Processed %.7f :: flags: %s %s",
-                           i+1,
-                           pSampleBuffer[i].channelId,
-                           pSampleBuffer[i].rawValue,
-                           pSampleBuffer[i].processedValue,
-                           pSampleBuffer[i].status & ADI_SENSE_DEVICE_STATUS_ERROR ? "ERROR" : "",
-                           pSampleBuffer[i].status & ADI_SENSE_DEVICE_STATUS_ALERT ? "ALERT" : "");
+        if (fftMode)
+        {
+            ADI_SENSE_LOG_INFO("Sample # %2d Channel # %2d :: Bin/Raw %8d  :: Magnitude %e :: flags:%s%s",
+                               i+1,
+                               pSampleBuffer[i].channelId,
+                               pSampleBuffer[i].rawValue,
+                               pSampleBuffer[i].processedValue,
+                               pSampleBuffer[i].status & ADI_SENSE_DEVICE_STATUS_ERROR ? " ERROR" : "",
+                               pSampleBuffer[i].status & ADI_SENSE_DEVICE_STATUS_ALERT ? " ALERT" : "");
+        }
+        else
+        {
+            ADI_SENSE_LOG_INFO("Sample # %2d Channel # %2d :: Raw %8d  :: Processed %f :: flags:%s%s",
+                               i+1,
+                               pSampleBuffer[i].channelId,
+                               pSampleBuffer[i].rawValue,
+                               pSampleBuffer[i].processedValue,
+                               pSampleBuffer[i].status & ADI_SENSE_DEVICE_STATUS_ERROR ? " ERROR" : "",
+                               pSampleBuffer[i].status & ADI_SENSE_DEVICE_STATUS_ALERT ? " ALERT" : "");
+        }
     }
 }
 
@@ -217,31 +223,30 @@
         return res;
 
     /*
-     * Retrieve the number of samples per cycle, per DATAREADY pulse, etc. for this configuration.
+     * Retrieve the number of samples per cycle, per DATAREADY pulse, etc. for
+     * this configuration.
      */
     ADI_SENSE_1000_OPERATING_MODE eOperatingMode;
     ADI_SENSE_1000_DATAREADY_MODE eDataReadyMode;
     uint32_t nSamplesPerDataready;
     uint32_t nSamplesPerCycle;
+    uint8_t nBytesPerSample;
     res = adi_sense_1000_GetDataReadyModeInfo(hDevice,
                                               eMeasurementMode,
                                               &eOperatingMode,
                                               &eDataReadyMode,
                                               &nSamplesPerDataready,
-                                              &nSamplesPerCycle);
+                                              &nSamplesPerCycle,
+                                              &nBytesPerSample);
     if (res != ADI_SENSE_SUCCESS)
         return res;
 
     /*
      * Allocate a buffer to store the samples retrieved on each DATAREADY pulse
-     * However, if the DATAREADY pulse is per-conversion, allocate a bigger buffer
-     * to accumulate a full cycle of samples before printing them
      */
     ADI_SENSE_DATA_SAMPLE *pSampleBuffer;
-    if (eDataReadyMode == ADI_SENSE_1000_DATAREADY_PER_CONVERSION)
-        pSampleBuffer = malloc(sizeof(ADI_SENSE_DATA_SAMPLE) * nSamplesPerCycle);
-    else
-        pSampleBuffer = malloc(sizeof(ADI_SENSE_DATA_SAMPLE) * nSamplesPerDataready);
+    pSampleBuffer = malloc(sizeof(ADI_SENSE_DATA_SAMPLE) *
+                           nSamplesPerDataready);
     if (pSampleBuffer == NULL)
     {
         ADI_SENSE_LOG_ERROR("Failed to allocate sample buffer");
@@ -261,53 +266,58 @@
     /*
      * Loop continuously unless operating mode is single-cycle
      */
-    do {
+    uint32_t nSampleCount = 0;
+    while (true)
+    {
         ADI_SENSE_STATUS status;
-        uint32_t nCurrentSamples;
         uint32_t nReturned;
-        nCurrentSamples = 0;
 
         /*
-         * Accumulate the samples from a cycle and print them
-         * NOTE: requires a sufficient idle time between cycles to allow printing to occur
+         * Wait until the next batch of 1 or more samples is ready, continuously
+         * checking DATAREADY until it is asserted
          */
-        do {
+        while (! (bDataReady || bError))
+            ;
+
+        if (!bError)
+        {
             /*
-             * Wait for the cycle to complete, continuously checking DATAREADY until it is asserted
+             * Get data samples from the measurement cycle, if no error has occurred
              */
-            while (! (bDataReady || bError))
-                ;
-
-            if (! bError)
+            bDataReady = false;
+            res = adi_sense_GetData(hDevice, eMeasurementMode, pSampleBuffer,
+                                    nBytesPerSample, nSamplesPerDataready,
+                                    &nReturned);
+            if (res != ADI_SENSE_SUCCESS)
             {
-                /*
-                 * Retrieve the data samples from the measurement cycle, if no error has occurred
-                 */
-                bDataReady = false;
-                res = adi_sense_GetData(hDevice, eMeasurementMode, &pSampleBuffer[nCurrentSamples], nSamplesPerDataready, &nReturned);
-                nCurrentSamples += nReturned;
-                if (res != ADI_SENSE_SUCCESS)
+                if (res == ADI_SENSE_INCOMPLETE)
                 {
-                    if (res == ADI_SENSE_INCOMPLETE)
-                    {
-                        /* For this case, let's get the device status and print
-                         * any samples we did get */
-                        ADI_SENSE_LOG_WARN("Failed to retrieve all requested data samples");
-                        break;
-                    }
-                    else
-                    {
-                        ADI_SENSE_LOG_WARN("Failed to retrieve data samples from device");
-                        return res;
-                    }
+                    /*
+                     * This is expected in cases where cycleSkipCount may
+                     * be non-zero for some channels, resulting in
+                     * variable-length sequences
+                     */
+                    ADI_SENSE_LOG_DEBUG("Retrieved %u of %u requested data samples",
+                                        nReturned, nSamplesPerDataready);
+                }
+                else
+                {
+                    ADI_SENSE_LOG_WARN("Failed to get data samples from device");
+                    return res;
                 }
             }
-        } while (!bError && (nCurrentSamples < nSamplesPerCycle));
 
-        /*
-         * Display the data samples
-         */
-        utils_printSamples(pSampleBuffer, nCurrentSamples);
+            /*
+             * Display the data samples.
+             *
+             * NOTE: this requires a sufficient idle time between subsequent
+             * DATAREADY pulses to allow printing to occur.  Otherwise,
+             * subsequent samples may be missed if not retrieved promptly when
+             * the next DATAREADY assertion occurs.
+             */
+            utils_printSamples(pSampleBuffer, nReturned, eMeasurementMode);
+            nSampleCount += nReturned;
+        }
 
         /*
          * Check and print device status if errors/alerts have been triggered
@@ -331,7 +341,34 @@
                     break;
             }
         }
-    } while (eOperatingMode != ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE);
+
+        if (eOperatingMode == ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE)
+        {
+            /*
+             * In this mode, break out of the loop when the measurement command
+             * has completed.
+             *
+             * One option is to check for the expected number of samples to be
+             * returned for the cycle.  However, cycles may have variable-length
+             * sequences if the cycleSkipCount option is non-zero for any of the
+             * channels.
+             *
+             * So, instead, we check for the command-running status, which
+             * will de-assert in this mode when the measurement command has
+             * completed a single cycle.
+             */
+            bool_t bCommandRunning;
+            res = adi_sense_GetCommandRunningState(hDevice, &bCommandRunning);
+            if (res != ADI_SENSE_SUCCESS)
+            {
+                ADI_SENSE_LOG_ERROR("Failed to get command-running status");
+                return res;
+            }
+
+            if (!bCommandRunning && !bDataReady)
+                break;
+        }
+    }
 
     res = adi_sense_StopMeasurement(hDevice);
     if (res != ADI_SENSE_SUCCESS)
@@ -348,4 +385,3 @@
 
     return ADI_SENSE_SUCCESS;
 }
-
--- a/common/utils.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/common/utils.h	Thu May 17 10:34:45 2018 +0100
@@ -15,7 +15,8 @@
 /* Utility function to print data samples read from the ADI Sense device */
 void utils_printSamples(
     ADI_SENSE_DATA_SAMPLE *pSampleBuffer,
-    uint32_t numSamples);
+    uint32_t nNumSamples,
+    ADI_SENSE_MEASUREMENT_MODE eMeasurementMode);
 
 /* Utility function to register callbacks for ADI Sense device notification signals  */
 ADI_SENSE_RESULT utils_registerCallbacks(
@@ -43,4 +44,3 @@
 #endif
 
 #endif /* __UTILS_H__ */
-
--- a/current_honeywellPressure_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/current_honeywellPressure_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   current_honeywellPressure_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,13 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ *
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG current_honeywellPressure_config = {
@@ -53,27 +55,6 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
                 .enableChannel = true,
                 .disablePublishing = false,
@@ -81,7 +62,7 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
-                    .sensor = ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_HONEYWELL_PX2,
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_A_DEF_L1,
                     .gain = ADI_SENSE_1000_ADC_GAIN_2X,
                     .filter = {
                         .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
@@ -93,22 +74,6 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/doc/README.md	Mon Mar 26 14:50:05 2018 +0000
+++ b/doc/README.md	Thu May 17 10:34:45 2018 +0100
@@ -32,4 +32,3 @@
   topics such as processor configuration and dynamic characteristics
 - [Porting Guide](doc/porting.md) includes useful information for anyone who wishes
   to port the ADISENSE Host Library to a new host processor platform
-
--- a/doc/adsns1000.md	Mon Mar 26 14:50:05 2018 +0000
+++ b/doc/adsns1000.md	Thu May 17 10:34:45 2018 +0100
@@ -79,8 +79,10 @@
     - Intended for connecting temperature measurement sensors for temperature
       compensation
     - Analog sensor types currently supported:
-      - 2-wire RTD PT100
-      - 2-wire RTD PT1000
+      - 2-wire RTD PT100 temperature sensors
+      - 2-wire RTD PT1000 temperature sensors
+      - Thermistors 10k NTC temperature sensors
+      - Diode temperature sensors
   + SENSOR 0-3
     - Intended for connecting a wide variety of uncompensated analog sensors
     - Analog sensor types currently supported:
@@ -89,6 +91,7 @@
       - Type-T/K/J Thermocouple temperature sensors
       - 4/6-wire bridge transducers
       - Thermistors 10k NTC temperature sensors
+      - Diode temperature sensors
   + I\_MEAS
     - Intended for connecting compensated current output 0-20mA analog sensors
   + V\_MEAS
@@ -99,11 +102,17 @@
     - SPI digital sensor types currently supported:
       - Honeywell TruStability pressure sensors
       - Analog Devices ADXL362 3-Axis MEMS accelerometer
+      - Analog Devices ADXL355 3-Axis MEMS accelerometer
   + I2C
-    - Intended for connecting support I2C digital sensors
+    - Intended for connecting supported I2C digital sensors
     - I2C digital sensor types currently supported:
       - Honeywell HumidIcon HIH9000 Series humidity sensors
       - Sensirion SHT3x Series humidity sensors
+      - ON-Semiconductor NOA1305 ambient light sensor
+  + UART
+    - Intended for connecting supported UART digital sensors
+    - UART digital sensor types currently supported:
+      - Cozir CO2 sensors
 
 ## Ancillary Interfaces {#interfaces_ancillary}
 * External Reference Inputs
@@ -119,4 +128,3 @@
     - Analog Supply Voltage
     - The voltage on VDD is referenced to GND
     - The differential between VDD and GND must be between 3 V and 3.6 V
-
--- a/doc/key_topics.md	Mon Mar 26 14:50:05 2018 +0000
+++ b/doc/key_topics.md	Thu May 17 10:34:45 2018 +0100
@@ -174,33 +174,57 @@
 in later sections below.
 
 ## Sequence Order {#measurementcycles_sequence}
-The sequence is constructed according to which channels are enabled and how many
-measurements must be performed per channel.  The arrangement is similar to
-round-robin scheduling - a measurement is carried out on each enabled channel,
-in ascending channel order, and then the loop is repeated until the requested
-number of measurements on each channel has been satisfied.
+The sequence is constructed according to a number of configurable parameters:
+- which channels are enabled
+- number of measurements to be performed per channel
+- channel priorities
+- cycle type selection
+
+When the selected cycle type is @ref ADI_SENSE_1000_CYCLE_TYPE_FULL,
+the full number of requested measurements is carried out on a channel before
+advancing to the next channel in the sequence.  Channels are visited in
+priority/ascending order.
+
+When the selected cycle type is @ref ADI_SENSE_1000_CYCLE_TYPE_SWITCH,
+the arrangement is similar to round-robin scheduling - a measurement is carried
+out on each enabled channel, in priority/ascending channel order, and then the
+loop is repeated until the requested number of measurements on each channel has
+been satisfied.
 
-For example, lets say channels [0, 3, 4, 5] are enabled, with
-measurementsPerCycle set as follows:
+By default, channels are arranged in the measurement sequence based on ascending
+order of channel ID.  However, a priority-level may be specified per channel to
+force a different ordering of the channels, with higher-priority channels
+appearing before lower-priority channels. Channels with equal priority are
+ordered by ascending order of channel ID.  Lower numbers indicate higher
+priority, with 0 being the highest.
 
-channelId | measurementsPerCycle
---------- | --------------------
-    CJC_1 | 4
- SENSOR_0 | 2
-    I2C_1 | 3
-    SPI_0 | 1
+For example, lets say channels [0, 3, 4, 5] are enabled, with cycleType as @ref
+ADI_SENSE_1000_CYCLE_TYPE_SWITCH, and measurementsPerCycle and priority
+(0=highest) set as follows:
+
+channelId | priority | measurementsPerCycle
+--------- | -------- | --------------------
+    CJC_1 | 1        | 4
+ SENSOR_0 | 2        | 2
+    I2C_1 | 0        | 3
+    SPI_0 | 2        | 1
 
 The length of the sequence would be 10 measurements in total, and the order in
 which the channel measurements appear in the sequence would look like this:
 
-| **CJC_1** | **SENSOR_0** | **I2C_1** | **SPI_0** | **CJC_1** | **SENSOR_0** | **I2C_1** | **CJC_1** | **I2C_1** | **CJC_1** |
+| **I2C_1** | **CJC_1** | **SENSOR_0** | **SPI_0** | **I2C_1** | **CJC_1** | **SENSOR_0** | **I2C_1** | **CJC_1** | **CJC_1** |
 
 When measurement data samples are retrieved from the ADISENSE by the host
 application, this is the order in which those data samples will appear.
 
-The ADSNS1000 module has 11 measurement ports however when ADXL used on the SPI
-port this equates to 3 measurements. The ADSNS1000 allows for a maximum of 128
-measurementsPerCycle. Therefore a single cycle can produce a maximum of 1664
+Changing the cycleType to @ref ADI_SENSE_1000_CYCLE_TYPE_FULL in the example above
+would generate the following sequence:
+
+| **I2C_1** | **I2C_1** | **I2C_1** | **CJC_1** | **CJC_1** | **CJC_1** | **CJC_1** | **SENSOR_0** | **SENSOR_0** | **SPI_0** |
+
+The ADSNS1000 module has 11 measurement ports; however, when ADXL used on the
+SPI port this equates to 3 measurements. The ADSNS1000 allows for a maximum of
+128 measurementsPerCycle. Therefore a single cycle can produce a maximum of 1664
 measurements. In other words, the maximum length of the sequence is 1664.
 
 ## Sequence Timing {#measurementcycles_timing}
@@ -448,4 +472,3 @@
 the top-level header and appends each table and also fills some fields within
 the table descriptors (e.g. length, CRC).  Please refer to the "user_lut_data"
 application example for an illustration of how this function can be used.
-
--- a/doc/porting.md	Mon Mar 26 14:50:05 2018 +0000
+++ b/doc/porting.md	Thu May 17 10:34:45 2018 +0100
@@ -18,4 +18,3 @@
 in the following sub-directory within the ADISENSE Host Library source package:
 
     <path_to_library>/host/src/mbed/
-
--- a/i2c0_honeywellHumidicon_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/i2c0_honeywellHumidicon_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   i2c0_honeywellHumidicon_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG i2c0_honeywellHumidicon_config = {
@@ -53,30 +54,6 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
                 .enableChannel = true,
                 .disablePublishing = false,
@@ -84,23 +61,10 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 36500,
                 .i2cChannelConfig = {
-                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_HONEYWELL_HUMIDICON,
+                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_DEF_L1,
                     .deviceAddress = 0x27,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i2c0_onsemiNOA1305_config.c	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,87 @@
+/*
+CONFIDENTIAL AND PROPRIETARY INFORMATION
+
+Copyright (c) 2018 Emutex Ltd. All rights reserved.
+This software and documentation contain confidential and
+proprietary information that is the property of
+Emutex Ltd. The software and documentation are
+furnished under a license agreement and may be used
+or copied only in accordance with the terms of the license
+agreement. No part of the software and documentation
+may be reproduced, transmitted, or translated, in any
+form or by any means, electronic, mechanical, manual,
+optical, or otherwise, without prior written permission
+of Emutex Ltd., or as expressly provided by the license agreement.
+Reverse engineering is prohibited, and reproduction,
+disclosure or use without specific written authorization
+of Emutex Ltd. is strictly forbidden.
+ *
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
+#include "inc/adi_sense_config_types.h"
+
+ADI_SENSE_CONFIG i2c0_onsemiNOA1305_config = {
+    .versionId = { .major = 1, .minor = 4 },
+    .productId = ADI_SENSE_PRODUCT_ID_ADSNS1000,
+    .adisense1000 = {
+        .power = {
+            .powerMode = ADI_SENSE_1000_POWER_MODE_FULL,
+        },
+        .measurement = {
+            .operatingMode = ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE,
+            .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
+        },
+        .channels = {
+            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
+                .enableChannel = true,
+                .disablePublishing = false,
+                .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementsPerCycle = 10,
+                .extraSettlingTime = 50000,
+                .i2cChannelConfig = {
+                    .sensor = ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_DEF_L1,
+                    .deviceAddress = 0x39,
+                },
+            },
+        },
+    },
+};
--- a/i2c0_sensirionSHT3X_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/i2c0_sensirionSHT3X_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   i2c0_sensirionSHT3X_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG i2c0_sensirionSHT3X_config = {
@@ -53,30 +54,6 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
                 .enableChannel = true,
                 .disablePublishing = false,
@@ -84,23 +61,10 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 15000,
                 .i2cChannelConfig = {
-                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_SENSIRION_SHT3X,
+                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_DEF_L1,
                     .deviceAddress = 0x44,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/inc/adi_sense_1000/adi_sense_1000_api.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_1000/adi_sense_1000_api.h	Thu May 17 10:34:45 2018 +0100
@@ -1,8 +1,20 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_api.h
- * @brief:  ADSNS1000 Host Library Application Programming Interface (API)
- *-----------------------------------------------------------------------------
+/*
+CONFIDENTIAL AND PROPRIETARY INFORMATION
+
+Copyright (c) 2018 Emutex Ltd. All rights reserved.
+This software and documentation contain confidential and
+proprietary information that is the property of
+Emutex Ltd. The software and documentation are
+furnished under a license agreement and may be used
+or copied only in accordance with the terms of the license
+agreement. No part of the software and documentation
+may be reproduced, transmitted, or translated, in any
+form or by any means, electronic, mechanical, manual,
+optical, or otherwise, without prior written permission
+of Emutex Ltd., or as expressly provided by the license agreement.
+Reverse engineering is prohibited, and reproduction,
+disclosure or use without specific written authorization
+of Emutex Ltd. is strictly forbidden.
  */
 
 /*
@@ -40,6 +52,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_api.h
+ * @brief:  ADSNS1000 Host Library Application Programming Interface (API)
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_1000_API_H__
 #define __ADI_SENSE_1000_API_H__
 
@@ -210,6 +229,27 @@
     uint32_t nMeasurementsPerCycle);
 
 /*!
+ * @brief Update priority level for a specific channel.
+ *
+ * @param[in] hDevice    ADI Sense device context handle
+ * @param[in] eChannelId Selects the channel to be updated
+ * @param[in] ePriority  Specifies the channel priority level
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *
+ * @details Translates configuration details provided into device-specific
+ *          register settings and updates device configuration registers.
+ *          Allows individual channels to be dynamically re-prioritised.
+ *
+ * @note Settings are not applied until adi_sense_ApplyConfigUpdates() is called
+ */
+ADI_SENSE_RESULT adi_sense_1000_SetChannelPriority(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_PRIORITY ePriority);
+
+/*!
  * @brief Update the measurement threshold limits for a specified channel.
  *
  * @param[in] hDevice             ADISENSE device context handle
@@ -240,6 +280,27 @@
     float32_t fHighThresholdLimit,
     float32_t fLowThresholdLimit);
 
+
+/*!
+ * @brief Set a sensor specific parameter for a specified channel.
+ *
+ * @param[in] hDevice             ADI Sense device context handle
+ * @param[in] eChannelId          Selects the channel to be updated
+ * @param[in] fSensorParam        Sensor specific parameter
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *
+ * @details Translates configuration details provided into device-specific
+ *          register settings and updates device configuration registers.
+ *          Allows optional sensor-specific parameter to be specified
+ *
+ * @note Settings are not applied until adi_sense_ApplyConfigUpdates() is called
+ */
+ADI_SENSE_RESULT adi_sense_1000_SetSensorParameter(
+     ADI_SENSE_DEVICE_HANDLE hDevice,
+     ADI_SENSE_1000_CHANNEL_ID eChannelId,
+     float32_t fSensorParam);
 /*!
  * @brief Update the extra settling time for a specified channel.
  *
@@ -344,6 +405,7 @@
  *                                   available when DATAREADY is asserted
  * @param[out] pnSamplesPerCycle     Pointer to return the calculated number of samples
  *                                   produced per measurement cycle
+ * @param[out] pnBytesPerSample      Pointer to return the size, in bytes, of each sample
  *
  * @return Status
  *         - #ADI_SENSE_SUCCESS Call completed successfully.
@@ -360,7 +422,8 @@
     ADI_SENSE_1000_OPERATING_MODE * const peOperatingMode,
     ADI_SENSE_1000_DATAREADY_MODE * const peDataReadyMode,
     uint32_t                      * const pnSamplesPerDataready,
-    uint32_t                      * const pnSamplesPerCycle);
+    uint32_t                      * const pnSamplesPerCycle,
+    uint8_t                       * const pnBytesPerSample);
 
 #ifdef __cplusplus
 }
@@ -371,4 +434,3 @@
  */
 
 #endif /* __ADI_SENSE_1000_API_H__ */
-
--- a/inc/adi_sense_1000/adi_sense_1000_config.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_1000/adi_sense_1000_config.h	Thu May 17 10:34:45 2018 +0100
@@ -1,8 +1,20 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_1000_config.h
- * @brief:  Configuration type definitions for ADSNS1000.
- *-----------------------------------------------------------------------------
+/*
+CONFIDENTIAL AND PROPRIETARY INFORMATION
+
+Copyright (c) 2018 Emutex Ltd. All rights reserved.
+This software and documentation contain confidential and
+proprietary information that is the property of
+Emutex Ltd. The software and documentation are
+furnished under a license agreement and may be used
+or copied only in accordance with the terms of the license
+agreement. No part of the software and documentation
+may be reproduced, transmitted, or translated, in any
+form or by any means, electronic, mechanical, manual,
+optical, or otherwise, without prior written permission
+of Emutex Ltd., or as expressly provided by the license agreement.
+Reverse engineering is prohibited, and reproduction,
+disclosure or use without specific written authorization
+of Emutex Ltd. is strictly forbidden.
  */
 
 /*
@@ -44,6 +56,13 @@
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_1000_config.h
+ * @brief:  Configuration type definitions for ADSNS1000.
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_1000_CONFIG_H__
 #define __ADI_SENSE_1000_CONFIG_H__
 
@@ -61,6 +80,29 @@
 /*! Maximum length allowed for a digital sensor command */
 #define ADI_SENSE_1000_SENSOR_COMMAND_MAX_LENGTH 7
 
+/*! ADSNS1000 channel priority options */
+typedef enum {
+    ADI_SENSE_1000_CHANNEL_PRIORITY_0 = 0,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_1,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_2,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_3,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_4,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_5,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_6,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_7,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_8,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_9,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_10,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_11,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_12,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_13,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_14,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_15,
+
+    ADI_SENSE_1000_CHANNEL_PRIORITY_HIGHEST = ADI_SENSE_1000_CHANNEL_PRIORITY_0,
+    ADI_SENSE_1000_CHANNEL_PRIORITY_LOWEST  = ADI_SENSE_1000_CHANNEL_PRIORITY_15,
+} ADI_SENSE_1000_CHANNEL_PRIORITY;
+
 /*! ADSNS1000 operating mode options */
 typedef enum {
     ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE = 1,
@@ -94,7 +136,17 @@
      */
 } ADI_SENSE_1000_DATAREADY_MODE;
 
-/*! ADSNS1000 data power mode options */
+/*! ADSNS1000 calibration mode options */
+typedef enum {
+    ADI_SENSE_1000_NO_CALIBRATION = 0,
+    /*!< No full scale ADC calibration is performed after a latch command is sent.
+     */
+    ADI_SENSE_1000_DO_CALIBRATION,
+    /*!< Full scale ADC Calibration is performed after a latch command is sent.
+     */
+} ADI_SENSE_1000_CALIBRATION_MODE;
+
+/*! ADSNS1000 power mode options */
 typedef enum {
     ADI_SENSE_1000_POWER_MODE_LOW = 1,
     /*!< Lowest ADC power consumption mode, with lowest conversion rate */
@@ -104,14 +156,24 @@
     /*!< Highest ADC power consumption mode, with highest conversion rate */
 } ADI_SENSE_1000_POWER_MODE;
 
+/*! ADSNS1000 measurement cycle types */
+typedef enum
+{
+    ADI_SENSE_1000_CYCLE_TYPE_SWITCH = 0,
+    /*!< Switch channels after every conversion */
+    ADI_SENSE_1000_CYCLE_TYPE_FULL   = 1
+    /*!< Perform full number of requested conversions on a channel
+     *   consecutively before switching to the next channel */
+} ADI_SENSE_1000_CYCLE_TYPE;
+
 /*! ADSNS1000 measurement unit options
  *
  *  Optionally select a measurement unit for final conversion results.
  *  Currently applicable only to specific temperature sensor types.
  */
 typedef enum {
-    ADI_SENSE_1000_MEASUREMENT_UNIT_DEFAULT = 0,
-    /*!< No measurement unit specified - implied by sensor type selection */
+    ADI_SENSE_1000_MEASUREMENT_UNIT_UNSPECIFIED = 0,
+    /*!< No measurement unit specified */
     ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
     /*!< Celsius temperature unit - applicable to temperature sensors only */
     ADI_SENSE_1000_MEASUREMENT_UNIT_FAHRENHEIT,
@@ -184,6 +246,15 @@
     /*!< 1mA excitation current enabled */
 } ADI_SENSE_1000_ADC_EXC_CURRENT;
 
+/*! ADSNS1000 analog sensor excitation current ratios used for diode sensor
+ *
+ *  @note applicable only to a diode sensor
+ */
+typedef enum {
+    ADI_SENSE_1000_ADC_EXC_CURRENT_IOUT_DIODE_DEFAULT = 0,
+    ADI_SENSE_1000_ADC_EXC_CURRENT_IOUT_DIODE_MAX,
+} ADI_SENSE_1000_ADC_EXC_CURRENT_DIODE_RATIO;
+
 /*! ADSNS1000 analog reference selection options
  *
  *  @note applicable only to ADC analog sensor channels, and
@@ -247,6 +318,176 @@
     /*!< FIR post filter, producing a 25sps output sample rate */
 } ADI_SENSE_1000_ADC_FILTER_TYPE;
 
+/*! ADSNS1000 FFT sequence mode options
+ *
+ *  @note applicable only for FFT measurement modes
+ */
+typedef enum {
+    ADI_SENSE_1000_FFT_MODE_SINGLE = 0,
+    /*!< Performs a single sequence of FFTs on selected channels and stops */
+    ADI_SENSE_1000_FFT_MODE_CONTINUOUS,
+    /*!< Performs continuous sequences of FFTs on selected channels */
+} ADI_SENSE_1000_FFT_MODE;
+
+/*! ADSNS1000 FFT size options (number of bins)
+ *
+ *  @note applicable only for FFT measurement modes
+ */
+typedef enum {
+    ADI_SENSE_1000_FFT_SIZE_256 = 0,
+    /*!< 256 bins */
+    ADI_SENSE_1000_FFT_SIZE_512,
+    /*!< 512 bins */
+    ADI_SENSE_1000_FFT_SIZE_1024,
+    /*!< 1024 bins */
+    ADI_SENSE_1000_FFT_SIZE_2048,
+    /*!< 2048 bins */
+} ADI_SENSE_1000_FFT_SIZE;
+
+/*! ADSNS1000 FFT window type options
+ *
+ *  @note applicable only for FFT measurement modes
+ */
+typedef enum {
+    ADI_SENSE_1000_FFT_WINDOW_NONE = 0,
+    /*!< No Window */
+    ADI_SENSE_1000_FFT_WINDOW_HANN,
+    /*!< Hann Window */
+    ADI_SENSE_1000_FFT_WINDOW_BLACKMAN_HARRIS,
+    /*!< Blackman-Harris Window */
+} ADI_SENSE_1000_FFT_WINDOW;
+
+/*! ADSNS1000 FFT output format options
+ *
+ *  @note applicable only for FFT measurement modes
+ */
+typedef enum {
+    ADI_SENSE_1000_FFT_OUTPUT_FULL = 0,
+    /*!< N/2-Term Amplitude Response */
+    ADI_SENSE_1000_FFT_OUTPUT_FULL_WITH_RAW,
+    /**< N/2-Term Amplitude Response Plus N Raw ADC Samples */
+    ADI_SENSE_1000_FFT_OUTPUT_MAX16,
+    /*!< Bin-Number and Amplitude of 16 Highest Peaks of Amplitude Response */
+} ADI_SENSE_1000_FFT_OUTPUT;
+
+/*! ADSNS1000 I2C clock speed options
+ *
+ *  @note applicable only for I2C sensors
+ */
+typedef enum
+{
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_I2C_CLOCK_SPEED_100K = 0,
+    /*!< 100kHz I2C clock speed */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_I2C_CLOCK_SPEED_400K,
+    /*!< 400kHz I2C clock speed */
+} ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_I2C_CLOCK_SPEED;
+
+/*! ADSNS1000 UART baud rate options
+ *
+ *  @note applicable only for UART sensors
+ */
+typedef enum
+{
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_115200 = 0,
+    /*!< 115200 UART baud rate */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_57600,
+    /*!< 57600 UART baud rate */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_38400,
+    /*!< 38400 UART baud rate */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_19200,
+    /*!< 19200 UART baud rate */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_9600,
+    /*!< 9600 UART baud rate */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_4800,
+    /*!< 4800 UART baud rate */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_2400,
+    /*!< 2400 UART baud rate */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_1200,
+    /*!< 1200 UART baud rate */
+} ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE;
+
+/*! ADSNS1000 UART line config options
+ *
+ *  @note applicable only for UART sensors
+ */
+typedef enum
+{
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8N1 = 0,
+    /*!< UART line control 8 data bits / no parity / 1 stop bit  */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8N2,
+    /*!< UART line control 8 data bits / no parity / 2 stop bits  */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8N3,
+    /*!< UART line control 8 data bits / no parity / 3 stop bits  */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8E1,
+    /*!< UART line control 8 data bits / even parity / 1 stop bit  */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8E2,
+    /*!< UART line control 8 data bits / even parity / 2 stop bits  */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8E3,
+    /*!< UART line control 8 data bits / even parity / 3 stop bits  */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8O1,
+    /*!< UART line control 8 data bits / odd parity / 1 stop bit  */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8O2,
+    /*!< UART line control 8 data bits / odd parity / 2 stop bits  */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8O3,
+    /*!< UART line control 8 data bits / odd parity / 3 stop bits  */
+} ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG;
+
+/*! ADSNS1000 SPI mode options
+ *
+ *  @note applicable only for SPI sensors
+ */
+typedef enum
+{
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE_0 = 0,
+    /*!< SPI mode 0 Clock Polarity = 0 Clock Phase = 0 */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE_1,
+    /*!< SPI mode 0 Clock Polarity = 0 Clock Phase = 1 */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE_2,
+    /*!< SPI mode 0 Clock Polarity = 1 Clock Phase = 0 */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE_3,
+    /*!< SPI mode 0 Clock Polarity = 1 Clock Phase = 1 */
+} ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE;
+
+/*! ADSNS1000 SPI clock speed options
+ *
+ *  @note applicable only for SPI sensors
+ */
+typedef enum
+{
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_13MHZ = 0,
+    /*!< SPI Clock Speed configured to 13MHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_6_5MHZ,
+    /*!< SPI Clock Speed configured to 6.5MHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_3_25MHZ,
+    /*!< SPI Clock Speed configured to 3.25MHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_1_625MHZ,
+    /*!< SPI Clock Speed configured to 1.625MHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_812KHZ,
+    /*!< SPI Clock Speed configured to 812kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_406KHZ,
+    /*!< SPI Clock Speed configured to 406kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_203KHZ,
+    /*!< SPI Clock Speed configured to 203kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_101KHZ,
+    /*!< SPI Clock Speed configured to 101kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_50KHZ,
+    /*!< SPI Clock Speed configured to 50kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_25KHZ,
+    /*!< SPI Clock Speed configured to 25kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_12KHZ,
+    /*!< SPI Clock Speed configured to 12kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_6KHZ,
+    /*!< SPI Clock Speed configured to 6kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_3KHZ,
+    /*!< SPI Clock Speed configured to 3kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_1_5KHZ,
+    /*!< SPI Clock Speed configured to 1.5kHz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_793HZ,
+    /*!< SPI Clock Speed configured to 793hz */
+  ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_396HZ,
+    /*!< SPI Clock Speed configured to 396hz */
+} ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK;
+
 /*! ADSNS1000 Power Configuration options */
 typedef struct {
     ADI_SENSE_1000_POWER_MODE        powerMode;
@@ -271,6 +512,8 @@
     /*!< Operating mode - specifies how measurement cycles are scheduled */
     ADI_SENSE_1000_DATAREADY_MODE    dataReadyMode;
     /*!< Data read mode - specifies how output samples are stored for reading */
+    ADI_SENSE_1000_CALIBRATION_MODE calibrationMode;
+    /*!< Calibration mode - specifies if adc calibration is performed after a latch command */
     ADI_SENSE_1000_MULTICYCLE_CONFIG multiCycleConfig;
     /*!< Multi-Cycle configuration - specifies how bursts of measurement cycles
      *   are scheduled.  Applicable only when operatingMode is
@@ -281,6 +524,10 @@
      *   successive measurement cycle.  Applicable only when operatingMode is
      *   not ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE
      */
+    ADI_SENSE_1000_CYCLE_TYPE        cycleType;
+    /*!< Cycle type - specifies how the channel list is traversed with each
+     *   conversion during the cycle.
+     */
     float32_t                        externalRef1Value;
     /*!< Resistance/voltage value connected to external reference input #1.
      *   Applicable only if the selected reference type is
@@ -294,6 +541,9 @@
      *   ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_EXTERNAL_2 or
      *   ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_EXTERNAL_2
      *   (see @ref ADI_SENSE_1000_ADC_REFERENCE_TYPE)
+     */    
+    bool                             enableExternalFlash;
+    /*!< Enable the use of external flash memory for storage of samples.
      */
 } ADI_SENSE_1000_MEASUREMENT_CONFIG;
 
@@ -303,8 +553,10 @@
  *        specific sensor types
  */
 typedef struct {
-    ADI_SENSE_1000_ADC_EXC_CURRENT   outputLevel;
+    ADI_SENSE_1000_ADC_EXC_CURRENT              outputLevel;
     /*!< Excitation current output level */
+    ADI_SENSE_1000_ADC_EXC_CURRENT_DIODE_RATIO  diodeRatio;
+    /*!< Excitation current output diode ratio */
 } ADI_SENSE_1000_ADC_EXC_CURRENT_CONFIG;
 
 /*! ADSNS1000 ADC Filter configuration
@@ -396,6 +648,39 @@
     /*!< Number of valid command bytes.  Set to 0 if unused */
 } ADI_SENSE_1000_DIGITAL_SENSOR_COMMAND;
 
+/*! ADSNS1000 digital sensor calibration param
+ *
+ *  @note applicable only to digital sensor channels
+ */
+typedef struct {
+    uint32_t calibrationParam;
+    /*!< Independently established environmental variable used during calibration
+     *   of a digital sensor. Used only if the sensor supports calibration
+     *   and expects an environmental parameter
+     */
+    bool_t enableCalibrationParam;
+    /*!< Allow Calibration_Parameter to be used during calibration of any digital sensor */
+} ADI_SENSE_1000_DIGITAL_CALIBRATION_COMMAND;
+
+/*! ADSNS1000 digital sensor communication config
+ *
+ *  @note applicable only to digital sensor channels
+ */
+typedef struct {
+    bool_t  useCustomCommsConfig;
+    /*!< Optional parameter to enable user digital communication settings */
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_I2C_CLOCK_SPEED     i2cClockSpeed;
+    /*!< Optional parameter to configure specific i2c speed for i2c sensor */
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE            spiMode;
+    /*!< Optional parameter to configure specific spi mode for spi sensor */
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK           spiClock;
+    /*!< Optional parameter to configure specific spi clock for spi sensor */
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE      uartBaudRate;
+    /*!< Optional parameter to configure specific uart baud rate for uart sensor */
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG    uartLineConfig;
+    /*!< Optional parameter to configure specific uart line control for uart sensor */
+} ADI_SENSE_1000_DIGITAL_SENSOR_COMMS;
+
 /*! ADSNS1000 I2C digital channel configuration details
  *
  *  @note applicable only to I2C digital sensor channels
@@ -420,6 +705,18 @@
      *   A default data format will be used if this is not specified.
      *   Applicable only to specific I2C sensor types
      */
+    ADI_SENSE_1000_DIGITAL_CALIBRATION_COMMAND digitalCalibrationParam;
+    /*!< This is used to supply an independently established environmental variable
+     *   that must be used during calibration of a [digital] sensor which a)
+     *   supports calibration and b) expects an environmental parameter.
+     *   An example is a CO2 sensor, which may require the CO2 concentration level
+     *   when performing a calibration
+     */
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS configureComms;
+    /*!< Optional configuration to setup a user communication config.
+     *   A default configuration  will be used if this is not specified.
+     *   Applicable only to specific I2C sensor types.
+     */
 } ADI_SENSE_1000_I2C_CHANNEL_CONFIG;
 
 /*! ADSNS1000 SPI digital channel configuration details
@@ -444,14 +741,49 @@
      *   A default data format will be used if this is not specified.
      *   Applicable only to specific SPI sensor types
      */
+    ADI_SENSE_1000_DIGITAL_CALIBRATION_COMMAND digitalCalibrationParam;
+    /*!< This is used to supply an independently established environmental variable
+     *   that must be used during calibration of a [digital] sensor which a)
+     *   supports calibration and b) expects an environmental parameter.
+     *   An example is a CO2 sensor, which may require the CO2 concentration level
+     *   when performing a calibration
+     */
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS configureComms;
+    /*!< Optional configuration to setup a user communication config.
+     *   A default configuration  will be used if this is not specified.
+     *   Applicable only to specific SPI sensor types.
+     */
 } ADI_SENSE_1000_SPI_CHANNEL_CONFIG;
 
+/*! ADSNS1000 UART digital channel configuration details
+ *
+ *  @note applicable only to UART digital sensor channels
+ */
+typedef struct {
+    ADI_SENSE_1000_UART_SENSOR_TYPE        sensor;
+    /*!< Sensor type selection */
+    ADI_SENSE_1000_DIGITAL_CALIBRATION_COMMAND digitalCalibrationParam;
+    /*!< This is used to supply an independently established environmental variable
+     *   that must be used during calibration of a [digital] sensor which a)
+     *   supports calibration and b) expects an environmental parameter.
+     *   An example is a CO2 sensor, which may require the CO2 concentration level
+     *   when performing a calibration
+     */
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS configureComms;
+    /*!< Optional configuration to setup a user communication config.
+     *   A default configuration  will be used if this is not specified.
+     *   Applicable only to specific UART sensor types.
+     */
+} ADI_SENSE_1000_UART_CHANNEL_CONFIG;
+
 /*! ADSNS1000 Measurement Channel configuration details */
 typedef struct {
     bool_t                               enableChannel;
     /*!< Option to enable this channel.  If set to false, all other fields
      *   are ignored and this channel will be omitted from measurement cycles
      */
+    bool_t                               enableFFT;
+    /*!< Option to include this channel in FFT mode measurements */
     bool_t                               disablePublishing;
     /*!< Option to disable publishing of data samples from this channel.  The
      *   channel may still be included in measurement cycles, but data samples
@@ -465,6 +797,11 @@
      *   separate measurement of the "cold-junction" temperature, which can be
      *   be provided by an RTD temperature sensor connected on a separate
      *   "compensation channel" */
+    bool_t                               enableUnityLut;
+    /*!< Option to choose the LUT for calculations, this implies that the
+     * fundamental measurement for the sensor (typically mV or Ohms)
+     * would be returned as the measurement result.
+     */
     ADI_SENSE_1000_MEASUREMENT_UNIT      measurementUnit;
     /*!< Optional measurement unit selection for conversion results.  Applicable
      *   only for certain sensor types.  Set to
@@ -490,17 +827,37 @@
     /*!< Optional gain adjustment value applied to each processed sample.
      *   Set to NaN or 1.0 if not required.
      */
+    float32_t                            sensorParameter;
+    /*!< Optional sensor parameter adjustment.
+     *   Set to NaN or 0 if not required.
+     */
     uint32_t                             measurementsPerCycle;
     /*!< The number of measurements to obtain from this channel within each
      *   cycle.  Each enabled channel is measured in turn, until the number of
      *   measurements requested for the channel has been reached.  A different
      *   number of measurements-per-cycle may be specified for each channel.
      */
+    uint32_t                             cycleSkipCount;
+    /*!< Optional number of cycles to skip, such that this channel is included
+     *   in the sequence in only one of every (cycleSkipCount + 1) cycles that
+     *   occur.  If set to 0 (default), this channel is included in every cycle;
+     *   if set to 1, this channel is included in every 2nd cycle; if set to 2,
+     *   this channel is included in every 3rd cycle, and so on.
+     */
     uint32_t                             extraSettlingTime;
     /*!< A minimum settling time is applied internally for each channel, based
      *   on the sensor type.  However, additional settling time (microseconds)
      *   can optionally be specified.  Set to 0 if not required.
      */
+    ADI_SENSE_1000_CHANNEL_PRIORITY      priority;
+    /*!< By default, channels are arranged in the measurement sequence based on
+     *   ascending order of channel ID.  However, a priority-level may be
+     *   specified per channel to force a different ordering of the channels,
+     *   with higher-priority channels appearing before lower-priority channels.
+     *   Channels with equal priority are ordered by ascending order of channel
+     *   ID.  Lower numbers indicate higher priority, with 0 being the highest.
+     *   Set to 0 if not required.
+     */
     union {
         ADI_SENSE_1000_ADC_CHANNEL_CONFIG adcChannelConfig;
         /*!< ADC channel configuration - applicable only to ADC channels */
@@ -508,9 +865,12 @@
         /*!< I2C channel configuration - applicable only to I2C channels */
         ADI_SENSE_1000_SPI_CHANNEL_CONFIG spiChannelConfig;
         /*!< SPI channel configuration - applicable only to SPI channels */
+        ADI_SENSE_1000_UART_CHANNEL_CONFIG uartChannelConfig;
+        /*!< UART channel configuration - applicable only to UART channels */
     };
-    /*!< Only one of adcChannelConfig, i2cChannelConfig, or spiChannelConfig is
-     *   required, depending on the channel designation (analog, I2C or SPI)
+    /*!< Only one of adcChannelConfig, i2cChannelConfig, spiChannelConfig or
+     *   uartChannelConfig is required, depending on the channel designation
+     *   (analog, I2C, SPI or UART)
      */
 } ADI_SENSE_1000_CHANNEL_CONFIG;
 
@@ -530,6 +890,18 @@
     /*!< Option to enable Open-Circuit Detection at a selected cycle interval */
 } ADI_SENSE_1000_DIAGNOSTICS_CONFIG;
 
+/*! ADSNS1000 FFT Measurement Mode configuration options */
+typedef struct {
+    ADI_SENSE_1000_FFT_MODE               mode;
+    /*!< FFT sequence mode */
+    ADI_SENSE_1000_FFT_SIZE               size;
+    /*!< FFT size selection */
+    ADI_SENSE_1000_FFT_WINDOW             window;
+    /*!< FFT window type selection */
+    ADI_SENSE_1000_FFT_OUTPUT             output;
+    /*!< FFT output type selection */
+} ADI_SENSE_1000_FFT_CONFIG;
+
 /*! ADSNS1000 Device configuration details */
 typedef struct {
     ADI_SENSE_1000_POWER_CONFIG           power;
@@ -538,6 +910,8 @@
     /*!< Measurement configuration details */
     ADI_SENSE_1000_DIAGNOSTICS_CONFIG     diagnostics;
     /*!< Diagnostics configuration details */
+    ADI_SENSE_1000_FFT_CONFIG             fft;
+    /*!< FFT configuration details */
     ADI_SENSE_1000_CHANNEL_CONFIG         channels[ADI_SENSE_1000_MAX_CHANNELS];
     /*!< Channel-specific configuration details */
 } ADI_SENSE_1000_CONFIG;
@@ -551,4 +925,3 @@
  */
 
 #endif /* __ADI_SENSE_1000_CONFIG_H__ */
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/adi_sense_1000/adi_sense_1000_host_comms.h	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,75 @@
+/*
+CONFIDENTIAL AND PROPRIETARY INFORMATION
+
+Copyright (c) 2018 Emutex Ltd. All rights reserved.
+This software and documentation contain confidential and
+proprietary information that is the property of
+Emutex Ltd. The software and documentation are
+furnished under a license agreement and may be used
+or copied only in accordance with the terms of the license
+agreement. No part of the software and documentation
+may be reproduced, transmitted, or translated, in any
+form or by any means, electronic, mechanical, manual,
+optical, or otherwise, without prior written permission
+of Emutex Ltd., or as expressly provided by the license agreement.
+Reverse engineering is prohibited, and reproduction,
+disclosure or use without specific written authorization
+of Emutex Ltd. is strictly forbidden.
+*/
+
+#ifndef __ADI_SENSE_1000_HOST_COMMS_H__
+#define __ADI_SENSE_1000_HOST_COMMS_H__
+
+#include "adi_sense_types.h"
+
+/*
+ * The host is expected to transfer a 16-bit command, followed by data bytes, in 2
+ * separate transfers delineated by the CS signal and a short delay in between.
+ *
+ * The 16-bit command contains a right-justified 11-bit register address (offset),
+ * and the remaining upper 5 bits are reserved as command bits assigned as follows:
+ * [15:11] 10000b = write command, 01000b = read command, anything else is invalid
+ * [10:0]  register address (0-2047)
+ */
+
+/* Register address space is limited to 2048 bytes (11 bit address) */
+#define ADI_SENSE_1000_HOST_COMMS_CMD_MASK 0xF800
+#define ADI_SENSE_1000_HOST_COMMS_ADR_MASK 0x07FF
+
+/*
+ * The following commands are currently supported, anything else is treated
+ * as an error
+ */
+#define ADI_SENSE_1000_HOST_COMMS_WRITE_CMD 0x8000
+#define ADI_SENSE_1000_HOST_COMMS_READ_CMD  0x4000
+
+/*
+ * The following bytes are sent back to the host when a command is recieved,
+ * to be used by the host to verify that we were ready to receive the command.
+ */
+#define ADI_SENSE_1000_HOST_COMMS_CMD_RESP_0 0xF0
+#define ADI_SENSE_1000_HOST_COMMS_CMD_RESP_1 0xE1
+
+/*
+ * The following minimum delay, in microseconds, must be inserted after each SPI
+ * transfer to allow time for it to be processed by the device
+ */
+#define ADI_SENSE_1000_HOST_COMMS_XFER_DELAY (30)
+
+/*! ADSNS1000 Sensor Result bit field structure */
+typedef struct _ADI_SENSE_1000_Sensor_Result_t {
+    union {
+        struct {
+            float32_t Sensor_Result;      /**< Linearized and compensated sensor result */
+            uint32_t Channel_ID    :  4;  /**< Indicates which channel this result corresponds to */
+            uint32_t Ch_Error      :  1;  /**< Indicates Error on channel */
+            uint32_t Ch_Alert      :  1;  /**< Indicates Alert on channel */
+            uint32_t Ch_Raw        :  1;  /**< Indicates if Raw sensor data field is valid */
+            uint32_t Ch_Valid      :  1;  /**< Indicates if this Result structure is valid */
+            uint32_t Raw_Sample    : 24;  /**< Raw sensor data value */
+        };
+        uint64_t VALUE64;
+   };
+} ADI_SENSE_1000_Sensor_Result_t;
+
+#endif /* __ADI_SENSE_1000_HOST_COMMS_H__ */
--- a/inc/adi_sense_1000/adi_sense_1000_lut_data.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_1000/adi_sense_1000_lut_data.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_1000_lut_data.h
- * @brief:  Look-Up Table data-type definitions for ADSNS1000 API.
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -40,6 +33,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:  Look-Up Table data-type definitions for ADSNS1000 API.
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_1000_LUT_DATA_H__
 #define __ADI_SENSE_1000_LUT_DATA_H__
 
@@ -348,7 +348,7 @@
  *
  * @note This is intended to be used for encapsulating the storage of static
  *       LUT data declarations in C files.  The rawTableData can be cast
- *       to the ADI_SENSE_LUT type for further parsing/processing. 
+ *       to the ADI_SENSE_LUT type for further parsing/processing.
  */
 typedef struct __attribute__((packed, aligned(4))) {
 	ADI_SENSE_1000_LUT_HEADER header;
@@ -366,4 +366,3 @@
  */
 
 #endif /* __ADI_SENSE_1000_LUT_DATA_H__ */
-
--- a/inc/adi_sense_1000/adi_sense_1000_sensor_types.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_1000/adi_sense_1000_sensor_types.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_1000_sensor_types.h
- * @brief:  Sensor type definitions for ADSNS1000.
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -40,6 +33,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:  Sensor type definitions for ADSNS1000.
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_1000_SENSOR_TYPES_H__
 #define __ADI_SENSE_1000_SENSOR_TYPES_H__
 
@@ -82,6 +82,8 @@
     /*!< Digital SPI Sensor channel #1 */
     ADI_SENSE_1000_CHANNEL_ID_SPI_2,
     /*!< Digital SPI Sensor channel #2 */
+    ADI_SENSE_1000_CHANNEL_ID_UART,
+    /*!< Digital UART Sensor channel #0 */
 
     ADI_SENSE_1000_MAX_CHANNELS,
     /*!< Maximum number of measurement channels on ADSNS1000 */
@@ -119,25 +121,25 @@
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_1_DEF_L2 = 12,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_1_DEF_L2 = 8,
     /*!< Standard thermocouple temperature sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_2_DEF_L2 = 13,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_2_DEF_L2 = 9,
     /*!< Standard thermocouple temperature sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_3_DEF_L2 = 14,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_3_DEF_L2 = 10,
     /*!< Standard thermocouple temperature sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_4_DEF_L2 = 15,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_4_DEF_L2 = 11,
     /*!< Standard thermocouple temperature sensor with user-defined
      *   linearisation and default configuration options
      *
@@ -149,37 +151,37 @@
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_K_ADV_L1 = 17,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_J_ADV_L1 = 17,
     /*!< T-type thermocouple temperature sensor with default linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_J_ADV_L1 = 18,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_K_ADV_L1 = 18,
     /*!< T-type thermocouple temperature sensor with default linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_1_ADV_L2 = 28,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_1_ADV_L2 = 24,
     /*!< Thermocouple temperature sensor with user-defined
      *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_2_ADV_L2 = 29,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_2_ADV_L2 = 25,
     /*!< Thermocouple temperature sensor with user-defined
      *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_3_ADV_L2 = 30,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_3_ADV_L2 = 26,
     /*!< Thermocouple temperature sensor with user-defined
      *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_4_ADV_L2 = 31,
+    ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_4_ADV_L2 = 27,
     /*!< Thermocouple temperature sensor with user-defined
      *   linearisation and advanced configuration options
      *
@@ -199,28 +201,28 @@
      * @note For use with Cold-Juction Compensation and Analog Sensor channels
      *       only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_1_DEF_L2 = 44,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_1_DEF_L2 = 40,
     /*!< 2-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Cold-Juction Compensation and Analog Sensor channels
      *       only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_2_DEF_L2 = 45,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_2_DEF_L2 = 41,
     /*!< 2-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Cold-Juction Compensation and Analog Sensor channels
      *       only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_3_DEF_L2 = 46,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_3_DEF_L2 = 42,
     /*!< 2-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Cold-Juction Compensation and Analog Sensor channels
      *       only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_4_DEF_L2 = 47,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_4_DEF_L2 = 43,
     /*!< 2-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
@@ -241,28 +243,28 @@
      * @note For use with Cold-Juction Compensation and Analog Sensor channels
      *       only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_1_ADV_L2 = 60,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_1_ADV_L2 = 56,
     /*!< 2-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Cold-Juction Compensation and Analog Sensor channels
      *       only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_2_ADV_L2 = 61,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_2_ADV_L2 = 57,
     /*!< 2-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Cold-Juction Compensation and Analog Sensor channels
      *       only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_3_ADV_L2 = 62,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_3_ADV_L2 = 58,
     /*!< 2-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Cold-Juction Compensation and Analog Sensor channels
      *       only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_4_ADV_L2 = 63,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_4_ADV_L2 = 59,
     /*!< 2-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
@@ -281,25 +283,25 @@
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_1_DEF_L2 = 76,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_1_DEF_L2 = 72,
     /*!< 3-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_2_DEF_L2 = 77,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_2_DEF_L2 = 73,
     /*!< 3-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_3_DEF_L2 = 78,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_3_DEF_L2 = 74,
     /*!< 3-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_4_DEF_L2 = 79,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_4_DEF_L2 = 75,
     /*!< 3-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
@@ -317,25 +319,25 @@
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_1_ADV_L2 = 92,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_1_ADV_L2 = 88,
     /*!< 3-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_2_ADV_L2 = 93,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_2_ADV_L2 = 89,
     /*!< 3-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_3_ADV_L2 = 94,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_3_ADV_L2 = 90,
     /*!< 3-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_4_ADV_L2 = 95,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_4_ADV_L2 = 91,
     /*!< 3-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
@@ -353,25 +355,25 @@
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_1_DEF_L2 = 108,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_1_DEF_L2 = 104,
     /*!< 4-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_2_DEF_L2 = 109,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_2_DEF_L2 = 105,
     /*!< 4-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_3_DEF_L2 = 110,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_3_DEF_L2 = 106,
     /*!< 4-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_4_DEF_L2 = 111,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_4_DEF_L2 = 107,
     /*!< 4-wire RTD temperature sensor with user-defined linearisation and
      *   default configuration options
      *
@@ -389,25 +391,25 @@
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_1_ADV_L2 = 124,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_1_ADV_L2 = 120,
     /*!< 4-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_2_ADV_L2 = 125,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_2_ADV_L2 = 121,
     /*!< 4-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_3_ADV_L2 = 126,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_3_ADV_L2 = 122,
     /*!< 4-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_4_ADV_L2 = 127,
+    ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_4_ADV_L2 = 123,
     /*!< 4-wire RTD temperature sensor with user-defined linearisation and
      *   advanced configuration options
      *
@@ -425,25 +427,25 @@
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_1_DEF_L2 = 140,
+    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_1_DEF_L2 = 136,
     /*!< Thermistor sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_2_DEF_L2 = 141,
+    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_2_DEF_L2 = 137,
     /*!< Thermistor sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_3_DEF_L2 = 142,
+    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_3_DEF_L2 = 138,
     /*!< Thermistor sensor with user-defined linearisation and
      *   default configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_4_DEF_L2 = 143,
+    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_4_DEF_L2 = 139,
     /*!< Thermistor sensor with user-defined linearisation and
      *   default configuration options
      *
@@ -461,182 +463,332 @@
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_1_ADV_L2 = 156,
+    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_1_ADV_L2 = 152,
     /*!< Thermistor sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_2_ADV_L2 = 157,
+    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_2_ADV_L2 = 153,
     /*!< Thermistor sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_3_ADV_L2 = 158,
+    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_3_ADV_L2 = 154,
     /*!< Thermistor sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_4_ADV_L2 = 159,
+    ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_4_ADV_L2 = 155,
     /*!< Thermistor sensor with user-defined linearisation and
      *   advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_DEF_L2 = 160,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_DEF_L2 = 168,
     /*!< Standard 4-wire Bridge Transducer sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_DEF_L2 = 161,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_DEF_L2 = 169,
+    /*!< Standard 4-wire Bridge Transducer sensor with user-defined
+     *   linearisation and default configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     * @note Bridge Excition Voltage must be selected as reference
+     */
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_3_DEF_L2 = 170,
     /*!< Standard 4-wire Bridge Transducer sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_3_DEF_L2 = 162,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_4_DEF_L2 = 171,
     /*!< Standard 4-wire Bridge Transducer sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_4_DEF_L2 = 163,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_ADV_L2 = 184,
     /*!< Standard 4-wire Bridge Transducer sensor with user-defined
-     *   linearisation and default configuration options
+     *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_ADV_L2 = 176,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_ADV_L2 = 185,
+    /*!< Standard 4-wire Bridge Transducer sensor with user-defined
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     * @note Bridge Excition Voltage must be selected as reference
+     */
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_3_ADV_L2 = 186,
     /*!< Standard 4-wire Bridge Transducer sensor with user-defined
      *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_ADV_L2 = 177,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_4_ADV_L2 = 187,
     /*!< Standard 4-wire Bridge Transducer sensor with user-defined
      *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_3_ADV_L2 = 178,
-    /*!< Standard 4-wire Bridge Transducer sensor with user-defined
-     *   linearisation and advanced configuration options
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_DEF_L2 = 200,
+    /*!< Standard 6-wire Bridge Transducer sensor with user-defined
+     *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_4_ADV_L2 = 179,
-    /*!< Standard 4-wire Bridge Transducer sensor with user-defined
-     *   linearisation and advanced configuration options
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_2_DEF_L2 = 201,
+    /*!< Standard 6-wire Bridge Transducer sensor with user-defined
+     *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_DEF_L2 = 192,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_3_DEF_L2 = 202,
+    /*!< Standard 6-wire Bridge Transducer sensor with user-defined
+     *   linearisation and default configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     * @note Bridge Excition Voltage must be selected as reference
+     */
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_4_DEF_L2 = 203,
     /*!< Standard 6-wire Bridge Transducer sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_2_DEF_L2 = 193,
-    /*!< Standard 6-wire Bridge Transducer sensor with user-defined
-     *   linearisation and default configuration options
-     *
-     * @note For use with Analog Sensor channels only
-     * @note Bridge Excition Voltage must be selected as reference
-     */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_3_DEF_L2 = 194,
-    /*!< Standard 6-wire Bridge Transducer sensor with user-defined
-     *   linearisation and default configuration options
-     *
-     * @note For use with Analog Sensor channels only
-     * @note Bridge Excition Voltage must be selected as reference
-     */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_4_DEF_L2 = 195,
-    /*!< Standard 6-wire Bridge Transducer sensor with user-defined
-     *   linearisation and default configuration options
-     *
-     * @note For use with Analog Sensor channels only
-     * @note Bridge Excition Voltage must be selected as reference
-     */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_ADV_L2 = 208,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_ADV_L2 = 216,
     /*!< Standard 6-wire Bridge Transducer sensor with user-defined
      *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_2_ADV_L2 = 209,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_2_ADV_L2 = 217,
     /*!< Standard 6-wire Bridge Transducer sensor with user-defined
      *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_3_ADV_L2 = 210,
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_3_ADV_L2 = 218,
+    /*!< Standard 6-wire Bridge Transducer sensor with user-defined
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     * @note Bridge Excition Voltage must be selected as reference
+     */
+    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_4_ADV_L2 = 219,
     /*!< Standard 6-wire Bridge Transducer sensor with user-defined
      *   linearisation and advanced configuration options
      *
      * @note For use with Analog Sensor channels only
      * @note Bridge Excition Voltage must be selected as reference
      */
-    ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_4_ADV_L2 = 211,
-    /*!< Standard 6-wire Bridge Transducer sensor with user-defined
-     *   linearisation and advanced configuration options
+    ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_TYPEA_DEF_L1 = 224,
+    /*!< Standard Diode two current temperature sensor with default
+     *   linearisation equation and default configuration options
+     *
+     * @note For use with  Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_TYPEA_DEF_L1 = 225,
+    /*!< Standard Diode three current temperature sensor with default
+     *   linearisation equation and default configuration options
+     *
+     * @note For use with  Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_1_DEF_L2 = 232,
+    /*!< Standard Diode two current sensor with user-defined linearisation and
+     *   default configuration options
+     *
+     * @note For use with  Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_1_DEF_L2 = 233,
+    /*!< Standard Diode three current sensor with user-defined linearisation and
+     *   default configuration options
+     *
+     * @note For use with  Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_TYPEA_ADV_L1 = 240,
+    /*!< Standard Diode two current temperature sensor with default
+     *   linearisation equation and advanced configuration options
+     *
+     * @note For use with  Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_TYPEA_ADV_L1 = 241,
+    /*!< Standard Diode three current sensor with default linearisation and
+     *   advanced configuration options
+     *
+     * @note For use with  Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_1_ADV_L2 = 248,
+    /*!< Standard Diode two current sensor with user-defined linearisation and
+     *   advanced configuration options
+     *
+     * @note For use with  Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_1_ADV_L2 = 249,
+    /*!< Standard Diode three current sensor with user-defined linearisation and
+     *   advanced configuration options
+     *
+     * @note For use with  Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_A_DEF_L1 = 256,
+    /*!< Generic microphone sensor without external amplifier, and with
+     *   default linearisation and default configuration options
      *
      * @note For use with Analog Sensor channels only
-     * @note Bridge Excition Voltage must be selected as reference
+     */
+    ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_B_DEF_L1 = 257,
+    /*!< Generic microphone sensor with external amplifier and bias, and with
+     *   default linearisation and default configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_1_DEF_L2 = 264,
+    /*!< Generic microphone sensor without external amplifier, and with
+     *   user-defined linearisation and default configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_2_DEF_L2 = 265,
+    /*!< Generic microphone sensor with external amplifier and bias, and with
+     *   user-defined linearisation and default configuration options
+     *
+     * @note For use with Analog Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE = 256,
+    ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_A_ADV_L1 = 272,
+    /*!< Generic microphone sensor without external amplifier, and with
+     *   default linearisation and advanced configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_B_ADV_L1 = 273,
+    /*!< Generic microphone sensor with external amplifier and bias, and with
+     *   default linearisation and advanced configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_1_ADV_L2 = 278,
+    /*!< Generic microphone sensor without external amplifier, and with
+     *   user-defined linearisation and advanced configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_2_ADV_L2 = 279,
+    /*!< Generic microphone sensor with external amplifier and bias, and with
+     *   user-defined linearisation and advanced configuration options
+     *
+     * @note For use with Analog Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE = 512,
     /*!< Generic voltage sensor with no linearisation applied
      *
      * @note For use with Analog 0-10V Voltage Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_HONEYWELL_TRUSTABILITY = 272,
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_A_DEF_L1 = 544,
     /*!< Honeywell Pressure voltage sensor (HSCMRNN1.6BAAA3) with default
      *   linearisation and default configuration options
      *
      * @note For use with Analog 0-10V Voltage Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_AMPHENOL_NPA300X = 273,
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_B_DEF_L1 = 545,
     /*!< Amphenol Pressure voltage sensor (NPA-300B-015A) with default
      *   linearisation and default configuration options
      *
      * @note For use with Analog 0-10V Voltage Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_3_DEF = 274,
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_1_DEF_L2 = 552,
     /*!< Generic pressure voltage sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog 0-10V Voltage Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_CURRENT = 384,
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_2_DEF_L2 = 553,
+    /*!< Generic pressure voltage sensor with user-defined
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog 0-10V Voltage Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_A_ADV_L1 = 560,
+    /*!< Honeywell Pressure voltage sensor (HSCMRNN1.6BAAA3) with default
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog 0-10V Voltage Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_B_ADV_L1 = 561,
+    /*!< Amphenol Pressure voltage sensor (NPA-300B-015A) with default
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog 0-10V Voltage Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_1_ADV_L2 = 568,
+    /*!< Generic pressure voltage sensor with user-defined
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog 0-10V Voltage Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_2_ADV_L2 = 569,
+    /*!< Generic pressure voltage sensor with user-defined
+     *   linearisation and default configuration options
+     *
+     * @note For use with Analog 0-10V Voltage Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_CURRENT = 768,
     /*!< Generic current sensor with no linearisation applied
      *
      * @note For use with Analog 4-20mA Current Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_HONEYWELL_PX2 = 385,
+    ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_A_DEF_L1 = 800,
     /*!< Honeywell Pressure current sensor (PX2CN2XX100PACH) with default
      *   linearisation and default configuration options
      *
      * @note For use with Analog 4-20mA Current Sensor channels only
      */
-    ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_2_DEF = 386,
+    ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_1_DEF_L2 = 808,
+    /*!< Generic pressure current sensor with user-defined
+     *   linearisation and default configuration options
+     *
+     * @note For use with Analog 4-20mA Current Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_2_DEF_L2 = 809,
     /*!< Generic pressure current sensor with user-defined
      *   linearisation and default configuration options
      *
      * @note For use with Analog 4-20mA Current Sensor channels only
      */
+    ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_A_ADV_L1 = 816,
+    /*!< Honeywell Pressure current sensor (PX2CN2XX100PACH) with default
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog 4-20mA Current Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_1_ADV_L2 = 824,
+    /*!< Generic pressure current sensor with user-defined
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog 4-20mA Current Sensor channels only
+     */
+    ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_2_ADV_L2 = 825,
+    /*!< Generic pressure current sensor with user-defined
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with Analog 4-20mA Current Sensor channels only
+     */
 } ADI_SENSE_1000_ADC_SENSOR_TYPE;
 
 /*! ADSNS1000 I2C digital sensor type options
@@ -647,18 +799,78 @@
  *  @note These are pre-defined sensors using built-in linearisation data
  */
 typedef enum {
-    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_HONEYWELL_HUMIDICON = 2112,
+    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_DEF_L1 = 2112,
     /*!< Honeywell HiH9000-series humidity sensor with default linearisation
      *   and default configuration options
      *
      * @note For use with I2C Digital Sensor channels only
      */
-    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_SENSIRION_SHT3X = 2113,
+    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_DEF_L1 = 2113,
     /*!< Sensirion SHT35-DIS-B humidity sensor with default linearisation
      *   and default configuration options
      *
      * @note For use with I2C Digital Sensor channels only
      */
+    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_DEF_L2 = 2120,
+    /*!< Honeywell HiH9000-series humidity sensor with user-defined linearisation
+     *   and default configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_DEF_L2 = 2121,
+    /*!< Sensirion SHT35-DIS-B humidity sensor with user-defined linearisation
+     *   and default configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_ADV_L1 = 2128,
+    /*!< Honeywell HiH9000-series humidity sensor with default linearisation
+     *   and advanced configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_ADV_L1 = 2129,
+    /*!< Sensirion SHT35-DIS-B humidity sensor with default linearisation
+     *   and advanced configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_ADV_L2 = 2136,
+    /*!< Honeywell HiH9000-series humidity sensor with user-defined
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_ADV_L2 = 2137,
+    /*!< Sensirion SHT35-DIS-B humidity sensor with user-defined linearisation
+     *   and advanced configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_DEF_L1 = 2176,
+    /*!< ON-Semiconductor NOA1305 ambient light sensor with default
+     *   linearisation and default configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_DEF_L2 = 2184,
+    /*!< ON-Semiconductor NOA1305 ambient light sensor with user-defined
+     *   linearisation and default configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_ADV_L1 = 2192,
+    /*!< ON-Semiconductor NOA1305 ambient light sensor with default
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
+    ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_ADV_L2 = 2200,
+    /*!< ON-Semiconductor NOA1305 ambient light sensor with user-defined
+     *   linearisation and advanced configuration options
+     *
+     * @note For use with I2C Digital Sensor channels only
+     */
 } ADI_SENSE_1000_I2C_SENSOR_TYPE;
 
 /*! ADSNS1000 SPI digital sensor type options
@@ -669,17 +881,103 @@
  *  @note These are pre-defined sensors using built-in linearisation data
  */
 typedef enum {
-    ADI_SENSE_1000_SPI_SENSOR_PRESSURE_HONEYWELL_TRUSTABILITY = 3072,
+    ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_DEF_L1 = 3072,
     /*!< Honeywell HSCDRNN1.6BASA3 pressure sensor with default linearisation
      * and default configuration options
      *
      * @note For use with SPI Digital Sensor channels only
      */
-    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_ADI_ADXL362 = 3200,
+    ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_DEF_L2 = 3080,
+    /*!< Honeywell HSCDRNN1.6BASA3 pressure sensor with user-defined
+     * linearisation and default configuration options
+     *
+     * @note For use with SPI Digital Sensor channels only
+     */
+    ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_ADV_L1 = 3088,
+    /*!< Honeywell HSCDRNN1.6BASA3 pressure sensor with default linearisation
+     * and advanced configuration options
+     *
+     * @note For use with SPI Digital Sensor channels only
+     */
+    ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_ADV_L2 = 3096,
+    /*!< Honeywell HSCDRNN1.6BASA3 pressure sensor with user-defined
+     * linearisation and advanced configuration options
+     *
+     * @note For use with SPI Digital Sensor channels only
+     */
+    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_DEF_L1 = 3200,
     /*!< Analog Devices ADxL362 3-axis accelerometer sensor with default
      *   linearisation and default configuration options(*)
      *
-     * @note (*) Custom configuration command can be optionally specified
+     * @note For use with SPI Digital Sensor channels only
+     *
+     * @note This sensor requires the use of 3 SPI Digital Sensor channels, with
+     *       the sensor measurements from the X/Y/Z axes each output on a
+     *       seperate dedicated channel (SPI#0/SPI#1/SPI#2, respectively)
+     */
+    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_DEF_L1 = 3201,
+    /*!< Analog Devices ADxL355 3-axis accelerometer sensor with default
+     *   linearisation and default configuration options(*)
+     *
+     * @note For use with SPI Digital Sensor channels only
+     *
+     * @note This sensor requires the use of 3 SPI Digital Sensor channels, with
+     *       the sensor measurements from the X/Y/Z axes each output on a
+     *       seperate dedicated channel (SPI#0/SPI#1/SPI#2, respectively)
+     */
+    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_DEF_L2 = 3208,
+    /*!< Analog Devices ADxL362 3-axis accelerometer sensor with user-defined
+     *   linearisation and default configuration options(*)
+     *
+     * @note For use with SPI Digital Sensor channels only
+     *
+     * @note This sensor requires the use of 3 SPI Digital Sensor channels, with
+     *       the sensor measurements from the X/Y/Z axes each output on a
+     *       seperate dedicated channel (SPI#0/SPI#1/SPI#2, respectively)
+     */
+    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_DEF_L2 = 3209,
+    /*!< Analog Devices ADxL355 3-axis accelerometer sensor with user-defined
+     *   linearisation and default configuration options(*)
+     *
+     * @note For use with SPI Digital Sensor channels only
+     *
+     * @note This sensor requires the use of 3 SPI Digital Sensor channels, with
+     *       the sensor measurements from the X/Y/Z axes each output on a
+     *       seperate dedicated channel (SPI#0/SPI#1/SPI#2, respectively)
+     */
+    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_ADV_L1 = 3216,
+    /*!< Analog Devices ADxL362 3-axis accelerometer sensor with default
+     *   linearisation and advanced configuration options(*)
+     *
+     * @note For use with SPI Digital Sensor channels only
+     *
+     * @note This sensor requires the use of 3 SPI Digital Sensor channels, with
+     *       the sensor measurements from the X/Y/Z axes each output on a
+     *       seperate dedicated channel (SPI#0/SPI#1/SPI#2, respectively)
+     */
+    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_ADV_L1 = 3217,
+    /*!< Analog Devices ADxL355 3-axis accelerometer sensor with default
+     *   linearisation and advanced configuration options(*)
+     *
+     * @note For use with SPI Digital Sensor channels only
+     *
+     * @note This sensor requires the use of 3 SPI Digital Sensor channels, with
+     *       the sensor measurements from the X/Y/Z axes each output on a
+     *       seperate dedicated channel (SPI#0/SPI#1/SPI#2, respectively)
+     */
+    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_ADV_L2 = 3224,
+    /*!< Analog Devices ADxL362 3-axis accelerometer sensor with user-defined
+     *   linearisation and advanced configuration options(*)
+     *
+     * @note For use with SPI Digital Sensor channels only
+     *
+     * @note This sensor requires the use of 3 SPI Digital Sensor channels, with
+     *       the sensor measurements from the X/Y/Z axes each output on a
+     *       seperate dedicated channel (SPI#0/SPI#1/SPI#2, respectively)
+     */
+    ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_ADV_L2 = 3225,
+    /*!< Analog Devices ADxL355 3-axis accelerometer sensor with user-defined
+     *   linearisation and advanced configuration options(*)
      *
      * @note For use with SPI Digital Sensor channels only
      *
@@ -689,6 +987,64 @@
      */
 } ADI_SENSE_1000_SPI_SENSOR_TYPE;
 
+/*! ADSNS1000 UART digital sensor type options
+ *
+ *  Select the sensor type that is connected to an UART digital measurement
+ *  channel.
+ *
+ *  @note These are pre-defined sensors using built-in linearisation data
+ */
+typedef enum {
+    ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_DEF_L1 = 3584,
+    /*!< COZIR AMB 2,000 ppm CO2 Sensor with default linearisation
+     * and default configuration options
+     *
+     * @note For use with UART Digital Sensor channels only
+     */
+    ADI_SENSE_1000_UART_SENSOR_UART_CO2_B_DEF_L1 = 3585,
+    /*!< COZIR LP Miniature 5,000ppm CO2 Sensor with default linearisation
+     * and default configuration options
+     *
+     * @note For use with UART Digital Sensor channels only
+     */
+    ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_DEF_L2 = 3592,
+    /*!< COZIR AMB 2,000 ppm CO2 Sensor with user-defined linearisation
+     * and default configuration options
+     *
+     * @note For use with UART Digital Sensor channels only
+     */
+    ADI_SENSE_1000_UART_SENSOR_UART_CO2_B_DEF_L2 = 3593,
+    /*!< COZIR LP Miniature 5,000ppm CO2 Sensor with user-defined linearisation
+     * and default configuration options
+     *
+     * @note For use with UART Digital Sensor channels only
+     */
+    ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_ADV_L1 = 3600,
+    /*!< COZIR AMB 2,000 ppm CO2 Sensor with default linearisation
+     * and advanced configuration options
+     *
+     * @note For use with UART Digital Sensor channels only
+     */
+    ADI_SENSE_1000_UART_SENSOR_UART_CO2_B_ADV_L1 = 3601,
+    /*!< COZIR LP Miniature 5,000ppm CO2 Sensor with default linearisation
+     * and advanced configuration options
+     *
+     * @note For use with UART Digital Sensor channels only
+     */
+    ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_ADV_L2 = 3608,
+    /*!< COZIR AMB 2,000 ppm CO2 Sensor with user-defined linearisation
+     * and advanced configuration options
+     *
+     * @note For use with UART Digital Sensor channels only
+     */
+    ADI_SENSE_1000_UART_SENSOR_UART_CO2_B_ADV_L2 = 3609,
+    /*!< COZIR LP Miniature 5,000ppm CO2 Sensor with user-defined linearisation
+     * and advanced configuration options
+     *
+     * @note For use with UART Digital Sensor channels only
+     */
+} ADI_SENSE_1000_UART_SENSOR_TYPE;
+
 #ifdef __cplusplus
 }
 #endif
@@ -698,4 +1054,3 @@
  */
 
 #endif /* __ADI_SENSE_1000_SENSOR_TYPES_H__ */
-
--- a/inc/adi_sense_api.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_api.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_api.h
- * @brief:  ADISENSE Host Library Application Programming Interface (API)
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -40,6 +33,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_api.h
+ * @brief:  ADISENSE Host Library Application Programming Interface (API)
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_API_H__
 #define __ADI_SENSE_API_H__
 
@@ -81,6 +81,8 @@
     /*!< SPI connection parameters, required if SPI connection type is used */
     ADI_SENSE_PLATFORM_GPIO_CONFIG gpio;
     /*!< GPIO connection parameters, for device reset and status I/O signals */
+    ADI_SENSE_PLATFORM_LOG_CONFIG  log;
+    /*!< Log interface connection parameters, for display/routing of log messages */
 } ADI_SENSE_CONNECTION;
 
 /*! Bit masks (flags) for the different device status indicators. */
@@ -99,6 +101,8 @@
     /*!< Indicates that a configuration error condition has been detected by the device */
     ADI_SENSE_DEVICE_STATUS_LUT_ERROR    = (1 << 6),
     /*!< Indicates that a look-up table error condition has been detected by the device */
+    ADI_SENSE_DEVICE_STATUS_EXT_FLASH_ERROR = (1 << 7),
+    /*!< Indicates that an external flash memory error condition has been detected by the device */
 } ADI_SENSE_DEVICE_STATUS_FLAGS;
 
 /*! Bit masks (flags) for the different diagnostics status indicators. */
@@ -111,14 +115,6 @@
     /*!< Indicates Low Voltage on Internal Supply Voltages */
     ADI_SENSE_DIAGNOSTICS_STATUS_SUPPLY_CAP_ERROR     = (1 << 3),
     /*!< Indicates Fault on Internal Supply Regulator Capacitor */
-    ADI_SENSE_DIAGNOSTICS_STATUS_AINM_UV_ERROR        = (1 << 4),
-    /*!< Indicates Under-Voltage Error on Negative Analog Input */
-    ADI_SENSE_DIAGNOSTICS_STATUS_AINM_OV_ERROR        = (1 << 5),
-    /*!< Indicates Over-Voltage Error on Negative Analog Input */
-    ADI_SENSE_DIAGNOSTICS_STATUS_AINP_UV_ERROR        = (1 << 6),
-    /*!< Indicates Under-Voltage Error on Positive Analog Input */
-    ADI_SENSE_DIAGNOSTICS_STATUS_AINP_OV_ERROR        = (1 << 7),
-    /*!< Indicates Over-Voltage Error on Positive Analog Input */
     ADI_SENSE_DIAGNOSTICS_STATUS_CONVERSION_ERROR     = (1 << 8),
     /*!< Indicates Error During Internal ADC Conversions */
     ADI_SENSE_DIAGNOSTICS_STATUS_CALIBRATION_ERROR    = (1 << 9),
@@ -149,10 +145,6 @@
     /*!< Indicates digital sensor not-ready error condition detected on the channel */
     ADI_SENSE_CHANNEL_ALERT_COMP_NOT_READY   = (1 << 10),
     /*!< Indicates compensation channel not-ready error condition detected on the channel */
-    ADI_SENSE_CHANNEL_ALERT_UNDER_VOLTAGE    = (1 << 11),
-    /*!< Indicates under-voltage condition detected on the channel */
-    ADI_SENSE_CHANNEL_ALERT_OVER_VOLTAGE     = (1 << 12),
-    /*!< Indicates over-voltage condition detected on the channel */
     ADI_SENSE_CHANNEL_ALERT_LUT_UNDER_RANGE  = (1 << 13),
     /*!< Indicates raw sample was under the available LUT/equation range */
     ADI_SENSE_CHANNEL_ALERT_LUT_OVER_RANGE   = (1 << 14),
@@ -206,8 +198,19 @@
     ADI_SENSE_MEASUREMENT_MODE_OMIT_RAW,
     /*!< In this mode, normal measurement cycle(s) are executed and data samples
      *   are returned with raw measurement values omitted for efficiency. */
+    ADI_SENSE_MEASUREMENT_MODE_FFT,
+    /*!< In this mode, FFT mode measurement cycle(s) are executed and data
+     *   samples are returned based on FFT-specific configuration parameters. */
 } ADI_SENSE_MEASUREMENT_MODE;
 
+/*! Identifiers for the user configuration slots in persistent memory. */
+typedef enum {
+    ADI_SENSE_FLASH_CONFIG_1,
+    ADI_SENSE_FLASH_CONFIG_2,
+    ADI_SENSE_FLASH_CONFIG_3,
+    ADI_SENSE_FLASH_CONFIG_4,
+} ADI_SENSE_USER_CONFIG_SLOT;
+
 
 /******************************************************************************
  * ADISENSE High-Level API function prototypes
@@ -287,6 +290,26 @@
     void                           * const pCallbackParam);
 
 /*!
+ * @brief Trigger a shut down of the device.
+ *
+ * @param[in] hDevice ADISENSE device context handle
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *
+ * @details Instructs the ADISENSE device to initiate a shut down,
+ *          typically used to conserve power when the device is not
+ *          in use.  The device may be restarted by calling
+ *          @ref adi_sense_Reset().  Note that active configuration
+ *          settings are not preserved during shutdown and must be
+ *          reloaded after the device has become ready again.
+ *
+ * @note No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_Shutdown(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice);
+
+/*!
  * @brief Reset the ADISENSE device.
  *
  * @param[in] hDevice ADISENSE device context handle
@@ -374,6 +397,7 @@
  * @brief Store the configuration settings to persistent memory on the device.
  *
  * @param[in] hDevice ADISENSE device context handle
+ * @param[in] eSlotId User configuration slot in persistent memory
  *
  * @return Status
  *         - #ADI_SENSE_SUCCESS Call completed successfully.
@@ -385,12 +409,14 @@
  * @note Do not power down the device while this command is running.
  */
 ADI_SENSE_RESULT adi_sense_SaveConfig(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice);
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_USER_CONFIG_SLOT const eSlotId);
 
 /*!
  * @brief Restore configuration settings from persistent memory on the device.
  *
  * @param[in] hDevice ADISENSE device context handle
+ * @param[in] eSlotId User configuration slot in persistent memory
  *
  * @return Status
  *         - #ADI_SENSE_SUCCESS Call completed successfully.
@@ -401,9 +427,75 @@
  * @note No other command must be running when this is called.
  */
 ADI_SENSE_RESULT adi_sense_RestoreConfig(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_USER_CONFIG_SLOT const eSlotId);
+
+/*!
+ * @brief Erases the external flash memory.
+ *
+ * @param[in] hDevice ADISENSE device context handle
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *
+ * @details Sends the bulk erase instruction to the external flash
+ *          device. All stored samples are deleted.
+ *          It is a blocking operation and takes tens of seconds to
+ *          complete.
+ *
+ * @note No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_EraseExternalFlash(
     ADI_SENSE_DEVICE_HANDLE    const hDevice);
 
 /*!
+ * @brief Gets the number of samples stored in the external flash
+ *        memory.
+ *
+ * @param[in] hDevice ADISENSE device context handle
+ * @param[in] pSampleCount Address of the return value.
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *
+ * @note No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_GetExternalFlashSampleCount(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    uint32_t * nSampleCount);
+
+// DEBUG - TO BE DELETED
+ADI_SENSE_RESULT adi_sense_SetExternalFlashIndex(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    uint32_t nStartIndex);
+
+/*!
+ * @brief Read measurement samples stored in the the external flash memory.
+ *
+ * @param[in]  hDevice          ADISENSE device context handle
+ * @param[out] pSamples         Pointer to return a set of requested data
+ *                              samples.
+ * @param[in]  nStartIndex      Index of first sample to retrieve.
+ * @param[in]  nBytesPerSample  The size, in bytes, of each sample.
+ * @param[in]  nRequested       Number of requested data samples.
+ * @param[out] pnReturned       Number of valid data samples successfully
+ *                              retrieved.
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *
+ * @details Reads the status registers and extracts the relevant information
+ *          to return to the caller.
+ *
+ */
+ADI_SENSE_RESULT adi_sense_GetExternalFlashData(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_DATA_SAMPLE    * const pSamples,
+    uint32_t                   const nIndex,
+    uint32_t                   const nRequested,
+    uint32_t                 * const pnReturned);
+
+/*!
  * @brief Store the LUT data to persistent memory on the device.
  *
  * @param[in] hDevice ADISENSE device context handle
@@ -516,6 +608,24 @@
     ADI_SENSE_DEVICE_HANDLE    const hDevice);
 
 /*!
+ * @brief Run built-in digital calibration on the device.
+ *
+ * @param[in] hDevice ADISENSE device context handle
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *
+ * @details Instructs the ADISENSE device to execute its calibration
+ *          routines, on any enabled digital channels, according to the
+ *          current applied configuration settings.  Device status registers
+ *          will be updated to indicate if any errors were detected.
+ *
+ * @note No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_RunDigitalCalibration(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice);
+
+/*!
  * @brief Read the current status from the device registers.
  *
  * @param[in]  hDevice ADISENSE device context handle
@@ -541,6 +651,7 @@
  * @param[in]  eMeasurementMode Must be set to the same value used for @ref
  *                              adi_sense_StartMeasurement().
  * @param[out] pSamples         Pointer to return a set of requested data samples.
+ * @param[in]  nBytesPerSample  The size, in bytes, of each sample.
  * @param[in]  nRequested       Number of requested data samples.
  * @param[out] pnReturned       Number of valid data samples successfully retrieved.
  *
@@ -557,6 +668,7 @@
     ADI_SENSE_DEVICE_HANDLE    const hDevice,
     ADI_SENSE_MEASUREMENT_MODE const eMeasurementMode,
     ADI_SENSE_DATA_SAMPLE    * const pSamples,
+    uint8_t                    const nBytesPerSample,
     uint32_t                   const nRequested,
     uint32_t                 * const pnReturned);
 
@@ -584,4 +696,3 @@
  */
 
 #endif /* __ADI_SENSE_API_H__ */
-
--- a/inc/adi_sense_config_types.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_config_types.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_config_types.h
- * @brief:  Type definitions for ADISENSE API.
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright (c) 2017 Analog Devices, Inc.
 
@@ -44,6 +37,13 @@
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_config_types.h
+ * @brief:  Type definitions for ADISENSE API.
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_CONFIG_TYPES_H__
 #define __ADI_SENSE_CONFIG_TYPES_H__
 
@@ -100,4 +100,3 @@
  */
 
 #endif /* __ADI_SENSE_CONFIG_TYPES_H__ */
-
--- a/inc/adi_sense_gpio.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_gpio.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_gpio.h
- * @brief:  ADISENSE OS-dependent wrapper layer for GPIO interface
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -40,6 +33,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_gpio.h
+ * @brief:  ADISENSE OS-dependent wrapper layer for GPIO interface
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_GPIO_H__
 #define __ADI_SENSE_GPIO_H__
 
@@ -75,7 +75,7 @@
 typedef void* ADI_SENSE_GPIO_HANDLE;
 
 #ifdef __cplusplus
-extern "C" 
+extern "C"
 {
 #endif
 
@@ -174,4 +174,3 @@
  */
 
 #endif /* __ADI_SENSE_GPIO_H__ */
-
--- a/inc/adi_sense_log.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_log.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_log.h
- * @brief:  ADISENSE OS-dependent wrapper layer for log functions
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -40,6 +33,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_log.h
+ * @brief:  ADISENSE OS-dependent wrapper layer for log functions
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_LOG_H__
 #define __ADI_SENSE_LOG_H__
 
@@ -77,7 +77,7 @@
 
 
 #ifdef __cplusplus
-extern "C" 
+extern "C"
 {
 #endif
 
@@ -89,13 +89,23 @@
  *         - #ADI_SENSE_NO_MEM  Failed to allocate memory for device context.
  */
 ADI_SENSE_RESULT adi_sense_LogOpen(
-    void);
+    ADI_SENSE_PLATFORM_LOG_CONFIG *pConfig);
 
 /*!
  * @brief Close the Log interface and free resources.
  */
-void adi_sense_LogClose(
-    void);
+void adi_sense_LogClose(void);
+
+/*!
+ * @brief Set the minimum priority level for the log messages.
+ *
+ * @param[in]  maxLevel priority level
+ *
+ * @details Sets the log priority level.  Messages with priority lower
+            that this level will not be passed to the log interface.
+ */
+void adi_sense_LogLevel(
+    ADI_SENSE_LOG_LEVEL maxLevel);
 
 /*!
  * @brief Print a log message to the platform log interface.
@@ -117,4 +127,3 @@
  */
 
 #endif /* __ADI_SENSE_LOG_H__ */
-
--- a/inc/adi_sense_platform.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_platform.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:
- * @brief:  Platform-specific type definitions for ADISENSE API.
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright (c) 2017 Analog Devices, Inc.
 
@@ -44,6 +37,13 @@
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:  Platform-specific type definitions for ADISENSE API.
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_PLATFORM_H__
 #define __ADI_SENSE_PLATFORM_H__
 
@@ -63,4 +63,3 @@
 #endif
 
 #endif /* __ADI_SENSE_PLATFORM_H__ */
-
--- a/inc/adi_sense_spi.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_spi.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_spi.h
- * @brief:  ADISENSE OS-dependent wrapper layer for SPI interface
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -40,6 +33,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_spi.h
+ * @brief:  ADISENSE OS-dependent wrapper layer for SPI interface
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_SPI_H__
 #define __ADI_SENSE_SPI_H__
 
@@ -56,7 +56,7 @@
 typedef void * ADI_SENSE_SPI_HANDLE;
 
 #ifdef __cplusplus
-extern "C" 
+extern "C"
 {
 #endif
 
@@ -111,4 +111,3 @@
  */
 
 #endif /* __ADI_SENSE_SPI_H__ */
-
--- a/inc/adi_sense_time.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_time.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_time.h
- * @brief:  ADISENSE OS Dependant wrapper layer for time functions
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -40,6 +33,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_time.h
+ * @brief:  ADISENSE OS Dependant wrapper layer for time functions
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_TIME_H__
 #define __ADI_SENSE_TIME_H__
 
@@ -52,7 +52,7 @@
  */
 
 #ifdef __cplusplus
-extern "C" 
+extern "C"
 {
 #endif
 
@@ -73,4 +73,3 @@
  */
 
 #endif /* __ADI_SENSE_TIME_H__ */
-
--- a/inc/adi_sense_types.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/adi_sense_types.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_types.h
- * @brief:  Type definitions for ADISENSE API.
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -40,6 +33,13 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:   adi_sense_types.h
+ * @brief:  Type definitions for ADISENSE API.
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_TYPES_H__
 #define __ADI_SENSE_TYPES_H__
 
@@ -103,4 +103,3 @@
 } ADI_SENSE_RESULT;
 
 #endif /* __ADI_SENSE_TYPES_H__ */
-
--- a/inc/mbed/adi_sense_platform.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/inc/mbed/adi_sense_platform.h	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:
- * @brief:  mbed platform-specific type definitions for ADISENSE API.
- *-----------------------------------------------------------------------------
- */
-
 /*
 Copyright (c) 2017 Analog Devices, Inc.
 
@@ -44,6 +37,13 @@
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:  mbed platform-specific type definitions for ADISENSE API.
+ *-----------------------------------------------------------------------------
+ */
+
 #ifndef __ADI_SENSE_PLATFORM_MBED_H__
 #define __ADI_SENSE_PLATFORM_MBED_H__
 
@@ -65,5 +65,11 @@
     int datareadyPin;
 } ADI_SENSE_PLATFORM_GPIO_CONFIG;
 
+typedef struct {
+    int txPin;
+    int rxPin;
+    int baudRate;
+    bool disableLogs;
+} ADI_SENSE_PLATFORM_LOG_CONFIG;
+
 #endif /* __ADI_SENSE_PLATFORM_MBED_H__ */
-
--- a/main.cpp	Mon Mar 26 14:50:05 2018 +0000
+++ b/main.cpp	Thu May 17 10:34:45 2018 +0100
@@ -1,7 +1,20 @@
 /*
- ******************************************************************************
- * file:   main.cpp
- *-----------------------------------------------------------------------------
+CONFIDENTIAL AND PROPRIETARY INFORMATION
+
+Copyright (c) 2018 Emutex Ltd. All rights reserved.
+This software and documentation contain confidential and
+proprietary information that is the property of
+Emutex Ltd. The software and documentation are
+furnished under a license agreement and may be used
+or copied only in accordance with the terms of the license
+agreement. No part of the software and documentation
+may be reproduced, transmitted, or translated, in any
+form or by any means, electronic, mechanical, manual,
+optical, or otherwise, without prior written permission
+of Emutex Ltd., or as expressly provided by the license agreement.
+Reverse engineering is prohibited, and reproduction,
+disclosure or use without specific written authorization
+of Emutex Ltd. is strictly forbidden.
  *
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -37,15 +50,25 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  *****************************************************************************/
+/*!
+ ******************************************************************************
+ * @file:
+ *-----------------------------------------------------------------------------
+ *
+ */
 #include "mbed.h"
 #include "inc/adi_sense_api.h"
 #include "inc/adi_sense_1000/adi_sense_1000_api.h"
 #include "inc/adi_sense_log.h"
 #include "common/utils.h"
 
+extern ADI_SENSE_CONFIG cjc0_thermistor_10k_ntc_config;
 extern ADI_SENSE_CONFIG sensor0_rtd_2w_pt100_config;
+extern ADI_SENSE_CONFIG sensor0_microphone_config;
+extern ADI_SENSE_CONFIG sensor0_diode_2c_config;
 extern ADI_SENSE_CONFIG sensor1_typeK_cjc1_config;
 extern ADI_SENSE_CONFIG sensor1_rtd_3w_pt100_config;
+extern ADI_SENSE_CONFIG sensor1_diode_3c_config;
 extern ADI_SENSE_CONFIG sensor2_typeT_cjc0_config;
 extern ADI_SENSE_CONFIG sensor2_bridge_6w_pressure_config;
 extern ADI_SENSE_CONFIG sensor3_typeJ_cjc0_config;
@@ -54,8 +77,11 @@
 extern ADI_SENSE_CONFIG current_honeywellPressure_config;
 extern ADI_SENSE_CONFIG i2c0_honeywellHumidicon_config;
 extern ADI_SENSE_CONFIG i2c0_sensirionSHT3X_config;
+extern ADI_SENSE_CONFIG i2c0_onsemiNOA1305_config;
 extern ADI_SENSE_CONFIG spi0_honeywellTrustability_config;
 extern ADI_SENSE_CONFIG spi0_adiAdxl362_config;
+extern ADI_SENSE_CONFIG spi0_adiAdxl355_config;
+extern ADI_SENSE_CONFIG uart_cozirCO2_config;
 extern ADI_SENSE_CONFIG multichannel_continuous_config;
 extern ADI_SENSE_CONFIG multichannel_multicycle_config;
 extern ADI_SENSE_CONFIG multichannel_singlecycle_config;
@@ -78,11 +104,18 @@
         .alertPin     = D4,
         .datareadyPin = D5,
     },
+    .log = {
+        .txPin        = PA_11,
+        .rxPin        = PA_12,
+        .baudRate     = 115200,
+        .disableLogs  = false,
+    },
 };
 
 int main()
 {
     ADI_SENSE_RESULT res;
+    ADI_SENSE_STATUS status;
     ADI_SENSE_DEVICE_HANDLE hDevice;
     ADI_SENSE_MEASUREMENT_MODE eMeasurementMode = ADI_SENSE_MEASUREMENT_MODE_NORMAL;
     bool_t bDeviceReady;
@@ -138,6 +171,20 @@
         ADI_SENSE_LOG_ERROR("Failed to apply device configuration");
         return res;
     }
+    /*
+     * Check device status after updating the configuration
+     */
+    res = adi_sense_GetStatus(hDevice, &status);
+    if (res != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to retrieve device status");
+        return res;
+    }
+    if (status.deviceStatus &
+        (ADI_SENSE_DEVICE_STATUS_ERROR | ADI_SENSE_DEVICE_STATUS_ALERT))
+    {
+        utils_printStatus(&status);
+    }
 
     /*
      * Kick off the measurement cycle here
@@ -157,4 +204,3 @@
 
     return 0;
 }
-
--- a/multichannel_continuous_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/multichannel_continuous_config.c	Thu May 17 10:34:45 2018 +0100
@@ -58,6 +58,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -80,6 +81,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -102,6 +104,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -124,6 +127,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_1,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -143,6 +147,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_0,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -162,6 +167,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_0,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -184,7 +190,7 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
-                    .sensor = ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_HONEYWELL_TRUSTABILITY,
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_A_DEF_L1,
                     .gain = ADI_SENSE_1000_ADC_GAIN_2X,
                     .filter = {
                         .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
@@ -203,7 +209,7 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
-                    .sensor = ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_HONEYWELL_PX2,
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_A_DEF_L1,
                     .gain = ADI_SENSE_1000_ADC_GAIN_2X,
                     .filter = {
                         .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
@@ -222,23 +228,10 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 36500,
                 .i2cChannelConfig = {
-                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_HONEYWELL_HUMIDICON,
+                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_DEF_L1,
                     .deviceAddress = 0x27,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/multichannel_multicycle_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/multichannel_multicycle_config.c	Thu May 17 10:34:45 2018 +0100
@@ -62,6 +62,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -84,6 +85,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -106,6 +108,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -128,6 +131,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_1,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -147,6 +151,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_0,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -166,6 +171,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_0,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -188,7 +194,7 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
-                    .sensor = ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_HONEYWELL_TRUSTABILITY,
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_A_DEF_L1,
                     .gain = ADI_SENSE_1000_ADC_GAIN_2X,
                     .filter = {
                         .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
@@ -207,7 +213,7 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
-                    .sensor = ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_HONEYWELL_PX2,
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_A_DEF_L1,
                     .gain = ADI_SENSE_1000_ADC_GAIN_2X,
                     .filter = {
                         .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
@@ -226,23 +232,10 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 36500,
                 .i2cChannelConfig = {
-                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_HONEYWELL_HUMIDICON,
+                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_DEF_L1,
                     .deviceAddress = 0x27,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/multichannel_singlecycle_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/multichannel_singlecycle_config.c	Thu May 17 10:34:45 2018 +0100
@@ -57,6 +57,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -79,6 +80,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -101,6 +103,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -123,6 +126,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_1,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -142,6 +146,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_0,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -161,6 +166,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_0,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -183,7 +189,7 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
-                    .sensor = ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_HONEYWELL_TRUSTABILITY,
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_A_DEF_L1,
                     .gain = ADI_SENSE_1000_ADC_GAIN_2X,
                     .filter = {
                         .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
@@ -202,7 +208,7 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
-                    .sensor = ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_HONEYWELL_PX2,
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_A_DEF_L1,
                     .gain = ADI_SENSE_1000_ADC_GAIN_2X,
                     .filter = {
                         .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
@@ -221,23 +227,10 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 36500,
                 .i2cChannelConfig = {
-                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_HONEYWELL_HUMIDICON,
+                    .sensor = ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_DEF_L1,
                     .deviceAddress = 0x27,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sensor0_diode_2c_config.c	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,83 @@
+/*!
+ ******************************************************************************
+ * @file:   sensor0_diode_config.cpp
+ * @brief:
+ *-----------------------------------------------------------------------------
+ *
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+#include "inc/adi_sense_config_types.h"
+
+ADI_SENSE_CONFIG sensor0_diode_2c_config = {
+    .versionId = { .major = 1, .minor = 4 },
+    .productId = ADI_SENSE_PRODUCT_ID_ADSNS1000,
+    .adisense1000 = {
+        .power = {
+            .powerMode = ADI_SENSE_1000_POWER_MODE_FULL,
+        },
+        .measurement = {
+            .operatingMode = ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE,
+            .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
+        },
+        .channels = {
+            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
+                .enableChannel = true,
+                .disablePublishing = false,
+                .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
+                .measurementsPerCycle = 10,
+                .extraSettlingTime = 0,
+                .sensorParameter = 1.003,
+                .adcChannelConfig = {
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_TYPEA_DEF_L1,
+                    .gain = ADI_SENSE_1000_ADC_GAIN_2X,
+                    .current = {
+                        .outputLevel = ADI_SENSE_1000_ADC_EXC_CURRENT_50uA,
+                        .diodeRatio = ADI_SENSE_1000_ADC_EXC_CURRENT_IOUT_DIODE_DEFAULT,
+                    },
+                    .filter = {
+                        .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
+                    },
+                    .reference = {
+                        .type = ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_INTERNAL,
+                        .disableBuffer = true,
+                    },
+                    .enableVbias = false,
+                },
+            },
+        },
+    },
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sensor0_microphone_config.c	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,78 @@
+/*
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
+#include "inc/adi_sense_config_types.h"
+
+ADI_SENSE_CONFIG sensor0_microphone_config = {
+    .versionId = { .major = 1, .minor = 4 },
+    .productId = ADI_SENSE_PRODUCT_ID_ADSNS1000,
+    .adisense1000 = {
+        .power = {
+            .powerMode = ADI_SENSE_1000_POWER_MODE_FULL,
+        },
+        .measurement = {
+            .operatingMode = ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE,
+            .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
+        },
+        .channels = {
+            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
+                .enableChannel = true,
+                .disablePublishing = false,
+                .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementsPerCycle = 10,
+                .extraSettlingTime = 0,
+                .adcChannelConfig = {
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_B_DEF_L1,
+                    .gain = ADI_SENSE_1000_ADC_GAIN_1X,
+                    .filter = {
+                        .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
+                    },
+                    .reference = {
+                        .type = ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_INTERNAL,
+                        .disableBuffer = true,
+                    },
+                    .enableVbias = true,
+                },
+            },
+        },
+    },
+};
--- a/sensor0_rtd-2w-pt100_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/sensor0_rtd-2w-pt100_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   sensor0_rtd-2w-pt100_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG sensor0_rtd_2w_pt100_config = {
@@ -53,16 +54,11 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -81,37 +77,6 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sensor1_diode_3c_config.c	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,83 @@
+/*!
+ ******************************************************************************
+ * @file:   sensor0_diode_config.cpp
+ * @brief:
+ *-----------------------------------------------------------------------------
+ *
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+#include "inc/adi_sense_config_types.h"
+
+ADI_SENSE_CONFIG sensor1_diode_3c_config = {
+    .versionId = { .major = 1, .minor = 4 },
+    .productId = ADI_SENSE_PRODUCT_ID_ADSNS1000,
+    .adisense1000 = {
+        .power = {
+            .powerMode = ADI_SENSE_1000_POWER_MODE_FULL,
+        },
+        .measurement = {
+            .operatingMode = ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE,
+            .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
+        },
+        .channels = {
+            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
+                .enableChannel = true,
+                .disablePublishing = false,
+                .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
+                .measurementsPerCycle = 10,
+                .extraSettlingTime = 0,
+                .sensorParameter = 1.003,
+                .adcChannelConfig = {
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_TYPEA_DEF_L1,
+                    .gain = ADI_SENSE_1000_ADC_GAIN_2X,
+                    .current = {
+                        .outputLevel = ADI_SENSE_1000_ADC_EXC_CURRENT_50uA,
+                        .diodeRatio = ADI_SENSE_1000_ADC_EXC_CURRENT_IOUT_DIODE_DEFAULT,
+                    },
+                    .filter = {
+                        .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
+                    },
+                    .reference = {
+                        .type = ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_INTERNAL,
+                        .disableBuffer = true,
+                    },
+                    .enableVbias = false,
+                },
+            },
+        },
+    },
+};
--- a/sensor1_rtd-3w-pt100_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/sensor1_rtd-3w-pt100_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   sensor1_rtd-3w-pt100_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG sensor1_rtd_3w_pt100_config = {
@@ -53,19 +54,11 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -84,34 +77,6 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/sensor1_typeK_cjc1_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/sensor1_typeK_cjc1_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   sensor1_typeK_cjc1_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG sensor1_typeK_cjc1_config = {
@@ -53,13 +54,11 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -78,13 +77,11 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_1,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -100,34 +97,6 @@
                     .enableVbias = true,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/sensor2_bridge-6w-pressure_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/sensor2_bridge-6w-pressure_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   sensor2_bridge-6w-pressure_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG sensor2_bridge_6w_pressure_config = {
@@ -53,24 +54,13 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
+                .enableUnityLut = true,
                 .adcChannelConfig = {
                     .sensor = ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_DEF_L2,
                     .gain = ADI_SENSE_1000_ADC_GAIN_1X,
@@ -84,31 +74,6 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/sensor2_typeT_cjc0_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/sensor2_typeT_cjc0_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   sensor2_typeT_cjc0_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG sensor2_typeT_cjc0_config = {
@@ -57,6 +58,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -75,19 +77,11 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_0,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -103,31 +97,6 @@
                     .enableVbias = true,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/sensor3_thermistor-10k-ntc_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/sensor3_thermistor-10k-ntc_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   sensor3_thermistor-10k-ntc_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG sensor3_thermistor_10k_ntc_config = {
@@ -53,25 +54,11 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -87,28 +74,6 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/sensor3_typeJ_cjc0_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/sensor3_typeJ_cjc0_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   sensor3_typeJ_cjc0_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG sensor3_typeJ_cjc0_config = {
@@ -57,6 +58,7 @@
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -75,22 +77,11 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
                 .enableChannel = true,
                 .disablePublishing = false,
                 .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_CJC_0,
+                .measurementUnit = ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS,
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
@@ -106,28 +97,6 @@
                     .enableVbias = true,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spi0_adiAdxl355_config.c	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,96 @@
+/*
+CONFIDENTIAL AND PROPRIETARY INFORMATION
+
+Copyright (c) 2018 Emutex Ltd. All rights reserved.
+This software and documentation contain confidential and
+proprietary information that is the property of
+Emutex Ltd. The software and documentation are
+furnished under a license agreement and may be used
+or copied only in accordance with the terms of the license
+agreement. No part of the software and documentation
+may be reproduced, transmitted, or translated, in any
+form or by any means, electronic, mechanical, manual,
+optical, or otherwise, without prior written permission
+of Emutex Ltd., or as expressly provided by the license agreement.
+Reverse engineering is prohibited, and reproduction,
+disclosure or use without specific written authorization
+of Emutex Ltd. is strictly forbidden.
+ *
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
+#include "inc/adi_sense_config_types.h"
+
+ADI_SENSE_CONFIG spi0_adiAdxl355_config = {
+    .versionId = { .major = 1, .minor = 4 },
+    .productId = ADI_SENSE_PRODUCT_ID_ADSNS1000,
+    .adisense1000 = {
+        .power = {
+            .powerMode = ADI_SENSE_1000_POWER_MODE_FULL,
+        },
+        .measurement = {
+            .operatingMode = ADI_SENSE_1000_OPERATING_MODE_CONTINUOUS,
+            .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
+            .cycleInterval = 1000000,
+        },
+        .channels = {
+            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
+                /* Accelerometer X-Axis (and common settings for physical channel) */
+                .enableChannel = true,
+                .disablePublishing = false,
+                .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementsPerCycle = 10,
+                .extraSettlingTime = 1000,
+                .spiChannelConfig = {
+                    .sensor = ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_DEF_L1,
+                },
+            },
+            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
+                /* Accelerometer Y-Axis (virtual channel) */
+                .enableChannel = true,
+            },
+            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
+                /* Accelerometer Z-Axis (virtual channel) */
+                .enableChannel = true,
+            },
+        },
+    },
+};
--- a/spi0_adiAdxl362_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/spi0_adiAdxl362_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   spi0_adiAdxl362_config.c
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG spi0_adiAdxl362_config = {
@@ -54,36 +55,6 @@
             .cycleInterval = 1000000,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
                 /* Accelerometer X-Axis (and common settings for physical channel) */
                 .enableChannel = true,
@@ -95,11 +66,7 @@
                 .lowThreshold = -6.0,
                 .highThreshold = 6.0,
                 .spiChannelConfig = {
-                    .sensor = ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_ADI_ADXL362,
-                    .configurationCommand = {
-                        .command = { 0x0A, 0x2C, 0x83 }, /* +/-8G range */
-                        .commandLength = 3,
-                    },
+                    .sensor = ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_DEF_L1,
                 },
             },
             [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
@@ -121,4 +88,3 @@
         },
     },
 };
-
--- a/spi0_honeywellTrustability_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/spi0_honeywellTrustability_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   spi0_honeywellTrustability_config.c
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG spi0_honeywellTrustability_config = {
@@ -53,36 +54,6 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
                 .enableChannel = true,
                 .disablePublishing = false,
@@ -90,16 +61,9 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 750,
                 .spiChannelConfig = {
-                    .sensor = ADI_SENSE_1000_SPI_SENSOR_PRESSURE_HONEYWELL_TRUSTABILITY,
+                    .sensor = ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_DEF_L1,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-
--- a/src/adi_sense_1000.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/adi_sense_1000.c	Thu May 17 10:34:45 2018 +0100
@@ -1,2347 +1,3282 @@
-/*!
- ******************************************************************************
- * @file:  adi_sense_1000.c
- * @brief: ADISENSE API implementation for ADSNS1000
- *-----------------------------------------------------------------------------
- */
-
-/******************************************************************************
-Copyright 2017 (c) Analog Devices, Inc.
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-  - Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-  - Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-  - Neither the name of Analog Devices, Inc. nor the names of its
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-  - The use of this software may or may not infringe the patent rights
-    of one or more patent holders. This license does not release you
-    from the requirement that you obtain separate licenses from these
-    patent holders to use this software.
-  - Use of the software either in source or binary form, must be run
-    on or directly connected to an Analog Devices Inc. component.
-
-THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *****************************************************************************/
-#include <float.h>
-#include <math.h>
-#include <string.h>
-
-#include "inc/adi_sense_platform.h"
-#include "inc/adi_sense_api.h"
-#include "inc/adi_sense_1000/adi_sense_1000_api.h"
-
-#include "adi_sense_1000/ADISENSE1000_REGISTERS_typedefs.h"
-#include "adi_sense_1000/ADISENSE1000_REGISTERS.h"
-#include "adi_sense_1000/adi_sense_1000_lut_data.h"
-
-#include "crc16.h"
-
-/*
- * The host is expected to transfer a 16-bit command, followed by data bytes, in 2
- * separate transfers delineated by the CS signal and a short delay in between.
- *
- * The 16-bit command contains a right-justified 11-bit register address (offset),
- * and the remaining upper 5 bits are reserved as command bits assigned as follows:
- * [15:11] 10000b = write command, 01000b = read command, anything else is invalid
- * [10:0]  register address (0-2047)
- */
-
-/* Register address space is limited to 2048 bytes (11 bit address) */
-#define REG_COMMAND_MASK 0xF800
-#define REG_ADDRESS_MASK 0x07FF
-
-/*
- * The following commands are currently supported, anything else is treated
- * as an error
- */
-#define REG_WRITE_COMMAND 0x8000
-#define REG_READ_COMMAND  0x4000
-
-/*
- * The following bytes are sent back to the host when a command is recieved,
- * to be used by the host to verify that we were ready to receive the command.
- */
-#define REG_COMMAND_RESP_0 0xF0
-#define REG_COMMAND_RESP_1 0xE1
-
-/*
- * The following minimum delay must be inserted after each SPI transfer to allow
- * time for it to be processed by the device
- */
-#define POST_SPI_TRANSFER_DELAY_USEC (20)
-
-/*
- * The following macros are used to encapsulate the register access code
- * to improve readability in the functions further below in this file
- */
-#define STRINGIFY(name) #name
-
-/* Expand the full name of the reset value macro for the specified register */
-#define REG_RESET_VAL(_name) REG_ADISENSE_##_name##_RESET
-
-/* Checks if a value is outside the bounds of the specified register field */
-#define CHECK_REG_FIELD_VAL(_field, _val)                               \
-    do {                                                                \
-        uint32_t _mask  = BITM_ADISENSE_##_field;                       \
-        uint32_t _shift = BITP_ADISENSE_##_field;                       \
-        if ((((_val) << _shift) & ~(_mask)) != 0) {                     \
-            ADI_SENSE_LOG_ERROR("Value 0x%08X invalid for register field %s", \
-                                (uint32_t)(_val),                       \
-                                STRINGIFY(ADISENSE_##_field));          \
-            return ADI_SENSE_INVALID_PARAM;                             \
-        }                                                               \
-    } while(false)
-
-/*
- * Encapsulates the write to a specified register
- * NOTE - this will cause the calling function to return on error
- */
-#define WRITE_REG(_hdev, _val, _name, _type)                            \
-    do {                                                                \
-        ADI_SENSE_RESULT _res;                                          \
-        _type _regval = _val;                                           \
-        _res = adi_sense_1000_WriteRegister((_hdev),                    \
-                                            REG_ADISENSE_##_name,       \
-                                            &_regval, sizeof(_regval)); \
-        if (_res != ADI_SENSE_SUCCESS)                                  \
-            return _res;                                                \
-    } while(false)
-
-/* Wrapper macro to write a value to a uint32_t register */
-#define WRITE_REG_U32(_hdev, _val, _name)       \
-    WRITE_REG(_hdev, _val, _name, uint32_t)
-/* Wrapper macro to write a value to a uint16_t register */
-#define WRITE_REG_U16(_hdev, _val, _name)       \
-    WRITE_REG(_hdev, _val, _name, uint16_t)
-/* Wrapper macro to write a value to a uint8_t register */
-#define WRITE_REG_U8(_hdev, _val, _name)        \
-    WRITE_REG(_hdev, _val, _name, uint8_t)
-/* Wrapper macro to write a value to a float32_t register */
-#define WRITE_REG_FLOAT(_hdev, _val, _name)     \
-    WRITE_REG(_hdev, _val, _name, float32_t)
-
-/*
- * Encapsulates the read from a specified register
- * NOTE - this will cause the calling function to return on error
- */
-#define READ_REG(_hdev, _val, _name, _type)                             \
-    do {                                                                \
-        ADI_SENSE_RESULT _res;                                          \
-        _type _regval;                                                  \
-        _res = adi_sense_1000_ReadRegister((_hdev),                     \
-                                           REG_ADISENSE_##_name,        \
-                                           &_regval, sizeof(_regval));  \
-        if (_res != ADI_SENSE_SUCCESS)                                  \
-            return _res;                                                \
-        _val = _regval;                                                 \
-    } while(false)
-
-/* Wrapper macro to read a value from a uint32_t register */
-#define READ_REG_U32(_hdev, _val, _name)        \
-    READ_REG(_hdev, _val, _name, uint32_t)
-/* Wrapper macro to read a value from a uint16_t register */
-#define READ_REG_U16(_hdev, _val, _name)        \
-    READ_REG(_hdev, _val, _name, uint16_t)
-/* Wrapper macro to read a value from a uint8_t register */
-#define READ_REG_U8(_hdev, _val, _name)         \
-    READ_REG(_hdev, _val, _name, uint8_t)
-/* Wrapper macro to read a value from a float32_t register */
-#define READ_REG_FLOAT(_hdev, _val, _name)      \
-    READ_REG(_hdev, _val, _name, float32_t)
-
-/*
- * Wrapper macro to write an array of values to a uint8_t register
- * NOTE - this is intended only for writing to a keyhole data register
- */
-#define WRITE_REG_U8_ARRAY(_hdev, _arr, _len, _name)                \
-    do {                                                            \
-        ADI_SENSE_RESULT _res;                                      \
-        _res = adi_sense_1000_WriteRegister(_hdev,                  \
-                                            REG_ADISENSE_##_name,   \
-                                            _arr, _len);            \
-        if (_res != ADI_SENSE_SUCCESS)                              \
-            return _res;                                            \
-    } while(false)
-
-/*
- * Wrapper macro to read an array of values from a uint8_t register
- * NOTE - this is intended only for reading from a keyhole data register
- */
-#define READ_REG_U8_ARRAY(_hdev, _arr, _len, _name)                 \
-    do {                                                            \
-        ADI_SENSE_RESULT _res;                                      \
-        _res = adi_sense_1000_ReadRegister((_hdev),                 \
-                                           REG_ADISENSE_##_name,    \
-                                           _arr, _len);             \
-        if (_res != ADI_SENSE_SUCCESS)                              \
-            return _res;                                            \
-    } while(false)
-
-#define ADI_SENSE_1000_CHANNEL_IS_ADC(c)                                \
-    ((c) >= ADI_SENSE_1000_CHANNEL_ID_CJC_0 && (c) <= ADI_SENSE_1000_CHANNEL_ID_CURRENT_0)
-
-#define ADI_SENSE_1000_CHANNEL_IS_ADC_CJC(c)                            \
-    ((c) >= ADI_SENSE_1000_CHANNEL_ID_CJC_0 && (c) <= ADI_SENSE_1000_CHANNEL_ID_CJC_1)
-
-#define ADI_SENSE_1000_CHANNEL_IS_ADC_SENSOR(c)                         \
-    ((c) >= ADI_SENSE_1000_CHANNEL_ID_SENSOR_0 && (c) <= ADI_SENSE_1000_CHANNEL_ID_SENSOR_3)
-
-#define ADI_SENSE_1000_CHANNEL_IS_ADC_VOLTAGE(c)    \
-    ((c) == ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0)
-
-#define ADI_SENSE_1000_CHANNEL_IS_ADC_CURRENT(c)    \
-    ((c) == ADI_SENSE_1000_CHANNEL_ID_CURRENT_0)
-
-#define ADI_SENSE_1000_CHANNEL_IS_VIRTUAL(c)                            \
-    ((c) == ADI_SENSE_1000_CHANNEL_ID_SPI_1 || (c) == ADI_SENSE_1000_CHANNEL_ID_SPI_2)
-
-typedef struct
-{
-    unsigned nDeviceIndex;
-    ADI_SENSE_SPI_HANDLE hSpi;
-    ADI_SENSE_GPIO_HANDLE hGpio;
-} ADI_SENSE_DEVICE_CONTEXT;
-
-static ADI_SENSE_DEVICE_CONTEXT gDeviceCtx[ADI_SENSE_PLATFORM_MAX_DEVICES];
-
-/*
- * Open an ADISENSE device instance.
- */
-ADI_SENSE_RESULT adi_sense_Open(
-    unsigned                   const nDeviceIndex,
-    ADI_SENSE_CONNECTION     * const pConnectionInfo,
-    ADI_SENSE_DEVICE_HANDLE  * const phDevice)
-{
-    ADI_SENSE_DEVICE_CONTEXT *pCtx;
-    ADI_SENSE_RESULT eRet;
-
-    if (nDeviceIndex >= ADI_SENSE_PLATFORM_MAX_DEVICES)
-        return ADI_SENSE_INVALID_DEVICE_NUM;
-
-    pCtx = &gDeviceCtx[nDeviceIndex];
-    pCtx->nDeviceIndex = nDeviceIndex;
-
-    eRet = adi_sense_LogOpen();
-    if (eRet != ADI_SENSE_SUCCESS)
-        return eRet;
-
-    eRet = adi_sense_GpioOpen(&pConnectionInfo->gpio, &pCtx->hGpio);
-    if (eRet != ADI_SENSE_SUCCESS)
-        return eRet;
-
-    eRet = adi_sense_SpiOpen(&pConnectionInfo->spi, &pCtx->hSpi);
-    if (eRet != ADI_SENSE_SUCCESS)
-        return eRet;
-
-    *phDevice = pCtx;
-    return ADI_SENSE_SUCCESS;
-}
-
-/*
- * Get the current state of the specified GPIO input signal.
- */
-ADI_SENSE_RESULT adi_sense_GetGpioState(
-    ADI_SENSE_DEVICE_HANDLE   const hDevice,
-    ADI_SENSE_GPIO_PIN        const ePinId,
-    bool_t                  * const pbAsserted)
-{
-    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
-
-    return adi_sense_GpioGet(pCtx->hGpio, ePinId, pbAsserted);
-}
-
-/*
- * Register an application-defined callback function for GPIO interrupts.
- */
-ADI_SENSE_RESULT adi_sense_RegisterGpioCallback(
-    ADI_SENSE_DEVICE_HANDLE          const hDevice,
-    ADI_SENSE_GPIO_PIN               const ePinId,
-    ADI_SENSE_GPIO_CALLBACK          const callbackFunction,
-    void                           * const pCallbackParam)
-{
-    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
-
-    if (callbackFunction)
-    {
-        return adi_sense_GpioIrqEnable(pCtx->hGpio, ePinId, callbackFunction,
-                                       pCallbackParam);
-    }
-    else
-    {
-        return adi_sense_GpioIrqDisable(pCtx->hGpio, ePinId);
-    }
-}
-
-/*
- * Reset the specified ADISENSE device.
- */
-ADI_SENSE_RESULT adi_sense_Reset(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
-    ADI_SENSE_RESULT eRet;
-
-    /* Pulse the Reset GPIO pin low for a minimum of 4 microseconds */
-    eRet = adi_sense_GpioSet(pCtx->hGpio, ADI_SENSE_GPIO_PIN_RESET, false);
-    if (eRet != ADI_SENSE_SUCCESS)
-        return eRet;
-
-    adi_sense_TimeDelayUsec(4);
-
-    eRet = adi_sense_GpioSet(pCtx->hGpio, ADI_SENSE_GPIO_PIN_RESET, true);
-    if (eRet != ADI_SENSE_SUCCESS)
-        return eRet;
-
-    return ADI_SENSE_SUCCESS;
-}
-
-
-/*!
- * @brief Get general status of ADISense module.
- *
- * @param[in]
- * @param[out] pStatus : Pointer to CORE Status struct.
- *
- * @return Status
- *         - #ADI_SENSE_SUCCESS Call completed successfully.
- *         - #ADI_SENSE_FAILURE If status register read fails.
- *
- * @details Read the general status register for the ADISense
- *          module. Indicates Error, Alert conditions, data ready
- *          and command running.
- *
- */
-ADI_SENSE_RESULT adi_sense_GetStatus(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice,
-    ADI_SENSE_STATUS         * const pStatus)
-{
-    ADI_ADISENSE_CORE_Status_t statusReg;
-    READ_REG_U8(hDevice, statusReg.VALUE8, CORE_STATUS);
-
-    memset(pStatus, 0, sizeof(*pStatus));
-
-    if (!statusReg.Cmd_Running) /* Active-low, so invert it */
-        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_BUSY;
-    if (statusReg.Drdy)
-        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_DATAREADY;
-    if (statusReg.FIFO_Error)
-        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_FIFO_ERROR;
-    if (statusReg.Alert_Active)
-    {
-        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_ALERT;
-
-        ADI_ADISENSE_CORE_Alert_Code_t alertCodeReg;
-        READ_REG_U16(hDevice, alertCodeReg.VALUE16, CORE_ALERT_CODE);
-        pStatus->alertCode = alertCodeReg.Alert_Code;
-
-        ADI_ADISENSE_CORE_Channel_Alert_Status_t channelAlertStatusReg;
-        READ_REG_U16(hDevice, channelAlertStatusReg.VALUE16,
-                     CORE_CHANNEL_ALERT_STATUS);
-
-        for (unsigned i = 0; i < ADI_SENSE_1000_MAX_CHANNELS; i++)
-        {
-            if (channelAlertStatusReg.VALUE16 & (1 << i))
-            {
-                ADI_ADISENSE_CORE_Alert_Code_Ch_t channelAlertCodeReg;
-                READ_REG_U16(hDevice, channelAlertCodeReg.VALUE16, CORE_ALERT_CODE_CHn(i));
-                pStatus->channelAlertCodes[i] = channelAlertCodeReg.Alert_Code_Ch;
-
-                ADI_ADISENSE_CORE_Alert_Detail_Ch_t alertDetailReg;
-                READ_REG_U16(hDevice, alertDetailReg.VALUE16,
-                             CORE_ALERT_DETAIL_CHn(i));
-
-                if (alertDetailReg.Time_Out)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_TIMEOUT;
-                if (alertDetailReg.Under_Range)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_UNDER_RANGE;
-                if (alertDetailReg.Over_Range)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_OVER_RANGE;
-                if (alertDetailReg.Low_Limit)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_LOW_LIMIT;
-                if (alertDetailReg.High_Limit)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_HIGH_LIMIT;
-                if (alertDetailReg.Sensor_Open)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_SENSOR_OPEN;
-                if (alertDetailReg.Ref_Detect)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_REF_DETECT;
-                if (alertDetailReg.Config_Err)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_CONFIG_ERR;
-                if (alertDetailReg.LUT_Error_Ch)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_LUT_ERR;
-                if (alertDetailReg.Sensor_Not_Ready)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_SENSOR_NOT_READY;
-                if (alertDetailReg.Comp_Not_Ready)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_COMP_NOT_READY;
-                if (alertDetailReg.Under_Voltage)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_UNDER_VOLTAGE;
-                if (alertDetailReg.Over_Voltage)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_OVER_VOLTAGE;
-                if (alertDetailReg.Correction_UnderRange)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_LUT_UNDER_RANGE;
-                if (alertDetailReg.Correction_OverRange)
-                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_LUT_OVER_RANGE;
-            }
-        }
-
-        ADI_ADISENSE_CORE_Alert_Status_2_t alert2Reg;
-        READ_REG_U16(hDevice, alert2Reg.VALUE16, CORE_ALERT_STATUS_2);
-        if (alert2Reg.Configuration_Error)
-            pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_CONFIG_ERROR;
-        if (alert2Reg.LUT_Error)
-            pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_LUT_ERROR;
-    }
-
-    if (statusReg.Error)
-    {
-        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_ERROR;
-
-        ADI_ADISENSE_CORE_Error_Code_t errorCodeReg;
-        READ_REG_U16(hDevice, errorCodeReg.VALUE16, CORE_ERROR_CODE);
-        pStatus->errorCode = errorCodeReg.Error_Code;
-
-        ADI_ADISENSE_CORE_Diagnostics_Status_t diagStatusReg;
-        READ_REG_U16(hDevice, diagStatusReg.VALUE16, CORE_DIAGNOSTICS_STATUS);
-
-        if (diagStatusReg.Diag_Checksum_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_CHECKSUM_ERROR;
-        if (diagStatusReg.Diag_Comms_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_COMMS_ERROR;
-        if (diagStatusReg.Diag_Supply_Monitor_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_SUPPLY_MONITOR_ERROR;
-        if (diagStatusReg.Diag_Supply_Cap_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_SUPPLY_CAP_ERROR;
-        if (diagStatusReg.Diag_Ainm_UV_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_AINM_UV_ERROR;
-        if (diagStatusReg.Diag_Ainm_OV_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_AINM_OV_ERROR;
-        if (diagStatusReg.Diag_Ainp_UV_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_AINP_UV_ERROR;
-        if (diagStatusReg.Diag_Ainp_OV_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_AINP_OV_ERROR;
-        if (diagStatusReg.Diag_Conversion_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_CONVERSION_ERROR;
-        if (diagStatusReg.Diag_Calibration_Error)
-            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_CALIBRATION_ERROR;
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_GetCommandRunningState(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    bool_t *pbCommandRunning)
-{
-    ADI_ADISENSE_CORE_Status_t statusReg;
-
-    READ_REG_U8(hDevice, statusReg.VALUE8, CORE_STATUS);
-
-    /* We should never normally see 0xFF here if the module is operational */
-    if (statusReg.VALUE8 == 0xFF)
-        return ADI_SENSE_ERR_NOT_INITIALIZED;
-
-    *pbCommandRunning = !statusReg.Cmd_Running; /* Active-low, so invert it */
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT executeCommand(
-    ADI_SENSE_DEVICE_HANDLE const hDevice,
-    ADI_ADISENSE_CORE_Command_Special_Command const command,
-    bool_t const bWaitForCompletion)
-{
-    ADI_ADISENSE_CORE_Command_t commandReg;
-    bool_t bCommandRunning;
-    ADI_SENSE_RESULT eRet;
-
-    /*
-     * Don't allow another command to be issued if one is already running, but
-     * make an exception for ADISENSE_CORE_COMMAND_NOP which can be used to
-     * request a running command to be stopped (e.g. continuous measurement)
-     */
-    if (command != ADISENSE_CORE_COMMAND_NOP)
-    {
-        eRet = adi_sense_GetCommandRunningState(hDevice, &bCommandRunning);
-        if (eRet)
-            return eRet;
-
-        if (bCommandRunning)
-            return ADI_SENSE_IN_USE;
-    }
-
-    commandReg.Special_Command = command;
-    WRITE_REG_U8(hDevice, commandReg.VALUE8, CORE_COMMAND);
-
-    if (bWaitForCompletion)
-    {
-        do {
-            /* Allow a minimum 50usec delay for status update before checking */
-            adi_sense_TimeDelayUsec(50);
-
-            eRet = adi_sense_GetCommandRunningState(hDevice, &bCommandRunning);
-            if (eRet)
-                return eRet;
-        } while (bCommandRunning);
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_ApplyConfigUpdates(
-    ADI_SENSE_DEVICE_HANDLE const hDevice)
-{
-    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LATCH_CONFIG, true);
-}
-
-/*!
- * @brief Start a measurement cycle.
- *
- * @param[out]
- *
- * @return Status
- *         - #ADI_SENSE_SUCCESS Call completed successfully.
- *         - #ADI_SENSE_FAILURE
- *
- * @details Sends the latch config command. Configuration for channels in
- *          conversion cycle should be completed before this function.
- *          Channel enabled bit should be set before this function.
- *          Starts a conversion and configures the format of the sample.
- *
- */
-ADI_SENSE_RESULT adi_sense_StartMeasurement(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice,
-    ADI_SENSE_MEASUREMENT_MODE const eMeasurementMode)
-{
-    switch (eMeasurementMode)
-    {
-    case ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK:
-        return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SYSTEM_CHECK, false);
-    case ADI_SENSE_MEASUREMENT_MODE_NORMAL:
-        return executeCommand(hDevice, ADISENSE_CORE_COMMAND_CONVERT_WITH_RAW, false);
-    case ADI_SENSE_MEASUREMENT_MODE_OMIT_RAW:
-        return executeCommand(hDevice, ADISENSE_CORE_COMMAND_CONVERT, false);
-    default:
-        ADI_SENSE_LOG_ERROR("Invalid measurement mode %d specified",
-                            eMeasurementMode);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-}
-
-/*
- * Store the configuration settings to persistent memory on the device.
- * No other command must be running when this is called.
- * Do not power down the device while this command is running.
- */
-ADI_SENSE_RESULT adi_sense_SaveConfig(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SAVE_CONFIG, true);
-}
-
-/*
- * Restore the configuration settings from persistent memory on the device.
- * No other command must be running when this is called.
- */
-ADI_SENSE_RESULT adi_sense_RestoreConfig(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LOAD_CONFIG, true);
-}
-
-/*
- * Store the LUT data to persistent memory on the device.
- * No other command must be running when this is called.
- * Do not power down the device while this command is running.
- */
-ADI_SENSE_RESULT adi_sense_SaveLutData(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SAVE_LUT, true);
-}
-
-/*
- * Restore the LUT data from persistent memory on the device.
- * No other command must be running when this is called.
- */
-ADI_SENSE_RESULT adi_sense_RestoreLutData(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LOAD_LUT, true);
-}
-
-/*
- * Stop the measurement cycles on the device.
- * To be used only if a measurement command is currently running.
- */
-ADI_SENSE_RESULT adi_sense_StopMeasurement(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_NOP, true);
-}
-
-/*
- * Run built-in diagnostic checks on the device.
- * Diagnostics are executed according to the current applied settings.
- * No other command must be running when this is called.
- */
-ADI_SENSE_RESULT adi_sense_RunDiagnostics(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_RUN_DIAGNOSTICS, true);
-}
-
-/*
- * Run self-calibration routines on the device.
- * Calibration is executed according to the current applied settings.
- * No other command must be running when this is called.
- */
-ADI_SENSE_RESULT adi_sense_RunCalibration(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SELF_CALIBRATION, true);
-}
-
-/*
- * Read a set of data samples from the device.
- * This may be called at any time.
- */
-ADI_SENSE_RESULT adi_sense_GetData(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice,
-    ADI_SENSE_MEASUREMENT_MODE const eMeasurementMode,
-    ADI_SENSE_DATA_SAMPLE    * const pSamples,
-    uint32_t                   const nRequested,
-    uint32_t                 * const pnReturned)
-{
-    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
-    uint16_t command = REG_READ_COMMAND |
-        (REG_ADISENSE_CORE_DATA_FIFO & REG_ADDRESS_MASK);
-    uint8_t commandData[2] = {
-        command >> 8,
-        command & 0xFF
-    };
-    uint8_t commandResponse[2];
-    unsigned nValidSamples = 0;
-    ADI_SENSE_RESULT eRet = ADI_SENSE_SUCCESS;
-
-    do {
-        eRet = adi_sense_SpiTransfer(pCtx->hSpi, commandData, commandResponse,
-                                     sizeof(command), false);
-        if (eRet)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to send read command for FIFO register");
-            return eRet;
-        }
-
-        adi_sense_TimeDelayUsec(POST_SPI_TRANSFER_DELAY_USEC);
-    } while ((commandResponse[0] != REG_COMMAND_RESP_0) ||
-             (commandResponse[1] != REG_COMMAND_RESP_1));
-
-    for (unsigned i = 0; i < nRequested; i++)
-    {
-        ADI_ADISENSE_CORE_Data_FIFO_t dataFifoReg;
-        bool_t bHoldCs = true;
-        unsigned readSampleSize = sizeof(dataFifoReg);
-
-        if (eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_OMIT_RAW)
-            readSampleSize -= 3; /* 3B raw value omitted in this case */
-
-        /* Keep the CS signal asserted for all but the last sample */
-        if ((i + 1) == nRequested)
-            bHoldCs = false;
-
-        eRet = adi_sense_SpiTransfer(pCtx->hSpi, NULL, &dataFifoReg,
-                                     readSampleSize, bHoldCs);
-        if (eRet)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to read data from FIFO register");
-            return eRet;
-        }
-
-        if (! dataFifoReg.Ch_Valid)
-        {
-            /*
-             * Reading an invalid sample indicates that there are no
-             * more samples available or we've lost sync with the device.
-             * In the latter case, it might be recoverable, but return here
-             * to let the application check the device status and decide itself.
-             */
-            eRet = ADI_SENSE_INCOMPLETE;
-            break;
-        }
-
-        ADI_SENSE_DATA_SAMPLE *pSample = &pSamples[nValidSamples];
-
-        pSample->status = (ADI_SENSE_DEVICE_STATUS_FLAGS)0;
-        if (dataFifoReg.Ch_Error)
-            pSample->status |= ADI_SENSE_DEVICE_STATUS_ERROR;
-        if (dataFifoReg.Ch_Alert)
-            pSample->status |= ADI_SENSE_DEVICE_STATUS_ALERT;
-
-        if (dataFifoReg.Ch_Raw)
-            pSample->rawValue = dataFifoReg.Raw_Sample;
-        else
-            pSample->rawValue = 0;
-
-        pSample->channelId = dataFifoReg.Channel_ID;
-        pSample->processedValue = dataFifoReg.Sensor_Result;
-
-        nValidSamples++;
-    }
-    *pnReturned = nValidSamples;
-
-    adi_sense_TimeDelayUsec(POST_SPI_TRANSFER_DELAY_USEC);
-
-    return eRet;
-}
-
-/*
- * Close the given ADISENSE device.
- */
-ADI_SENSE_RESULT adi_sense_Close(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice)
-{
-    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
-
-    adi_sense_GpioClose(pCtx->hGpio);
-    adi_sense_SpiClose(pCtx->hSpi);
-    adi_sense_LogClose();
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_WriteRegister(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    uint16_t nAddress,
-    void *pData,
-    unsigned nLength)
-{
-    ADI_SENSE_RESULT eRet;
-    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
-    uint16_t command = REG_WRITE_COMMAND | (nAddress & REG_ADDRESS_MASK);
-    uint8_t commandData[2] = {
-        command >> 8,
-        command & 0xFF
-    };
-    uint8_t commandResponse[2];
-
-    do {
-        eRet = adi_sense_SpiTransfer(pCtx->hSpi, commandData, commandResponse,
-                                     sizeof(command), false);
-        if (eRet)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to send write command for register %u",
-                                nAddress);
-            return eRet;
-        }
-
-        adi_sense_TimeDelayUsec(POST_SPI_TRANSFER_DELAY_USEC);
-    } while ((commandResponse[0] != REG_COMMAND_RESP_0) ||
-             (commandResponse[1] != REG_COMMAND_RESP_1));
-
-    eRet = adi_sense_SpiTransfer(pCtx->hSpi, pData, NULL, nLength, false);
-    if (eRet)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to write data (%dB) to register %u",
-                            nLength, nAddress);
-        return eRet;
-    }
-
-    adi_sense_TimeDelayUsec(POST_SPI_TRANSFER_DELAY_USEC);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_ReadRegister(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    uint16_t nAddress,
-    void *pData,
-    unsigned nLength)
-{
-    ADI_SENSE_RESULT eRet;
-    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
-    uint16_t command = REG_READ_COMMAND | (nAddress & REG_ADDRESS_MASK);
-    uint8_t commandData[2] = {
-        command >> 8,
-        command & 0xFF
-    };
-    uint8_t commandResponse[2];
-
-    do {
-        eRet = adi_sense_SpiTransfer(pCtx->hSpi, commandData, commandResponse,
-                                     sizeof(command), false);
-        if (eRet)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to send read command for register %u",
-                                nAddress);
-            return eRet;
-        }
-
-        adi_sense_TimeDelayUsec(POST_SPI_TRANSFER_DELAY_USEC);
-    } while ((commandResponse[0] != REG_COMMAND_RESP_0) ||
-             (commandResponse[1] != REG_COMMAND_RESP_1));
-
-    eRet = adi_sense_SpiTransfer(pCtx->hSpi, NULL, pData, nLength, false);
-    if (eRet)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to read data (%uB) from register %u",
-                            nLength, nAddress);
-        return eRet;
-    }
-
-    adi_sense_TimeDelayUsec(POST_SPI_TRANSFER_DELAY_USEC);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_GetDeviceReadyState(
-    ADI_SENSE_DEVICE_HANDLE   const hDevice,
-    bool_t                  * const bReady)
-{
-    ADI_ADISENSE_SPI_Chip_Type_t chipTypeReg;
-
-    READ_REG_U8(hDevice, chipTypeReg.VALUE8, SPI_CHIP_TYPE);
-    /* If we read this register successfully, assume the device is ready */
-    *bReady = (chipTypeReg.VALUE8 == REG_ADISENSE_SPI_CHIP_TYPE_RESET);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_GetDataReadyModeInfo(
-    ADI_SENSE_DEVICE_HANDLE         const hDevice,
-    ADI_SENSE_MEASUREMENT_MODE      const eMeasurementMode,
-    ADI_SENSE_1000_OPERATING_MODE * const peOperatingMode,
-    ADI_SENSE_1000_DATAREADY_MODE * const peDataReadyMode,
-    uint32_t                      * const pnSamplesPerDataready,
-    uint32_t                      * const pnSamplesPerCycle)
-{
-    unsigned nChannelsEnabled = 0;
-    unsigned nSamplesPerCycle = 0;
-
-    for (ADI_SENSE_1000_CHANNEL_ID chId = ADI_SENSE_1000_CHANNEL_ID_CJC_0;
-         chId < ADI_SENSE_1000_MAX_CHANNELS;
-         chId++)
-    {
-        ADI_ADISENSE_CORE_Sensor_Details_t sensorDetailsReg;
-        ADI_ADISENSE_CORE_Channel_Count_t channelCountReg;
-
-        if (ADI_SENSE_1000_CHANNEL_IS_VIRTUAL(chId))
-            continue;
-
-        READ_REG_U8(hDevice, channelCountReg.VALUE8, CORE_CHANNEL_COUNTn(chId));
-        READ_REG_U32(hDevice, sensorDetailsReg.VALUE32, CORE_SENSOR_DETAILSn(chId));
-
-        if (channelCountReg.Channel_Enable && !sensorDetailsReg.Do_Not_Publish)
-        {
-            ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
-            unsigned nActualChannels = 1;
-
-            READ_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(chId));
-
-            if (chId == ADI_SENSE_1000_CHANNEL_ID_SPI_0)
-            {
-                /* Some sensors automatically generate samples on additional "virtual" channels
-                 * so these channels must be counted as active when those sensors are selected
-                 * and we use the count from the corresponding "physical" channel */
-                if (sensorTypeReg.Sensor_Type ==
-                    ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_1)
-                    nActualChannels += 2;
-            }
-
-            nChannelsEnabled += nActualChannels;
-            if (eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK)
-                /* Assume a single sample per channel in test mode */
-                nSamplesPerCycle += nActualChannels;
-            else
-                nSamplesPerCycle += nActualChannels *
-                    (channelCountReg.Channel_Count + 1);
-        }
-    }
-
-    if (nChannelsEnabled == 0)
-    {
-        *pnSamplesPerDataready = 0;
-        *pnSamplesPerCycle = 0;
-        return ADI_SENSE_SUCCESS;
-    }
-
-    ADI_ADISENSE_CORE_Mode_t modeReg;
-    READ_REG_U8(hDevice, modeReg.VALUE8, CORE_MODE);
-
-    *pnSamplesPerCycle = nSamplesPerCycle;
-
-    /* Assume DRDY_PER_CONVERSION behaviour in test mode */
-    if ((eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK) ||
-        (modeReg.Drdy_Mode == ADISENSE_CORE_MODE_DRDY_PER_CONVERSION))
-    {
-        *pnSamplesPerDataready = 1;
-    }
-    else if (modeReg.Drdy_Mode == ADISENSE_CORE_MODE_DRDY_PER_CYCLE)
-    {
-        *pnSamplesPerDataready = nSamplesPerCycle;
-    }
-    else
-    {
-        ADI_ADISENSE_CORE_Fifo_Num_Cycles_t fifoNumCyclesReg;
-        READ_REG_U8(hDevice, fifoNumCyclesReg.VALUE8, CORE_FIFO_NUM_CYCLES);
-
-        *pnSamplesPerDataready =
-            nSamplesPerCycle * fifoNumCyclesReg.Fifo_Num_Cycles;
-    }
-
-    /* Assume SINGLECYCLE in test mode */
-    if ((eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK) ||
-        (modeReg.Conversion_Mode == ADISENSE_CORE_MODE_SINGLECYCLE))
-        *peOperatingMode = ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE;
-    else if (modeReg.Conversion_Mode == ADISENSE_CORE_MODE_MULTICYCLE)
-        *peOperatingMode = ADI_SENSE_1000_OPERATING_MODE_MULTICYCLE;
-    else
-        *peOperatingMode = ADI_SENSE_1000_OPERATING_MODE_CONTINUOUS;
-
-    /* Assume DRDY_PER_CONVERSION behaviour in test mode */
-    if ((eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK) ||
-        (modeReg.Drdy_Mode == ADISENSE_CORE_MODE_DRDY_PER_CONVERSION))
-        *peDataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CONVERSION;
-    else if (modeReg.Drdy_Mode == ADISENSE_CORE_MODE_DRDY_PER_CYCLE)
-        *peDataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE;
-    else
-        *peDataReadyMode = ADI_SENSE_1000_DATAREADY_PER_MULTICYCLE_BURST;
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_GetProductID(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_PRODUCT_ID *pProductId)
-{
-    ADI_ADISENSE_SPI_Product_ID_L_t productIdLoReg;
-    ADI_ADISENSE_SPI_Product_ID_H_t productIdHiReg;
-
-    READ_REG_U8(hDevice, productIdLoReg.VALUE8, SPI_PRODUCT_ID_L);
-    READ_REG_U8(hDevice, productIdHiReg.VALUE8, SPI_PRODUCT_ID_H);
-
-    *pProductId = (ADI_SENSE_PRODUCT_ID)((productIdHiReg.VALUE8 << 8)
-                                         | productIdLoReg.VALUE8);
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetPowerMode(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_POWER_MODE powerMode)
-{
-    ADI_ADISENSE_CORE_Power_Config_t powerConfigReg;
-
-    if (powerMode == ADI_SENSE_1000_POWER_MODE_LOW)
-    {
-        powerConfigReg.Power_Mode_ADC = ADISENSE_CORE_POWER_CONFIG_ADC_LOW_POWER;
-    }
-    else if (powerMode == ADI_SENSE_1000_POWER_MODE_MID)
-    {
-        powerConfigReg.Power_Mode_ADC = ADISENSE_CORE_POWER_CONFIG_ADC_MID_POWER;
-    }
-    else if (powerMode == ADI_SENSE_1000_POWER_MODE_FULL)
-    {
-        powerConfigReg.Power_Mode_ADC = ADISENSE_CORE_POWER_CONFIG_ADC_FULL_POWER;
-    }
-    else
-    {
-        ADI_SENSE_LOG_ERROR("Invalid power mode %d specified", powerMode);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    WRITE_REG_U8(hDevice, powerConfigReg.VALUE8, CORE_POWER_CONFIG);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetPowerConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_POWER_CONFIG *pPowerConfig)
-{
-    ADI_SENSE_RESULT eRet;
-
-    eRet = adi_sense_SetPowerMode(hDevice, pPowerConfig->powerMode);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set power mode");
-        return eRet;
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetMode(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_OPERATING_MODE eOperatingMode,
-    ADI_SENSE_1000_DATAREADY_MODE eDataReadyMode)
-{
-    ADI_ADISENSE_CORE_Mode_t modeReg;
-
-    modeReg.VALUE8 = REG_RESET_VAL(CORE_MODE);
-
-    if (eOperatingMode == ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE)
-    {
-        modeReg.Conversion_Mode = ADISENSE_CORE_MODE_SINGLECYCLE;
-    }
-    else if (eOperatingMode == ADI_SENSE_1000_OPERATING_MODE_CONTINUOUS)
-    {
-        modeReg.Conversion_Mode = ADISENSE_CORE_MODE_CONTINUOUS;
-    }
-    else if (eOperatingMode == ADI_SENSE_1000_OPERATING_MODE_MULTICYCLE)
-    {
-        modeReg.Conversion_Mode = ADISENSE_CORE_MODE_MULTICYCLE;
-    }
-    else
-    {
-        ADI_SENSE_LOG_ERROR("Invalid operating mode %d specified",
-                            eOperatingMode);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    if (eDataReadyMode == ADI_SENSE_1000_DATAREADY_PER_CONVERSION)
-    {
-        modeReg.Drdy_Mode = ADISENSE_CORE_MODE_DRDY_PER_CONVERSION;
-    }
-    else if (eDataReadyMode == ADI_SENSE_1000_DATAREADY_PER_CYCLE)
-    {
-        modeReg.Drdy_Mode = ADISENSE_CORE_MODE_DRDY_PER_CYCLE;
-    }
-    else if (eDataReadyMode == ADI_SENSE_1000_DATAREADY_PER_MULTICYCLE_BURST)
-    {
-        if (eOperatingMode != ADI_SENSE_1000_OPERATING_MODE_MULTICYCLE)
-        {
-            ADI_SENSE_LOG_ERROR(
-                "Data-ready mode %d cannot be used with operating mode %d",
-                eDataReadyMode, eOperatingMode);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-        else
-        {
-            modeReg.Drdy_Mode = ADISENSE_CORE_MODE_DRDY_PER_FIFO_FILL;
-        }
-    }
-    else
-    {
-        ADI_SENSE_LOG_ERROR("Invalid data-ready mode %d specified", eDataReadyMode);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    WRITE_REG_U8(hDevice, modeReg.VALUE8, CORE_MODE);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_SetCycleInterval(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    uint32_t nCycleInterval)
-{
-    ADI_ADISENSE_CORE_Cycle_Control_t cycleControlReg;
-
-    cycleControlReg.VALUE16 = REG_RESET_VAL(CORE_CYCLE_CONTROL);
-
-    if (nCycleInterval < (1 << 12))
-    {
-        cycleControlReg.Cycle_Time_Units = ADISENSE_CORE_CYCLE_CONTROL_MICROSECONDS;
-    }
-    else if (nCycleInterval < (1000 * (1 << 12)))
-    {
-        cycleControlReg.Cycle_Time_Units = ADISENSE_CORE_CYCLE_CONTROL_MILLISECONDS;
-        nCycleInterval /= 1000;
-    }
-    else
-    {
-        cycleControlReg.Cycle_Time_Units = ADISENSE_CORE_CYCLE_CONTROL_SECONDS;
-        nCycleInterval /= 1000000;
-    }
-
-    CHECK_REG_FIELD_VAL(CORE_CYCLE_CONTROL_CYCLE_TIME, nCycleInterval);
-    cycleControlReg.Cycle_Time = nCycleInterval;
-
-    WRITE_REG_U16(hDevice, cycleControlReg.VALUE16, CORE_CYCLE_CONTROL);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetMultiCycleConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_MULTICYCLE_CONFIG *pMultiCycleConfig)
-{
-    CHECK_REG_FIELD_VAL(CORE_FIFO_NUM_CYCLES_FIFO_NUM_CYCLES,
-                        pMultiCycleConfig->cyclesPerBurst);
-
-    WRITE_REG_U8(hDevice, pMultiCycleConfig->cyclesPerBurst,
-                 CORE_FIFO_NUM_CYCLES);
-
-    WRITE_REG_U32(hDevice, pMultiCycleConfig->burstInterval,
-                  CORE_MULTI_CYCLE_REPEAT_INTERVAL);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetExternalReferenceValues(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    float32_t externalRef1Value,
-    float32_t externalRef2Value)
-{
-    WRITE_REG_FLOAT(hDevice, externalRef1Value, CORE_EXTERNAL_REFERENCE1);
-    WRITE_REG_FLOAT(hDevice, externalRef2Value, CORE_EXTERNAL_REFERENCE2);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetMeasurementConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_MEASUREMENT_CONFIG *pMeasConfig)
-{
-    ADI_SENSE_RESULT eRet;
-
-    eRet = adi_sense_SetMode(hDevice,
-                            pMeasConfig->operatingMode,
-                            pMeasConfig->dataReadyMode);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set operating mode");
-        return eRet;
-    }
-
-    if (pMeasConfig->operatingMode != ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE)
-    {
-        eRet = adi_sense_SetCycleInterval(hDevice, pMeasConfig->cycleInterval);
-        if (eRet != ADI_SENSE_SUCCESS)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to set cycle interval");
-            return eRet;
-        }
-    }
-
-    if (pMeasConfig->operatingMode == ADI_SENSE_1000_OPERATING_MODE_MULTICYCLE)
-    {
-        eRet = adi_sense_SetMultiCycleConfig(hDevice,
-                                            &pMeasConfig->multiCycleConfig);
-        if (eRet != ADI_SENSE_SUCCESS)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to set multi-cycle configuration");
-            return eRet;
-        }
-    }
-
-    eRet = adi_sense_SetExternalReferenceValues(hDevice,
-                                                pMeasConfig->externalRef1Value,
-                                                pMeasConfig->externalRef2Value);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set external reference values");
-        return eRet;
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetDiagnosticsConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_DIAGNOSTICS_CONFIG *pDiagnosticsConfig)
-{
-    ADI_ADISENSE_CORE_Diagnostics_Control_t diagnosticsControlReg;
-
-    diagnosticsControlReg.VALUE16 = REG_RESET_VAL(CORE_DIAGNOSTICS_CONTROL);
-
-    if (pDiagnosticsConfig->disableGlobalDiag)
-        diagnosticsControlReg.Diag_Global_En = 0;
-    else
-        diagnosticsControlReg.Diag_Global_En = 1;
-
-    if (pDiagnosticsConfig->disableMeasurementDiag)
-        diagnosticsControlReg.Diag_Meas_En = 0;
-    else
-        diagnosticsControlReg.Diag_Meas_En = 1;
-
-    switch (pDiagnosticsConfig->osdFrequency)
-    {
-    case ADI_SENSE_1000_OPEN_SENSOR_DIAGNOSTICS_DISABLED:
-        diagnosticsControlReg.Diag_OSD_Freq = ADISENSE_CORE_DIAGNOSTICS_CONTROL_OCD_OFF;
-        break;
-    case ADI_SENSE_1000_OPEN_SENSOR_DIAGNOSTICS_PER_CYCLE:
-        diagnosticsControlReg.Diag_OSD_Freq = ADISENSE_CORE_DIAGNOSTICS_CONTROL_OCD_PER_1_CYCLE;
-        break;
-    case ADI_SENSE_1000_OPEN_SENSOR_DIAGNOSTICS_PER_100_CYCLES:
-        diagnosticsControlReg.Diag_OSD_Freq = ADISENSE_CORE_DIAGNOSTICS_CONTROL_OCD_PER_100_CYCLES;
-        break;
-    case ADI_SENSE_1000_OPEN_SENSOR_DIAGNOSTICS_PER_1000_CYCLES:
-        diagnosticsControlReg.Diag_OSD_Freq = ADISENSE_CORE_DIAGNOSTICS_CONTROL_OCD_PER_1000_CYCLES;
-        break;
-    default:
-        ADI_SENSE_LOG_ERROR("Invalid open-sensor diagnostic frequency %d specified",
-                            pDiagnosticsConfig->osdFrequency);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    WRITE_REG_U16(hDevice, diagnosticsControlReg.VALUE16, CORE_DIAGNOSTICS_CONTROL);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetChannelCount(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    uint32_t nMeasurementsPerCycle)
-{
-    ADI_ADISENSE_CORE_Channel_Count_t channelCountReg;
-
-    channelCountReg.VALUE8 = REG_RESET_VAL(CORE_CHANNEL_COUNTn);
-
-    if (nMeasurementsPerCycle > 0)
-    {
-        nMeasurementsPerCycle -= 1;
-
-        CHECK_REG_FIELD_VAL(CORE_CHANNEL_COUNT_CHANNEL_COUNT,
-                            nMeasurementsPerCycle);
-
-        channelCountReg.Channel_Enable = 1;
-        channelCountReg.Channel_Count = nMeasurementsPerCycle;
-    }
-    else
-    {
-        channelCountReg.Channel_Enable = 0;
-    }
-
-    WRITE_REG_U8(hDevice, channelCountReg.VALUE8, CORE_CHANNEL_COUNTn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetChannelAdcSensorType(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_ADC_SENSOR_TYPE sensorType)
-{
-    ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
-
-    sensorTypeReg.VALUE16 = REG_RESET_VAL(CORE_SENSOR_TYPEn);
-
-    /* Ensure that the sensor type is valid for this channel */
-    switch(sensorType)
-    {
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_J_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_K_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_T_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_1_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_2_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_3_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_4_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_J_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_K_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_T_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_1_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_2_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_3_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_4_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_PT100_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_PT1000_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_1_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_2_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_3_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_4_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_PT100_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_PT1000_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_1_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_2_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_3_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_4_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_PT100_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_PT1000_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_1_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_2_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_3_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_4_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_PT100_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_PT1000_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_1_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_2_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_3_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_4_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_3_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_4_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_3_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_4_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_2_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_3_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_4_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_2_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_3_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_4_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_A_10K_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_B_10K_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_1_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_2_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_3_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_4_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_A_10K_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_B_10K_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_1_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_2_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_3_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_4_ADV_L2:
-        if (! ADI_SENSE_1000_CHANNEL_IS_ADC_SENSOR(eChannelId))
-        {
-            ADI_SENSE_LOG_ERROR(
-                "Invalid ADC sensor type %d specified for channel %d",
-                sensorType, eChannelId);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-        break;
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_PT100_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_PT1000_DEF_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_1_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_2_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_3_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_4_DEF_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_PT100_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_PT1000_ADV_L1:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_1_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_2_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_3_ADV_L2:
-    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_4_ADV_L2:
-        if (! (ADI_SENSE_1000_CHANNEL_IS_ADC_SENSOR(eChannelId) ||
-               ADI_SENSE_1000_CHANNEL_IS_ADC_CJC(eChannelId)))
-        {
-            ADI_SENSE_LOG_ERROR(
-                "Invalid ADC sensor type %d specified for channel %d",
-                sensorType, eChannelId);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-        break;
-    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE:
-    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_HONEYWELL_TRUSTABILITY:
-    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_AMPHENOL_NPA300X:
-    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_3_DEF:
-        if (! ADI_SENSE_1000_CHANNEL_IS_ADC_VOLTAGE(eChannelId))
-        {
-            ADI_SENSE_LOG_ERROR(
-                "Invalid ADC sensor type %d specified for channel %d",
-                sensorType, eChannelId);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-        break;
-    case ADI_SENSE_1000_ADC_SENSOR_CURRENT:
-    case ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_HONEYWELL_PX2:
-    case ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_2_DEF:
-        if (! ADI_SENSE_1000_CHANNEL_IS_ADC_CURRENT(eChannelId))
-        {
-            ADI_SENSE_LOG_ERROR(
-                "Invalid ADC sensor type %d specified for channel %d",
-                sensorType, eChannelId);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-        break;
-    default:
-        ADI_SENSE_LOG_ERROR("Invalid/unsupported ADC sensor type %d specified",
-                            sensorType);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    sensorTypeReg.Sensor_Type = sensorType;
-
-    WRITE_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetChannelAdcSensorDetails(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
-/*
- * TODO - it would be nice if the general- vs. ADC-specific sensor details could be split into separate registers
- * General details:
- * - Measurement_Units
- * - Compensation_Channel
- * - CJC_Publish (if "CJC" was removed from the name)
- * ADC-specific details:
- * - PGA_Gain
- * - Reference_Select
- * - Reference_Buffer_Disable
- * - Vbias
- */
-{
-    ADI_SENSE_1000_ADC_CHANNEL_CONFIG *pAdcChannelConfig = &pChannelConfig->adcChannelConfig;
-    ADI_SENSE_1000_ADC_REFERENCE_CONFIG *pRefConfig = &pAdcChannelConfig->reference;
-    ADI_ADISENSE_CORE_Sensor_Details_t sensorDetailsReg;
-
-    sensorDetailsReg.VALUE32 = REG_RESET_VAL(CORE_SENSOR_DETAILSn);
-
-    switch(pChannelConfig->measurementUnit)
-    {
-    case ADI_SENSE_1000_MEASUREMENT_UNIT_FAHRENHEIT:
-        sensorDetailsReg.Measurement_Units = ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGF;
-        break;
-    case ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS:
-    case ADI_SENSE_1000_MEASUREMENT_UNIT_DEFAULT:
-        sensorDetailsReg.Measurement_Units = ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGC;
-        break;
-    default:
-        ADI_SENSE_LOG_ERROR("Invalid measurement unit %d specified",
-                            pChannelConfig->measurementUnit);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    sensorDetailsReg.Compensation_Channel = pChannelConfig->compensationChannel;
-
-    switch(pRefConfig->type)
-    {
-    case ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_INTERNAL_1:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_RINT1;
-        break;
-    case ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_INTERNAL_2:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_RINT2;
-        break;
-    case ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_INTERNAL:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_INT;
-        break;
-    case ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_AVDD:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_AVDD;
-        break;
-    case ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_EXTERNAL_1:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_REXT1;
-        break;
-    case ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_EXTERNAL_2:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_REXT2;
-        break;
-    case ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_EXTERNAL_1:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_VEXT1;
-        break;
-    case ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_EXTERNAL_2:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_VEXT2;
-        break;
-    case ADI_SENSE_1000_ADC_REFERENCE_BRIDGE_EXCITATION:
-        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_EXC;
-        break;
-    default:
-        ADI_SENSE_LOG_ERROR("Invalid ADC reference type %d specified",
-                            pRefConfig->type);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    switch(pAdcChannelConfig->gain)
-    {
-    case ADI_SENSE_1000_ADC_GAIN_1X:
-        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_1;
-        break;
-    case ADI_SENSE_1000_ADC_GAIN_2X:
-        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_2;
-        break;
-    case ADI_SENSE_1000_ADC_GAIN_4X:
-        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_4;
-        break;
-    case ADI_SENSE_1000_ADC_GAIN_8X:
-        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_8;
-        break;
-    case ADI_SENSE_1000_ADC_GAIN_16X:
-        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_16;
-        break;
-    case ADI_SENSE_1000_ADC_GAIN_32X:
-        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_32;
-        break;
-    case ADI_SENSE_1000_ADC_GAIN_64X:
-        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_64;
-        break;
-    case ADI_SENSE_1000_ADC_GAIN_128X:
-        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_128;
-        break;
-    default:
-        ADI_SENSE_LOG_ERROR("Invalid ADC gain %d specified",
-                            pAdcChannelConfig->gain);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    if (pAdcChannelConfig->enableVbias)
-        sensorDetailsReg.Vbias = 1;
-    else
-        sensorDetailsReg.Vbias = 0;
-
-    if (pAdcChannelConfig->reference.disableBuffer)
-        sensorDetailsReg.Reference_Buffer_Disable = 1;
-    else
-        sensorDetailsReg.Reference_Buffer_Disable = 0;
-
-    if (pChannelConfig->disablePublishing)
-        sensorDetailsReg.Do_Not_Publish = 1;
-    else
-        sensorDetailsReg.Do_Not_Publish = 0;
-
-    WRITE_REG_U32(hDevice, sensorDetailsReg.VALUE32, CORE_SENSOR_DETAILSn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetChannelAdcFilter(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_ADC_FILTER_CONFIG *pFilterConfig)
-{
-    ADI_ADISENSE_CORE_Filter_Select_t filterSelectReg;
-
-    filterSelectReg.VALUE32 = REG_RESET_VAL(CORE_FILTER_SELECTn);
-
-    if (pFilterConfig->type == ADI_SENSE_1000_ADC_FILTER_SINC4)
-    {
-        filterSelectReg.ADC_Filter_Type = ADISENSE_CORE_FILTER_SELECT_FILTER_SINC4;
-        filterSelectReg.ADC_FS = pFilterConfig->fs;
-    }
-    else if (pFilterConfig->type == ADI_SENSE_1000_ADC_FILTER_FIR_20SPS)
-    {
-        filterSelectReg.ADC_Filter_Type = ADISENSE_CORE_FILTER_SELECT_FILTER_FIR_20SPS;
-    }
-    else if (pFilterConfig->type == ADI_SENSE_1000_ADC_FILTER_FIR_25SPS)
-    {
-        filterSelectReg.ADC_Filter_Type = ADISENSE_CORE_FILTER_SELECT_FILTER_FIR_25SPS;
-    }
-    else
-    {
-        ADI_SENSE_LOG_ERROR("Invalid ADC filter type %d specified",
-                            pFilterConfig->type);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    WRITE_REG_U32(hDevice, filterSelectReg.VALUE32, CORE_FILTER_SELECTn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetChannelAdcCurrentConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_ADC_EXC_CURRENT_CONFIG *pCurrentConfig)
-{
-    ADI_ADISENSE_CORE_Channel_Excitation_t channelExcitationReg;
-
-    channelExcitationReg.VALUE8 = REG_RESET_VAL(CORE_CHANNEL_EXCITATIONn);
-
-    if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_NONE)
-    {
-        channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_OFF;
-    }
-    else
-    {
-        if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_50uA)
-            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_50UA;
-        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_100uA)
-            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_100UA;
-        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_250uA)
-            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_250UA;
-        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_500uA)
-            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_500UA;
-        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_750uA)
-            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_750UA;
-        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_1000uA)
-            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_1000UA;
-        else
-        {
-            ADI_SENSE_LOG_ERROR("Invalid ADC excitation current %d specified",
-                                pCurrentConfig->outputLevel);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-    }
-
-    WRITE_REG_U8(hDevice, channelExcitationReg.VALUE8, CORE_CHANNEL_EXCITATIONn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_SetAdcChannelConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
-{
-    ADI_SENSE_RESULT eRet;
-    ADI_SENSE_1000_ADC_CHANNEL_CONFIG *pAdcChannelConfig =
-        &pChannelConfig->adcChannelConfig;
-
-    eRet = adi_sense_SetChannelAdcSensorType(hDevice, eChannelId,
-                                             pAdcChannelConfig->sensor);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set ADC sensor type for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    eRet = adi_sense_SetChannelAdcSensorDetails(hDevice, eChannelId,
-                                                pChannelConfig);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set ADC sensor details for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    eRet = adi_sense_SetChannelAdcFilter(hDevice, eChannelId,
-                                         &pAdcChannelConfig->filter);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set ADC filter for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    eRet = adi_sense_SetChannelAdcCurrentConfig(hDevice, eChannelId,
-                                                &pAdcChannelConfig->current);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set ADC current for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-
-static ADI_SENSE_RESULT adi_sense_SetDigitalSensorCommands(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_DIGITAL_SENSOR_COMMAND *pConfigCommand,
-    ADI_SENSE_1000_DIGITAL_SENSOR_COMMAND *pDataRequestCommand)
-{
-    ADI_ADISENSE_CORE_Digital_Sensor_Num_Cmds_t numCmdsReg;
-
-    numCmdsReg.VALUE8 = REG_RESET_VAL(CORE_DIGITAL_SENSOR_NUM_CMDSn);
-
-    CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_NUM_CMDS_DIGITAL_SENSOR_NUM_CFG_CMDS,
-                        pConfigCommand->commandLength);
-    CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_NUM_CMDS_DIGITAL_SENSOR_NUM_READ_CMDS,
-                        pDataRequestCommand->commandLength);
-
-    numCmdsReg.Digital_Sensor_Num_Cfg_Cmds = pConfigCommand->commandLength;
-    numCmdsReg.Digital_Sensor_Num_Read_Cmds = pDataRequestCommand->commandLength;
-
-    WRITE_REG_U8(hDevice, numCmdsReg.VALUE8,
-                 CORE_DIGITAL_SENSOR_NUM_CMDSn(eChannelId));
-
-    /*
-     * NOTE - the fall-through cases in the switch statement below are
-     * intentional, so temporarily disable related compiler warnings which may
-     * be produced here by GCC
-     */
-#ifndef __CC_ARM
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
-#endif
-
-    switch (pConfigCommand->commandLength)
-    {
-    case 7:
-        WRITE_REG_U8(hDevice, pConfigCommand->command[6],
-                     CORE_DIGITAL_SENSOR_COMMAND7n(eChannelId));
-    case 6:
-        WRITE_REG_U8(hDevice, pConfigCommand->command[5],
-                     CORE_DIGITAL_SENSOR_COMMAND6n(eChannelId));
-    case 5:
-        WRITE_REG_U8(hDevice, pConfigCommand->command[4],
-                     CORE_DIGITAL_SENSOR_COMMAND5n(eChannelId));
-    case 4:
-        WRITE_REG_U8(hDevice, pConfigCommand->command[3],
-                     CORE_DIGITAL_SENSOR_COMMAND4n(eChannelId));
-    case 3:
-        WRITE_REG_U8(hDevice, pConfigCommand->command[2],
-                     CORE_DIGITAL_SENSOR_COMMAND3n(eChannelId));
-    case 2:
-        WRITE_REG_U8(hDevice, pConfigCommand->command[1],
-                     CORE_DIGITAL_SENSOR_COMMAND2n(eChannelId));
-    case 1:
-        WRITE_REG_U8(hDevice, pConfigCommand->command[0],
-                     CORE_DIGITAL_SENSOR_COMMAND1n(eChannelId));
-    case 0:
-    default:
-        break;
-    };
-
-    switch (pDataRequestCommand->commandLength)
-    {
-    case 7:
-        WRITE_REG_U8(hDevice, pDataRequestCommand->command[6],
-                     CORE_DIGITAL_SENSOR_READ_CMD7n(eChannelId));
-    case 6:
-        WRITE_REG_U8(hDevice, pDataRequestCommand->command[5],
-                     CORE_DIGITAL_SENSOR_READ_CMD6n(eChannelId));
-    case 5:
-        WRITE_REG_U8(hDevice, pDataRequestCommand->command[4],
-                     CORE_DIGITAL_SENSOR_READ_CMD5n(eChannelId));
-    case 4:
-        WRITE_REG_U8(hDevice, pDataRequestCommand->command[3],
-                     CORE_DIGITAL_SENSOR_READ_CMD4n(eChannelId));
-    case 3:
-        WRITE_REG_U8(hDevice, pDataRequestCommand->command[2],
-                     CORE_DIGITAL_SENSOR_READ_CMD3n(eChannelId));
-    case 2:
-        WRITE_REG_U8(hDevice, pDataRequestCommand->command[1],
-                     CORE_DIGITAL_SENSOR_READ_CMD2n(eChannelId));
-    case 1:
-        WRITE_REG_U8(hDevice, pDataRequestCommand->command[0],
-                     CORE_DIGITAL_SENSOR_READ_CMD1n(eChannelId));
-    case 0:
-    default:
-        break;
-    };
-
-    /* Re-enable the implicit-fallthrough warning */
-#ifndef __CC_ARM
-#pragma GCC diagnostic pop
-#endif
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetDigitalSensorFormat(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_DIGITAL_SENSOR_DATA_FORMAT *pDataFormat)
-{
-    ADI_ADISENSE_CORE_Digital_Sensor_Config_t sensorConfigReg;
-
-    sensorConfigReg.VALUE16 = REG_RESET_VAL(CORE_DIGITAL_SENSOR_CONFIGn);
-
-    if (pDataFormat->coding != ADI_SENSE_1000_DIGITAL_SENSOR_DATA_CODING_NONE)
-    {
-        if (pDataFormat->frameLength == 0)
-        {
-            ADI_SENSE_LOG_ERROR("Invalid frame length specified for digital sensor data format");
-            return ADI_SENSE_INVALID_PARAM;
-        }
-        if (pDataFormat->numDataBits == 0)
-        {
-            ADI_SENSE_LOG_ERROR("Invalid frame length specified for digital sensor data format");
-            return ADI_SENSE_INVALID_PARAM;
-        }
-
-        CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_CONFIG_DIGITAL_SENSOR_READ_BYTES,
-                            pDataFormat->frameLength - 1);
-        CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_CONFIG_DIGITAL_SENSOR_DATA_BITS,
-                            pDataFormat->numDataBits - 1);
-        CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_CONFIG_DIGITAL_SENSOR_BIT_OFFSET,
-                            pDataFormat->bitOffset);
-
-        sensorConfigReg.Digital_Sensor_Read_Bytes = pDataFormat->frameLength - 1;
-        sensorConfigReg.Digital_Sensor_Data_Bits = pDataFormat->numDataBits - 1;
-        sensorConfigReg.Digital_Sensor_Bit_Offset = pDataFormat->bitOffset;
-        sensorConfigReg.Digital_Sensor_Left_Aligned = pDataFormat->leftJustified ? 1 : 0;
-        sensorConfigReg.Digital_Sensor_Little_Endian = pDataFormat->littleEndian ? 1 : 0;
-
-        switch (pDataFormat->coding)
-        {
-        case ADI_SENSE_1000_DIGITAL_SENSOR_DATA_CODING_UNIPOLAR:
-            sensorConfigReg.Digital_Sensor_Coding = ADISENSE_CORE_DIGITAL_SENSOR_CONFIG_CODING_UNIPOLAR;
-            break;
-        case ADI_SENSE_1000_DIGITAL_SENSOR_DATA_CODING_TWOS_COMPLEMENT:
-            sensorConfigReg.Digital_Sensor_Coding = ADISENSE_CORE_DIGITAL_SENSOR_CONFIG_CODING_TWOS_COMPL;
-            break;
-        case ADI_SENSE_1000_DIGITAL_SENSOR_DATA_CODING_OFFSET_BINARY:
-            sensorConfigReg.Digital_Sensor_Coding = ADISENSE_CORE_DIGITAL_SENSOR_CONFIG_CODING_OFFSET_BINARY;
-            break;
-        default:
-            ADI_SENSE_LOG_ERROR("Invalid coding specified for digital sensor data format");
-            return ADI_SENSE_INVALID_PARAM;
-        }
-    }
-
-    WRITE_REG_U16(hDevice, sensorConfigReg.VALUE16,
-                  CORE_DIGITAL_SENSOR_CONFIGn(eChannelId));
-
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetChannelI2cSensorType(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_I2C_SENSOR_TYPE sensorType)
-{
-    ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
-
-    sensorTypeReg.VALUE16 = REG_RESET_VAL(CORE_SENSOR_TYPEn);
-
-    /* Ensure that the sensor type is valid for this channel */
-    switch(sensorType)
-    {
-    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_HONEYWELL_HUMIDICON:
-        sensorTypeReg.Sensor_Type = ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_HONEYWELL_HUMIDICON;
-        break;
-    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_SENSIRION_SHT3X:
-        sensorTypeReg.Sensor_Type = ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_SENSIRION_SHT3X;
-        break;
-    default:
-        ADI_SENSE_LOG_ERROR("Unsupported I2C sensor type %d specified", sensorType);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    WRITE_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetChannelI2cSensorAddress(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    uint32_t deviceAddress)
-{
-    CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_ADDRESS_DIGITAL_SENSOR_ADDRESS, deviceAddress);
-    WRITE_REG_U8(hDevice, deviceAddress, CORE_DIGITAL_SENSOR_ADDRESSn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_SetI2cChannelConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_I2C_CHANNEL_CONFIG *pI2cChannelConfig)
-{
-    ADI_SENSE_RESULT eRet;
-
-    eRet = adi_sense_SetChannelI2cSensorType(hDevice, eChannelId,
-                                            pI2cChannelConfig->sensor);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor type for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    eRet = adi_sense_SetChannelI2cSensorAddress(hDevice, eChannelId,
-                                               pI2cChannelConfig->deviceAddress);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor address for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    eRet = adi_sense_SetDigitalSensorCommands(hDevice, eChannelId,
-                                              &pI2cChannelConfig->configurationCommand,
-                                              &pI2cChannelConfig->dataRequestCommand);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor commands for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    eRet = adi_sense_SetDigitalSensorFormat(hDevice, eChannelId,
-                                            &pI2cChannelConfig->dataFormat);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor data format for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-static ADI_SENSE_RESULT adi_sense_SetChannelSpiSensorType(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_SPI_SENSOR_TYPE sensorType)
-{
-    ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
-
-    sensorTypeReg.VALUE16 = REG_RESET_VAL(CORE_SENSOR_TYPEn);
-
-    /* Ensure that the sensor type is valid for this channel */
-    switch(sensorType)
-    {
-    case ADI_SENSE_1000_SPI_SENSOR_PRESSURE_HONEYWELL_TRUSTABILITY:
-        sensorTypeReg.Sensor_Type = ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_HONEYWELL_TRUSTABILITY;
-        break;
-    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_ADI_ADXL362:
-        sensorTypeReg.Sensor_Type = ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_1;
-        break;
-    default:
-        ADI_SENSE_LOG_ERROR("Unsupported SPI sensor type %d specified", sensorType);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    WRITE_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_SetSpiChannelConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_SPI_CHANNEL_CONFIG *pSpiChannelConfig)
-{
-    ADI_SENSE_RESULT eRet;
-
-    eRet = adi_sense_SetChannelSpiSensorType(hDevice, eChannelId,
-                                             pSpiChannelConfig->sensor);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set SPI sensor type for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    eRet = adi_sense_SetDigitalSensorCommands(hDevice, eChannelId,
-                                              &pSpiChannelConfig->configurationCommand,
-                                              &pSpiChannelConfig->dataRequestCommand);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set SPI sensor commands for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    eRet = adi_sense_SetDigitalSensorFormat(hDevice, eChannelId,
-                                            &pSpiChannelConfig->dataFormat);
-    if (eRet != ADI_SENSE_SUCCESS)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set SPI sensor data format for channel %d",
-                            eChannelId);
-        return eRet;
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetChannelThresholdLimits(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    float32_t fHighThresholdLimit,
-    float32_t fLowThresholdLimit)
-{
-    /*
-     * If the low/high limits are *both* set to 0 in memory, or NaNs, assume
-     * that they are unset, or not required, and use infinity defaults instead
-     */
-    if (fHighThresholdLimit == 0.0f && fLowThresholdLimit == 0.0f)
-    {
-        fHighThresholdLimit = INFINITY;
-        fLowThresholdLimit = -INFINITY;
-    }
-    else
-    {
-        if (isnan(fHighThresholdLimit))
-            fHighThresholdLimit = INFINITY;
-        if (isnan(fLowThresholdLimit))
-            fLowThresholdLimit = -INFINITY;
-    }
-
-    WRITE_REG_FLOAT(hDevice, fHighThresholdLimit,
-                    CORE_HIGH_THRESHOLD_LIMITn(eChannelId));
-    WRITE_REG_FLOAT(hDevice, fLowThresholdLimit,
-                    CORE_LOW_THRESHOLD_LIMITn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetOffsetGain(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    float32_t fOffsetAdjustment,
-    float32_t fGainAdjustment)
-{
-    /* Replace with default values if NaNs are specified (or 0.0 for gain) */
-    if (isnan(fGainAdjustment) || (fGainAdjustment == 0.0f))
-        fGainAdjustment = 1.0f;
-    if (isnan(fOffsetAdjustment))
-        fOffsetAdjustment = 0.0f;
-
-    WRITE_REG_FLOAT(hDevice, fGainAdjustment, CORE_SENSOR_GAINn(eChannelId));
-    WRITE_REG_FLOAT(hDevice, fOffsetAdjustment, CORE_SENSOR_OFFSETn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetChannelSettlingTime(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    uint32_t nSettlingTime)
-{
-    CHECK_REG_FIELD_VAL(CORE_SETTLING_TIME_SETTLING_TIME, nSettlingTime);
-
-    WRITE_REG_U16(hDevice, nSettlingTime, CORE_SETTLING_TIMEn(eChannelId));
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetChannelConfig(
-    ADI_SENSE_DEVICE_HANDLE hDevice,
-    ADI_SENSE_1000_CHANNEL_ID eChannelId,
-    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
-{
-    ADI_SENSE_RESULT eRet;
-
-    if (! ADI_SENSE_1000_CHANNEL_IS_VIRTUAL(eChannelId))
-    {
-        /* If the channel is not enabled, disable it and return */
-        if (! pChannelConfig->enableChannel)
-            return adi_sense_1000_SetChannelCount(hDevice, eChannelId, 0);
-
-        eRet = adi_sense_1000_SetChannelCount(hDevice, eChannelId,
-                                              pChannelConfig->measurementsPerCycle);
-        if (eRet != ADI_SENSE_SUCCESS)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to set measurement count for channel %d",
-                                eChannelId);
-            return eRet;
-        }
-
-        switch (eChannelId)
-        {
-        case ADI_SENSE_1000_CHANNEL_ID_CJC_0:
-        case ADI_SENSE_1000_CHANNEL_ID_CJC_1:
-        case ADI_SENSE_1000_CHANNEL_ID_SENSOR_0:
-        case ADI_SENSE_1000_CHANNEL_ID_SENSOR_1:
-        case ADI_SENSE_1000_CHANNEL_ID_SENSOR_2:
-        case ADI_SENSE_1000_CHANNEL_ID_SENSOR_3:
-        case ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0:
-        case ADI_SENSE_1000_CHANNEL_ID_CURRENT_0:
-            eRet = adi_sense_SetAdcChannelConfig(hDevice, eChannelId, pChannelConfig);
-            break;
-        case ADI_SENSE_1000_CHANNEL_ID_I2C_0:
-        case ADI_SENSE_1000_CHANNEL_ID_I2C_1:
-            eRet = adi_sense_SetI2cChannelConfig(hDevice, eChannelId,
-                                                 &pChannelConfig->i2cChannelConfig);
-            break;
-        case ADI_SENSE_1000_CHANNEL_ID_SPI_0:
-            eRet = adi_sense_SetSpiChannelConfig(hDevice, eChannelId,
-                                                 &pChannelConfig->spiChannelConfig);
-            break;
-        default:
-            ADI_SENSE_LOG_ERROR("Invalid channel ID %d specified", eChannelId);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-
-        eRet = adi_sense_1000_SetChannelSettlingTime(hDevice, eChannelId,
-                                                     pChannelConfig->extraSettlingTime);
-        if (eRet != ADI_SENSE_SUCCESS)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to set settling time for channel %d",
-                                eChannelId);
-            return eRet;
-        }
-    }
-
-    if (pChannelConfig->enableChannel)
-    {
-        /* Threshold limits can be configured individually for virtual channels */
-        eRet = adi_sense_1000_SetChannelThresholdLimits(hDevice, eChannelId,
-                                                        pChannelConfig->highThreshold,
-                                                        pChannelConfig->lowThreshold);
-        if (eRet != ADI_SENSE_SUCCESS)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to set threshold limits for channel %d",
-                                eChannelId);
-            return eRet;
-        }
-
-        /* Offset and gain can be configured individually for virtual channels */
-        eRet = adi_sense_1000_SetOffsetGain(hDevice, eChannelId,
-                                            pChannelConfig->offsetAdjustment,
-                                            pChannelConfig->gainAdjustment);
-        if (eRet != ADI_SENSE_SUCCESS)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to set offset/gain for channel %d",
-                                eChannelId);
-            return eRet;
-        }
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_SetConfig(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice,
-    ADI_SENSE_CONFIG         * const pConfig)
-{
-    ADI_SENSE_1000_CONFIG *pDeviceConfig;
-    ADI_SENSE_PRODUCT_ID productId;
-    ADI_SENSE_RESULT eRet;
-
-    if (pConfig->productId != ADI_SENSE_PRODUCT_ID_ADSNS1000)
-    {
-        ADI_SENSE_LOG_ERROR("Configuration Product ID (0x%X) is not supported (0x%0X)",
-                            pConfig->productId, ADI_SENSE_PRODUCT_ID_ADSNS1000);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    /* Check that the actual Product ID is a match? */
-    eRet = adi_sense_GetProductID(hDevice, &productId);
-    if (eRet)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to read device Product ID register");
-        return eRet;
-    }
-    if (pConfig->productId != productId)
-    {
-        ADI_SENSE_LOG_ERROR("Configuration Product ID (0x%X) does not match device (0x%0X)",
-                            pConfig->productId, productId);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    pDeviceConfig = &pConfig->adisense1000;
-
-    eRet = adi_sense_1000_SetPowerConfig(hDevice, &pDeviceConfig->power);
-    if (eRet)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set power configuration");
-        return eRet;
-    }
-
-    eRet = adi_sense_1000_SetMeasurementConfig(hDevice, &pDeviceConfig->measurement);
-    if (eRet)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set measurement configuration");
-        return eRet;
-    }
-
-    eRet = adi_sense_1000_SetDiagnosticsConfig(hDevice, &pDeviceConfig->diagnostics);
-    if (eRet)
-    {
-        ADI_SENSE_LOG_ERROR("Failed to set diagnostics configuration");
-        return eRet;
-    }
-
-    for (ADI_SENSE_1000_CHANNEL_ID id = ADI_SENSE_1000_CHANNEL_ID_CJC_0;
-         id < ADI_SENSE_1000_MAX_CHANNELS;
-         id++)
-    {
-        eRet = adi_sense_1000_SetChannelConfig(hDevice, id,
-                                               &pDeviceConfig->channels[id]);
-        if (eRet)
-        {
-            ADI_SENSE_LOG_ERROR("Failed to set channel %d configuration", id);
-            return eRet;
-        }
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetLutData(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice,
-    ADI_SENSE_1000_LUT       * const pLutData)
-{
-    ADI_SENSE_1000_LUT_HEADER *pLutHeader = &pLutData->header;
-    ADI_SENSE_1000_LUT_TABLE *pLutTable = pLutData->tables;
-    unsigned actualLength = 0;
-
-    if (pLutData->header.signature != ADI_SENSE_LUT_SIGNATURE)
-    {
-        ADI_SENSE_LOG_ERROR("LUT signature incorrect (expected 0x%X, actual 0x%X)",
-                            ADI_SENSE_LUT_SIGNATURE, pLutHeader->signature);
-        return ADI_SENSE_INVALID_SIGNATURE;
-    }
-
-    for (unsigned i = 0; i < pLutHeader->numTables; i++)
-    {
-        ADI_SENSE_1000_LUT_DESCRIPTOR *pDesc = &pLutTable->descriptor;
-        ADI_SENSE_1000_LUT_TABLE_DATA *pData = &pLutTable->data;
-        unsigned short calculatedCrc;
-
-        switch (pDesc->geometry)
-        {
-        case ADI_SENSE_1000_LUT_GEOMETRY_COEFFS:
-                switch (pDesc->equation)
-                {
-                case ADI_SENSE_1000_LUT_EQUATION_POLYN:
-                case ADI_SENSE_1000_LUT_EQUATION_POLYNEXP:
-                case ADI_SENSE_1000_LUT_EQUATION_QUADRATIC:
-                case ADI_SENSE_1000_LUT_EQUATION_STEINHART:
-                case ADI_SENSE_1000_LUT_EQUATION_LOGARITHMIC:
-                case ADI_SENSE_1000_LUT_EQUATION_EXPONENTIAL:
-                case ADI_SENSE_1000_LUT_EQUATION_BIVARIATE_POLYN:
-                break;
-                default:
-                    ADI_SENSE_LOG_ERROR("Invalid equation %u specified for LUT table %u",
-                                        pDesc->equation, i);
-                    return ADI_SENSE_INVALID_PARAM;
-                }
-            break;
-        case ADI_SENSE_1000_LUT_GEOMETRY_NES_1D:
-        case ADI_SENSE_1000_LUT_GEOMETRY_NES_2D:
-        case ADI_SENSE_1000_LUT_GEOMETRY_ES_1D:
-        case ADI_SENSE_1000_LUT_GEOMETRY_ES_2D:
-                if (pDesc->equation != ADI_SENSE_1000_LUT_EQUATION_LUT) {
-                    ADI_SENSE_LOG_ERROR("Invalid equation %u specified for LUT table %u",
-                                        pDesc->equation, i);
-                    return ADI_SENSE_INVALID_PARAM;
-                }
-            break;
-        default:
-            ADI_SENSE_LOG_ERROR("Invalid geometry %u specified for LUT table %u",
-                                pDesc->geometry, i);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-
-        switch (pDesc->dataType)
-        {
-        case ADI_SENSE_1000_LUT_DATA_TYPE_FLOAT32:
-        case ADI_SENSE_1000_LUT_DATA_TYPE_FLOAT64:
-            break;
-        default:
-            ADI_SENSE_LOG_ERROR("Invalid vector format %u specified for LUT table %u",
-                                pDesc->dataType, i);
-            return ADI_SENSE_INVALID_PARAM;
-        }
-
-        calculatedCrc = crc16_ccitt(pData, pDesc->length);
-        if (calculatedCrc != pDesc->crc16)
-        {
-            ADI_SENSE_LOG_ERROR("CRC validation failed on LUT table %u (expected 0x%04X, actual 0x%04X)",
-                                i, pDesc->crc16, calculatedCrc);
-            return ADI_SENSE_CRC_ERROR;
-        }
-
-        actualLength += sizeof(*pDesc) + pDesc->length;
-
-        /* Move to the next look-up table */
-        pLutTable = (ADI_SENSE_1000_LUT_TABLE *)((uint8_t *)pLutTable + sizeof(*pDesc) + pDesc->length);
-    }
-
-    if (actualLength != pLutHeader->totalLength)
-    {
-        ADI_SENSE_LOG_ERROR("LUT table length mismatch (expected %u, actual %u)",
-                            pLutHeader->totalLength, actualLength);
-        return ADI_SENSE_WRONG_SIZE;
-    }
-
-    if (sizeof(*pLutHeader) + pLutHeader->totalLength > ADI_SENSE_LUT_MAX_SIZE)
-    {
-        ADI_SENSE_LOG_ERROR("Maximum LUT table length (%u bytes) exceeded",
-                            ADI_SENSE_LUT_MAX_SIZE);
-        return ADI_SENSE_WRONG_SIZE;
-    }
-
-    /* Write the LUT data to the device */
-    unsigned lutSize = sizeof(*pLutHeader) + pLutHeader->totalLength;
-    WRITE_REG_U16(hDevice, 0, CORE_LUT_OFFSET);
-    WRITE_REG_U8_ARRAY(hDevice, (uint8_t *)pLutData, lutSize, CORE_LUT_DATA);
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_SetLutDataRaw(
-    ADI_SENSE_DEVICE_HANDLE    const hDevice,
-    ADI_SENSE_1000_LUT_RAW   * const pLutData)
-{
-    return adi_sense_1000_SetLutData(hDevice,
-                                     (ADI_SENSE_1000_LUT *)pLutData);
-}
-
-static ADI_SENSE_RESULT getLutTableSize(
-    ADI_SENSE_1000_LUT_DESCRIPTOR * const pDesc,
-    ADI_SENSE_1000_LUT_TABLE_DATA * const pData,
-    unsigned *pLength)
-{
-    switch (pDesc->geometry)
-    {
-    case ADI_SENSE_1000_LUT_GEOMETRY_COEFFS:
-        if (pDesc->equation == ADI_SENSE_1000_LUT_EQUATION_BIVARIATE_POLYN)
-            *pLength = ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST_SIZE(pData->coeffList2d);
-        else
-            *pLength = ADI_SENSE_1000_LUT_COEFF_LIST_SIZE(pData->coeffList);
-        break;
-    case ADI_SENSE_1000_LUT_GEOMETRY_NES_1D:
-        *pLength = ADI_SENSE_1000_LUT_1D_NES_SIZE(pData->lut1dNes);
-        break;
-    case ADI_SENSE_1000_LUT_GEOMETRY_NES_2D:
-        *pLength = ADI_SENSE_1000_LUT_2D_NES_SIZE(pData->lut2dNes);
-        break;
-    case ADI_SENSE_1000_LUT_GEOMETRY_ES_1D:
-        *pLength = ADI_SENSE_1000_LUT_1D_ES_SIZE(pData->lut1dEs);
-        break;
-    case ADI_SENSE_1000_LUT_GEOMETRY_ES_2D:
-        *pLength = ADI_SENSE_1000_LUT_2D_ES_SIZE(pData->lut2dEs);
-        break;
-    default:
-        ADI_SENSE_LOG_ERROR("Invalid LUT table geometry %d specified\r\n",
-                            pDesc->geometry);
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
-ADI_SENSE_RESULT adi_sense_1000_AssembleLutData(
-    ADI_SENSE_1000_LUT                  * pLutBuffer,
-    unsigned                              nLutBufferSize,
-    unsigned                        const nNumTables,
-    ADI_SENSE_1000_LUT_DESCRIPTOR * const ppDesc[],
-    ADI_SENSE_1000_LUT_TABLE_DATA * const ppData[])
-{
-    ADI_SENSE_1000_LUT_HEADER *pHdr = &pLutBuffer->header;
-    uint8_t *pLutTableData = (uint8_t *)pLutBuffer + sizeof(*pHdr);
-
-    if (sizeof(*pHdr) > nLutBufferSize)
-    {
-        ADI_SENSE_LOG_ERROR("Insufficient LUT buffer size provided");
-        return ADI_SENSE_INVALID_PARAM;
-    }
-
-    /* First initialise the top-level header */
-    pHdr->signature = ADI_SENSE_LUT_SIGNATURE;
-    pHdr->version.major = 1;
-    pHdr->version.minor = 0;
-    pHdr->numTables = 0;
-    pHdr->totalLength = 0;
-
-    /*
-     * Walk through the list of table pointers provided, appending the table
-     * descriptor+data from each one to the provided LUT buffer
-     */
-    for (unsigned i = 0; i < nNumTables; i++)
-    {
-        ADI_SENSE_1000_LUT_DESCRIPTOR * const pDesc = ppDesc[i];
-        ADI_SENSE_1000_LUT_TABLE_DATA * const pData = ppData[i];
-        ADI_SENSE_RESULT res;
-        unsigned dataLength = 0;
-
-        /* Calculate the length of the table data */
-        res = getLutTableSize(pDesc, pData, &dataLength);
-        if (res != ADI_SENSE_SUCCESS)
-            return res;
-
-        /* Fill in the table descriptor length and CRC fields */
-        pDesc->length = dataLength;
-        pDesc->crc16 = crc16_ccitt(pData, dataLength);
-
-        if ((sizeof(*pHdr) + pHdr->totalLength + sizeof(*pDesc) + dataLength) > nLutBufferSize)
-        {
-            ADI_SENSE_LOG_ERROR("Insufficient LUT buffer size provided");
-            return ADI_SENSE_INVALID_PARAM;
-        }
-
-        /* Append the table to the LUT buffer (desc + data) */
-        memcpy(pLutTableData + pHdr->totalLength, pDesc, sizeof(*pDesc));
-        pHdr->totalLength += sizeof(*pDesc);
-        memcpy(pLutTableData + pHdr->totalLength, pData, dataLength);
-        pHdr->totalLength += dataLength;
-
-        pHdr->numTables++;
-    }
-
-    return ADI_SENSE_SUCCESS;
-}
-
+/*
+CONFIDENTIAL AND PROPRIETARY INFORMATION
+
+Copyright (c) 2018 Emutex Ltd. All rights reserved.
+This software and documentation contain confidential and
+proprietary information that is the property of
+Emutex Ltd. The software and documentation are
+furnished under a license agreement and may be used
+or copied only in accordance with the terms of the license
+agreement. No part of the software and documentation
+may be reproduced, transmitted, or translated, in any
+form or by any means, electronic, mechanical, manual,
+optical, or otherwise, without prior written permission
+of Emutex Ltd., or as expressly provided by the license agreement.
+Reverse engineering is prohibited, and reproduction,
+disclosure or use without specific written authorization
+of Emutex Ltd. is strictly forbidden.
+ */
+
+/******************************************************************************
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief: ADISENSE API implementation for ADSNS1000
+ *-----------------------------------------------------------------------------
+ */
+
+#include <float.h>
+#include <math.h>
+#include <string.h>
+
+#include "inc/adi_sense_platform.h"
+#include "inc/adi_sense_api.h"
+#include "inc/adi_sense_1000/adi_sense_1000_api.h"
+
+#include "adi_sense_1000/ADISENSE1000_REGISTERS_typedefs.h"
+#include "adi_sense_1000/ADISENSE1000_REGISTERS.h"
+#include "adi_sense_1000/adi_sense_1000_lut_data.h"
+#include "adi_sense_1000/adi_sense_1000_host_comms.h"
+
+#include "crc16.h"
+
+/*
+ * The following macros are used to encapsulate the register access code
+ * to improve readability in the functions further below in this file
+ */
+#define STRINGIFY(name) #name
+
+/* Expand the full name of the reset value macro for the specified register */
+#define REG_RESET_VAL(_name) REG_ADISENSE_##_name##_RESET
+
+/* Checks if a value is outside the bounds of the specified register field */
+#define CHECK_REG_FIELD_VAL(_field, _val)                               \
+    do {                                                                \
+        uint32_t _mask  = BITM_ADISENSE_##_field;                       \
+        uint32_t _shift = BITP_ADISENSE_##_field;                       \
+        if ((((_val) << _shift) & ~(_mask)) != 0) {                     \
+            ADI_SENSE_LOG_ERROR("Value 0x%08X invalid for register field %s", \
+                                (uint32_t)(_val),                       \
+                                STRINGIFY(ADISENSE_##_field));          \
+            return ADI_SENSE_INVALID_PARAM;                             \
+        }                                                               \
+    } while(false)
+
+/*
+ * Encapsulates the write to a specified register
+ * NOTE - this will cause the calling function to return on error
+ */
+#define WRITE_REG(_hdev, _val, _name, _type)                            \
+    do {                                                                \
+        ADI_SENSE_RESULT _res;                                          \
+        _type _regval = _val;                                           \
+        _res = adi_sense_1000_WriteRegister((_hdev),                    \
+                                            REG_ADISENSE_##_name,       \
+                                            &_regval, sizeof(_regval)); \
+        if (_res != ADI_SENSE_SUCCESS)                                  \
+            return _res;                                                \
+    } while(false)
+
+/* Wrapper macro to write a value to a uint32_t register */
+#define WRITE_REG_U32(_hdev, _val, _name)       \
+    WRITE_REG(_hdev, _val, _name, uint32_t)
+/* Wrapper macro to write a value to a uint16_t register */
+#define WRITE_REG_U16(_hdev, _val, _name)       \
+    WRITE_REG(_hdev, _val, _name, uint16_t)
+/* Wrapper macro to write a value to a uint8_t register */
+#define WRITE_REG_U8(_hdev, _val, _name)        \
+    WRITE_REG(_hdev, _val, _name, uint8_t)
+/* Wrapper macro to write a value to a float32_t register */
+#define WRITE_REG_FLOAT(_hdev, _val, _name)     \
+    WRITE_REG(_hdev, _val, _name, float32_t)
+
+/*
+ * Encapsulates the read from a specified register
+ * NOTE - this will cause the calling function to return on error
+ */
+#define READ_REG(_hdev, _val, _name, _type)                             \
+    do {                                                                \
+        ADI_SENSE_RESULT _res;                                          \
+        _type _regval;                                                  \
+        _res = adi_sense_1000_ReadRegister((_hdev),                     \
+                                           REG_ADISENSE_##_name,        \
+                                           &_regval, sizeof(_regval));  \
+        if (_res != ADI_SENSE_SUCCESS)                                  \
+            return _res;                                                \
+        _val = _regval;                                                 \
+    } while(false)
+
+/* Wrapper macro to read a value from a uint32_t register */
+#define READ_REG_U32(_hdev, _val, _name)        \
+    READ_REG(_hdev, _val, _name, uint32_t)
+/* Wrapper macro to read a value from a uint16_t register */
+#define READ_REG_U16(_hdev, _val, _name)        \
+    READ_REG(_hdev, _val, _name, uint16_t)
+/* Wrapper macro to read a value from a uint8_t register */
+#define READ_REG_U8(_hdev, _val, _name)         \
+    READ_REG(_hdev, _val, _name, uint8_t)
+/* Wrapper macro to read a value from a float32_t register */
+#define READ_REG_FLOAT(_hdev, _val, _name)      \
+    READ_REG(_hdev, _val, _name, float32_t)
+
+/*
+ * Wrapper macro to write an array of values to a uint8_t register
+ * NOTE - this is intended only for writing to a keyhole data register
+ */
+#define WRITE_REG_U8_ARRAY(_hdev, _arr, _len, _name)                \
+    do {                                                            \
+        ADI_SENSE_RESULT _res;                                      \
+        _res = adi_sense_1000_WriteRegister(_hdev,                  \
+                                            REG_ADISENSE_##_name,   \
+                                            _arr, _len);            \
+        if (_res != ADI_SENSE_SUCCESS)                              \
+            return _res;                                            \
+    } while(false)
+
+/*
+ * Wrapper macro to read an array of values from a uint8_t register
+ * NOTE - this is intended only for reading from a keyhole data register
+ */
+#define READ_REG_U8_ARRAY(_hdev, _arr, _len, _name)                 \
+    do {                                                            \
+        ADI_SENSE_RESULT _res;                                      \
+        _res = adi_sense_1000_ReadRegister((_hdev),                 \
+                                           REG_ADISENSE_##_name,    \
+                                           _arr, _len);             \
+        if (_res != ADI_SENSE_SUCCESS)                              \
+            return _res;                                            \
+    } while(false)
+
+#define ADI_SENSE_1000_CHANNEL_IS_ADC(c)                                \
+    ((c) >= ADI_SENSE_1000_CHANNEL_ID_CJC_0 && (c) <= ADI_SENSE_1000_CHANNEL_ID_CURRENT_0)
+
+#define ADI_SENSE_1000_CHANNEL_IS_ADC_CJC(c)                            \
+    ((c) >= ADI_SENSE_1000_CHANNEL_ID_CJC_0 && (c) <= ADI_SENSE_1000_CHANNEL_ID_CJC_1)
+
+#define ADI_SENSE_1000_CHANNEL_IS_ADC_SENSOR(c)                         \
+    ((c) >= ADI_SENSE_1000_CHANNEL_ID_SENSOR_0 && (c) <= ADI_SENSE_1000_CHANNEL_ID_SENSOR_3)
+
+#define ADI_SENSE_1000_CHANNEL_IS_ADC_VOLTAGE(c)    \
+    ((c) == ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0)
+
+#define ADI_SENSE_1000_CHANNEL_IS_ADC_CURRENT(c)    \
+    ((c) == ADI_SENSE_1000_CHANNEL_ID_CURRENT_0)
+
+#define ADI_SENSE_1000_CHANNEL_IS_VIRTUAL(c)                            \
+    ((c) == ADI_SENSE_1000_CHANNEL_ID_SPI_1 || (c) == ADI_SENSE_1000_CHANNEL_ID_SPI_2)
+
+typedef struct
+{
+    unsigned nDeviceIndex;
+    ADI_SENSE_SPI_HANDLE hSpi;
+    ADI_SENSE_GPIO_HANDLE hGpio;
+} ADI_SENSE_DEVICE_CONTEXT;
+
+static ADI_SENSE_DEVICE_CONTEXT gDeviceCtx[ADI_SENSE_PLATFORM_MAX_DEVICES];
+
+/*
+ * Open an ADISENSE device instance.
+ */
+ADI_SENSE_RESULT adi_sense_Open(
+    unsigned                   const nDeviceIndex,
+    ADI_SENSE_CONNECTION     * const pConnectionInfo,
+    ADI_SENSE_DEVICE_HANDLE  * const phDevice)
+{
+    ADI_SENSE_DEVICE_CONTEXT *pCtx;
+    ADI_SENSE_RESULT eRet;
+
+    if (nDeviceIndex >= ADI_SENSE_PLATFORM_MAX_DEVICES)
+        return ADI_SENSE_INVALID_DEVICE_NUM;
+
+    pCtx = &gDeviceCtx[nDeviceIndex];
+    pCtx->nDeviceIndex = nDeviceIndex;
+
+    eRet = adi_sense_LogOpen(&pConnectionInfo->log);
+    if (eRet != ADI_SENSE_SUCCESS)
+        return eRet;
+
+    eRet = adi_sense_GpioOpen(&pConnectionInfo->gpio, &pCtx->hGpio);
+    if (eRet != ADI_SENSE_SUCCESS)
+        return eRet;
+
+    eRet = adi_sense_SpiOpen(&pConnectionInfo->spi, &pCtx->hSpi);
+    if (eRet != ADI_SENSE_SUCCESS)
+        return eRet;
+
+    *phDevice = pCtx;
+    return ADI_SENSE_SUCCESS;
+}
+
+/*
+ * Get the current state of the specified GPIO input signal.
+ */
+ADI_SENSE_RESULT adi_sense_GetGpioState(
+    ADI_SENSE_DEVICE_HANDLE   const hDevice,
+    ADI_SENSE_GPIO_PIN        const ePinId,
+    bool_t                  * const pbAsserted)
+{
+    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
+
+    return adi_sense_GpioGet(pCtx->hGpio, ePinId, pbAsserted);
+}
+
+/*
+ * Register an application-defined callback function for GPIO interrupts.
+ */
+ADI_SENSE_RESULT adi_sense_RegisterGpioCallback(
+    ADI_SENSE_DEVICE_HANDLE          const hDevice,
+    ADI_SENSE_GPIO_PIN               const ePinId,
+    ADI_SENSE_GPIO_CALLBACK          const callbackFunction,
+    void                           * const pCallbackParam)
+{
+    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
+
+    if (callbackFunction)
+    {
+        return adi_sense_GpioIrqEnable(pCtx->hGpio, ePinId, callbackFunction,
+                                       pCallbackParam);
+    }
+    else
+    {
+        return adi_sense_GpioIrqDisable(pCtx->hGpio, ePinId);
+    }
+}
+
+/*
+ * Reset the specified ADISENSE device.
+ */
+ADI_SENSE_RESULT adi_sense_Reset(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
+    ADI_SENSE_RESULT eRet;
+
+    /* Pulse the Reset GPIO pin low for a minimum of 4 microseconds */
+    eRet = adi_sense_GpioSet(pCtx->hGpio, ADI_SENSE_GPIO_PIN_RESET, false);
+    if (eRet != ADI_SENSE_SUCCESS)
+        return eRet;
+
+    adi_sense_TimeDelayUsec(4);
+
+    eRet = adi_sense_GpioSet(pCtx->hGpio, ADI_SENSE_GPIO_PIN_RESET, true);
+    if (eRet != ADI_SENSE_SUCCESS)
+        return eRet;
+
+    return ADI_SENSE_SUCCESS;
+}
+
+
+/*!
+ * @brief Get general status of ADISense module.
+ *
+ * @param[in]
+ * @param[out] pStatus : Pointer to CORE Status struct.
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *         - #ADI_SENSE_FAILURE If status register read fails.
+ *
+ * @details Read the general status register for the ADISense
+ *          module. Indicates Error, Alert conditions, data ready
+ *          and command running.
+ *
+ */
+ADI_SENSE_RESULT adi_sense_GetStatus(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_STATUS         * const pStatus)
+{
+    ADI_ADISENSE_CORE_Status_t statusReg;
+    READ_REG_U8(hDevice, statusReg.VALUE8, CORE_STATUS);
+
+    ADI_ADISENSE_CORE_Alert_Status_2_t alert2Reg;
+    READ_REG_U16(hDevice, alert2Reg.VALUE16, CORE_ALERT_STATUS_2);
+
+    memset(pStatus, 0, sizeof(*pStatus));
+
+    if (!statusReg.Cmd_Running) /* Active-low, so invert it */
+        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_BUSY;
+    if (statusReg.Drdy)
+        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_DATAREADY;
+    if (statusReg.FIFO_Error)
+        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_FIFO_ERROR;
+    if (alert2Reg.Ext_Flash_Error)
+        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_EXT_FLASH_ERROR;
+    if (statusReg.Alert_Active)
+    {
+        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_ALERT;
+
+        ADI_ADISENSE_CORE_Alert_Code_t alertCodeReg;
+        READ_REG_U16(hDevice, alertCodeReg.VALUE16, CORE_ALERT_CODE);
+        pStatus->alertCode = alertCodeReg.Alert_Code;
+
+        ADI_ADISENSE_CORE_Channel_Alert_Status_t channelAlertStatusReg;
+        READ_REG_U16(hDevice, channelAlertStatusReg.VALUE16,
+                     CORE_CHANNEL_ALERT_STATUS);
+
+        for (unsigned i = 0; i < ADI_SENSE_1000_MAX_CHANNELS; i++)
+        {
+            if (channelAlertStatusReg.VALUE16 & (1 << i))
+            {
+                ADI_ADISENSE_CORE_Alert_Code_Ch_t channelAlertCodeReg;
+                READ_REG_U16(hDevice, channelAlertCodeReg.VALUE16, CORE_ALERT_CODE_CHn(i));
+                pStatus->channelAlertCodes[i] = channelAlertCodeReg.Alert_Code_Ch;
+
+                ADI_ADISENSE_CORE_Alert_Detail_Ch_t alertDetailReg;
+                READ_REG_U16(hDevice, alertDetailReg.VALUE16,
+                             CORE_ALERT_DETAIL_CHn(i));
+
+                if (alertDetailReg.Time_Out)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_TIMEOUT;
+                if (alertDetailReg.Under_Range)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_UNDER_RANGE;
+                if (alertDetailReg.Over_Range)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_OVER_RANGE;
+                if (alertDetailReg.Low_Limit)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_LOW_LIMIT;
+                if (alertDetailReg.High_Limit)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_HIGH_LIMIT;
+                if (alertDetailReg.Sensor_Open)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_SENSOR_OPEN;
+                if (alertDetailReg.Ref_Detect)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_REF_DETECT;
+                if (alertDetailReg.Config_Err)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_CONFIG_ERR;
+                if (alertDetailReg.LUT_Error_Ch)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_LUT_ERR;
+                if (alertDetailReg.Sensor_Not_Ready)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_SENSOR_NOT_READY;
+                if (alertDetailReg.Comp_Not_Ready)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_COMP_NOT_READY;
+                if (alertDetailReg.Correction_UnderRange)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_LUT_UNDER_RANGE;
+                if (alertDetailReg.Correction_OverRange)
+                    pStatus->channelAlerts[i] |= ADI_SENSE_CHANNEL_ALERT_LUT_OVER_RANGE;
+            }
+        }
+
+        if (alert2Reg.Configuration_Error)
+            pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_CONFIG_ERROR;
+        if (alert2Reg.LUT_Error)
+            pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_LUT_ERROR;
+    }
+
+    if (statusReg.Error)
+    {
+        pStatus->deviceStatus |= ADI_SENSE_DEVICE_STATUS_ERROR;
+
+        ADI_ADISENSE_CORE_Error_Code_t errorCodeReg;
+        READ_REG_U16(hDevice, errorCodeReg.VALUE16, CORE_ERROR_CODE);
+        pStatus->errorCode = errorCodeReg.Error_Code;
+
+        ADI_ADISENSE_CORE_Diagnostics_Status_t diagStatusReg;
+        READ_REG_U16(hDevice, diagStatusReg.VALUE16, CORE_DIAGNOSTICS_STATUS);
+
+        if (diagStatusReg.Diag_Checksum_Error)
+            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_CHECKSUM_ERROR;
+        if (diagStatusReg.Diag_Comms_Error)
+            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_COMMS_ERROR;
+        if (diagStatusReg.Diag_Supply_Monitor_Error)
+            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_SUPPLY_MONITOR_ERROR;
+        if (diagStatusReg.Diag_Supply_Cap_Error)
+            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_SUPPLY_CAP_ERROR;
+        if (diagStatusReg.Diag_Conversion_Error)
+            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_CONVERSION_ERROR;
+        if (diagStatusReg.Diag_Calibration_Error)
+            pStatus->diagnosticsStatus |= ADI_SENSE_DIAGNOSTICS_STATUS_CALIBRATION_ERROR;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_GetCommandRunningState(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    bool_t *pbCommandRunning)
+{
+    ADI_ADISENSE_CORE_Status_t statusReg;
+
+    READ_REG_U8(hDevice, statusReg.VALUE8, CORE_STATUS);
+
+    /* We should never normally see 0xFF here if the module is operational */
+    if (statusReg.VALUE8 == 0xFF)
+        return ADI_SENSE_ERR_NOT_INITIALIZED;
+
+    *pbCommandRunning = !statusReg.Cmd_Running; /* Active-low, so invert it */
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT executeCommand(
+    ADI_SENSE_DEVICE_HANDLE const hDevice,
+    ADI_ADISENSE_CORE_Command_Special_Command const command,
+    bool_t const bWaitForCompletion)
+{
+    ADI_ADISENSE_CORE_Command_t commandReg;
+    bool_t bCommandRunning;
+    ADI_SENSE_RESULT eRet;
+
+    /*
+     * Don't allow another command to be issued if one is already running, but
+     * make an exception for ADISENSE_CORE_COMMAND_NOP which can be used to
+     * request a running command to be stopped (e.g. continuous measurement)
+     */
+    if (command != ADISENSE_CORE_COMMAND_NOP)
+    {
+        eRet = adi_sense_GetCommandRunningState(hDevice, &bCommandRunning);
+        if (eRet)
+            return eRet;
+
+        if (bCommandRunning)
+            return ADI_SENSE_IN_USE;
+    }
+
+    commandReg.Special_Command = command;
+    WRITE_REG_U8(hDevice, commandReg.VALUE8, CORE_COMMAND);
+
+    if (bWaitForCompletion)
+    {
+        do {
+            /* Allow a minimum 50usec delay for status update before checking */
+            adi_sense_TimeDelayUsec(50);
+
+            eRet = adi_sense_GetCommandRunningState(hDevice, &bCommandRunning);
+            if (eRet)
+                return eRet;
+        } while (bCommandRunning);
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_Shutdown(
+    ADI_SENSE_DEVICE_HANDLE const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_POWER_DOWN, false);
+}
+
+
+ADI_SENSE_RESULT adi_sense_ApplyConfigUpdates(
+    ADI_SENSE_DEVICE_HANDLE const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LATCH_CONFIG, true);
+}
+
+/*!
+ * @brief Start a measurement cycle.
+ *
+ * @param[out]
+ *
+ * @return Status
+ *         - #ADI_SENSE_SUCCESS Call completed successfully.
+ *         - #ADI_SENSE_FAILURE
+ *
+ * @details Sends the latch config command. Configuration for channels in
+ *          conversion cycle should be completed before this function.
+ *          Channel enabled bit should be set before this function.
+ *          Starts a conversion and configures the format of the sample.
+ *
+ */
+ADI_SENSE_RESULT adi_sense_StartMeasurement(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_MEASUREMENT_MODE const eMeasurementMode)
+{
+    switch (eMeasurementMode)
+    {
+    case ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK:
+        return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SYSTEM_CHECK, false);
+    case ADI_SENSE_MEASUREMENT_MODE_NORMAL:
+        return executeCommand(hDevice, ADISENSE_CORE_COMMAND_CONVERT_WITH_RAW, false);
+    case ADI_SENSE_MEASUREMENT_MODE_OMIT_RAW:
+        return executeCommand(hDevice, ADISENSE_CORE_COMMAND_CONVERT, false);
+    case ADI_SENSE_MEASUREMENT_MODE_FFT:
+        return executeCommand(hDevice, ADISENSE_CORE_COMMAND_CONVERT_FFT, false);
+    default:
+        ADI_SENSE_LOG_ERROR("Invalid measurement mode %d specified",
+                            eMeasurementMode);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+}
+
+/*
+ * Store the configuration settings to persistent memory on the device.
+ * The settings can be saved to 4 different flash memory areas (slots).
+ * No other command must be running when this is called.
+ * Do not power down the device while this command is running.
+ */
+ADI_SENSE_RESULT adi_sense_SaveConfig(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_USER_CONFIG_SLOT const eSlotId)
+{
+    switch (eSlotId)
+    {
+        case ADI_SENSE_FLASH_CONFIG_1:
+            return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SAVE_CONFIG_1, true);
+        case ADI_SENSE_FLASH_CONFIG_2:
+            return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SAVE_CONFIG_2, true);
+        case ADI_SENSE_FLASH_CONFIG_3:
+            return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SAVE_CONFIG_3, true);
+        case ADI_SENSE_FLASH_CONFIG_4:
+            return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SAVE_CONFIG_4, true);
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid user config target slot %d specified",
+                                eSlotId);
+            return ADI_SENSE_INVALID_PARAM;
+    }
+}
+
+/*
+ * Restore the configuration settings from persistent memory on the device.
+ * No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_RestoreConfig(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_USER_CONFIG_SLOT const eSlotId)
+{
+    switch (eSlotId)
+    {
+        case ADI_SENSE_FLASH_CONFIG_1:
+            return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LOAD_CONFIG_1, true);
+        case ADI_SENSE_FLASH_CONFIG_2:
+            return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LOAD_CONFIG_2, true);
+        case ADI_SENSE_FLASH_CONFIG_3:
+            return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LOAD_CONFIG_3, true);
+        case ADI_SENSE_FLASH_CONFIG_4:
+            return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LOAD_CONFIG_4, true);
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid user config source slot %d specified",
+                                eSlotId);
+            return ADI_SENSE_INVALID_PARAM;
+    }
+}
+
+/*
+ * Erase the entire external flash memory.
+ * No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_EraseExternalFlash(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_ERASE_EXTERNAL_FLASH, true);
+}
+
+/*
+ * Read the number of samples stored in external flash memory.
+ * No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_GetExternalFlashSampleCount(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    uint32_t * nSampleCount)
+{
+    ADI_ADISENSE_CORE_Ext_Flash_Sample_Count_t nCount;
+
+    READ_REG_U32(hDevice, nCount.VALUE32, CORE_EXT_FLASH_SAMPLE_COUNT);
+
+    *nSampleCount = nCount.VALUE32;
+
+    return ADI_SENSE_SUCCESS;
+}
+
+// DEBUG - TO BE DELETED
+ADI_SENSE_RESULT adi_sense_SetExternalFlashIndex(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    uint32_t nStartIndex)
+{
+    WRITE_REG_U32(hDevice, nStartIndex, CORE_EXT_FLASH_INDEX);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+/*
+ * Read a set of data samples stored in the device external flash memory.
+ * This may be called at any time.
+ */
+ADI_SENSE_RESULT adi_sense_GetExternalFlashData(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_DATA_SAMPLE    * const pSamples,
+    uint32_t                   const nStartIndex,
+    uint32_t                   const nRequested,
+    uint32_t                 * const pnReturned)
+{
+    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
+    uint16_t command = ADI_SENSE_1000_HOST_COMMS_READ_CMD |
+        (REG_ADISENSE_CORE_EXT_FLASH_DATA & ADI_SENSE_1000_HOST_COMMS_ADR_MASK);
+    uint8_t commandData[2] = {
+        command >> 8,
+        command & 0xFF
+    };
+    uint8_t commandResponse[2];
+    unsigned nValidSamples = 0;
+    ADI_SENSE_RESULT eRet = ADI_SENSE_SUCCESS;
+
+    /* Setup initial sample */
+    WRITE_REG_U32(hDevice, nStartIndex, CORE_EXT_FLASH_INDEX);
+
+    /* Send flash read command */
+    do {
+        eRet = adi_sense_SpiTransfer(pCtx->hSpi, commandData, commandResponse,
+                                     sizeof(command), false);
+        if (eRet)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to send read command for external flash");
+            return eRet;
+        }
+
+        adi_sense_TimeDelayUsec(ADI_SENSE_1000_HOST_COMMS_XFER_DELAY);
+    } while ((commandResponse[0] != ADI_SENSE_1000_HOST_COMMS_CMD_RESP_0) ||
+             (commandResponse[1] != ADI_SENSE_1000_HOST_COMMS_CMD_RESP_1));
+
+    /* Read samples from external flash memory */
+    for (unsigned i = 0; i < nRequested; i++)
+    {
+        ADI_SENSE_1000_Sensor_Result_t sensorResult;
+        bool_t bHoldCs = true;
+
+        /* Keep the CS signal asserted for all but the last sample */
+        if ((i + 1) == nRequested)
+            bHoldCs = false;
+
+        eRet = adi_sense_SpiTransfer(pCtx->hSpi, NULL, (uint8_t *) (&sensorResult),
+                                     8, bHoldCs);
+        if (eRet)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to read data from external flash");
+            return eRet;
+        }
+
+        ADI_SENSE_DATA_SAMPLE *pSample = &pSamples[nValidSamples];
+
+        pSample->status = (ADI_SENSE_DEVICE_STATUS_FLAGS)0;
+        if (sensorResult.Ch_Error)
+            pSample->status |= ADI_SENSE_DEVICE_STATUS_ERROR;
+        if (sensorResult.Ch_Alert)
+            pSample->status |= ADI_SENSE_DEVICE_STATUS_ALERT;
+
+        if (sensorResult.Ch_Raw)
+            pSample->rawValue = sensorResult.Raw_Sample;
+        else
+            pSample->rawValue = 0;
+
+        pSample->channelId = sensorResult.Channel_ID;
+        pSample->processedValue = sensorResult.Sensor_Result;
+
+        nValidSamples++;
+    }
+    *pnReturned = nValidSamples;
+
+    adi_sense_TimeDelayUsec(ADI_SENSE_1000_HOST_COMMS_XFER_DELAY);
+
+    return eRet;
+}
+
+
+/*
+ * Store the LUT data to persistent memory on the device.
+ * No other command must be running when this is called.
+ * Do not power down the device while this command is running.
+ */
+ADI_SENSE_RESULT adi_sense_SaveLutData(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SAVE_LUT, true);
+}
+
+/*
+ * Restore the LUT data from persistent memory on the device.
+ * No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_RestoreLutData(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_LOAD_LUT, true);
+}
+
+/*
+ * Stop the measurement cycles on the device.
+ * To be used only if a measurement command is currently running.
+ */
+ADI_SENSE_RESULT adi_sense_StopMeasurement(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_NOP, true);
+}
+
+/*
+ * Run built-in diagnostic checks on the device.
+ * Diagnostics are executed according to the current applied settings.
+ * No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_RunDiagnostics(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_RUN_DIAGNOSTICS, true);
+}
+
+/*
+ * Run self-calibration routines on the device.
+ * Calibration is executed according to the current applied settings.
+ * No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_RunCalibration(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_SELF_CALIBRATION, true);
+}
+
+/*
+ * Run digital calibration routines on the device.
+ * Calibration is executed according to the current applied settings.
+ * No other command must be running when this is called.
+ */
+ADI_SENSE_RESULT adi_sense_RunDigitalCalibration(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    return executeCommand(hDevice, ADISENSE_CORE_COMMAND_CALIBRATE_DIGITAL, true);
+}
+
+/*
+ * Read a set of data samples from the device.
+ * This may be called at any time.
+ */
+ADI_SENSE_RESULT adi_sense_GetData(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_MEASUREMENT_MODE const eMeasurementMode,
+    ADI_SENSE_DATA_SAMPLE    * const pSamples,
+    uint8_t                    const nBytesPerSample,
+    uint32_t                   const nRequested,
+    uint32_t                 * const pnReturned)
+{
+    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
+    uint16_t command = ADI_SENSE_1000_HOST_COMMS_READ_CMD |
+        (REG_ADISENSE_CORE_DATA_FIFO & ADI_SENSE_1000_HOST_COMMS_ADR_MASK);
+    uint8_t commandData[2] = {
+        command >> 8,
+        command & 0xFF
+    };
+    uint8_t commandResponse[2];
+    unsigned nValidSamples = 0;
+    ADI_SENSE_RESULT eRet = ADI_SENSE_SUCCESS;
+
+    do {
+        eRet = adi_sense_SpiTransfer(pCtx->hSpi, commandData, commandResponse,
+                                     sizeof(command), false);
+        if (eRet)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to send read command for FIFO register");
+            return eRet;
+        }
+        adi_sense_TimeDelayUsec(ADI_SENSE_1000_HOST_COMMS_XFER_DELAY);
+    } while ((commandResponse[0] != ADI_SENSE_1000_HOST_COMMS_CMD_RESP_0) ||
+             (commandResponse[1] != ADI_SENSE_1000_HOST_COMMS_CMD_RESP_1));
+
+    for (unsigned i = 0; i < nRequested; i++)
+    {
+        ADI_SENSE_1000_Sensor_Result_t sensorResult;
+        bool_t bHoldCs = true;
+
+        /* Keep the CS signal asserted for all but the last sample */
+        if ((i + 1) == nRequested)
+            bHoldCs = false;
+
+        eRet = adi_sense_SpiTransfer(pCtx->hSpi, NULL, &sensorResult,
+                                     nBytesPerSample, bHoldCs);
+        if (eRet)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to read data from FIFO register");
+            return eRet;
+        }
+
+        if (! sensorResult.Ch_Valid)
+        {
+            /*
+             * Reading an invalid sample indicates that there are no
+             * more samples available or we've lost sync with the device.
+             * In the latter case, it might be recoverable, but return here
+             * to let the application check the device status and decide itself.
+             */
+            eRet = ADI_SENSE_INCOMPLETE;
+            break;
+        }
+
+        ADI_SENSE_DATA_SAMPLE *pSample = &pSamples[nValidSamples];
+
+        pSample->status = (ADI_SENSE_DEVICE_STATUS_FLAGS)0;
+        if (sensorResult.Ch_Error)
+            pSample->status |= ADI_SENSE_DEVICE_STATUS_ERROR;
+        if (sensorResult.Ch_Alert)
+            pSample->status |= ADI_SENSE_DEVICE_STATUS_ALERT;
+
+        if (sensorResult.Ch_Raw)
+            pSample->rawValue = sensorResult.Raw_Sample;
+        else
+            pSample->rawValue = 0;
+
+        pSample->channelId = sensorResult.Channel_ID;
+        pSample->processedValue = sensorResult.Sensor_Result;
+
+        nValidSamples++;
+    }
+    *pnReturned = nValidSamples;
+
+    adi_sense_TimeDelayUsec(ADI_SENSE_1000_HOST_COMMS_XFER_DELAY);
+
+    return eRet;
+}
+
+/*
+ * Close the given ADISENSE device.
+ */
+ADI_SENSE_RESULT adi_sense_Close(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice)
+{
+    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
+
+    adi_sense_GpioClose(pCtx->hGpio);
+    adi_sense_SpiClose(pCtx->hSpi);
+    adi_sense_LogClose();
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_WriteRegister(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    uint16_t nAddress,
+    void *pData,
+    unsigned nLength)
+{
+    ADI_SENSE_RESULT eRet;
+    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
+    uint16_t command = ADI_SENSE_1000_HOST_COMMS_WRITE_CMD |
+        (nAddress & ADI_SENSE_1000_HOST_COMMS_ADR_MASK);
+    uint8_t commandData[2] = {
+        command >> 8,
+        command & 0xFF
+    };
+    uint8_t commandResponse[2];
+
+    do {
+        eRet = adi_sense_SpiTransfer(pCtx->hSpi, commandData, commandResponse,
+                                     sizeof(command), false);
+        if (eRet)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to send write command for register %u",
+                                nAddress);
+            return eRet;
+        }
+
+        adi_sense_TimeDelayUsec(ADI_SENSE_1000_HOST_COMMS_XFER_DELAY);
+    } while ((commandResponse[0] != ADI_SENSE_1000_HOST_COMMS_CMD_RESP_0) ||
+             (commandResponse[1] != ADI_SENSE_1000_HOST_COMMS_CMD_RESP_1));
+
+    eRet = adi_sense_SpiTransfer(pCtx->hSpi, pData, NULL, nLength, false);
+    if (eRet)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to write data (%dB) to register %u",
+                            nLength, nAddress);
+        return eRet;
+    }
+
+    adi_sense_TimeDelayUsec(ADI_SENSE_1000_HOST_COMMS_XFER_DELAY);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_ReadRegister(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    uint16_t nAddress,
+    void *pData,
+    unsigned nLength)
+{
+    ADI_SENSE_RESULT eRet;
+    ADI_SENSE_DEVICE_CONTEXT *pCtx = hDevice;
+    uint16_t command = ADI_SENSE_1000_HOST_COMMS_READ_CMD |
+        (nAddress & ADI_SENSE_1000_HOST_COMMS_ADR_MASK);
+    uint8_t commandData[2] = {
+        command >> 8,
+        command & 0xFF
+    };
+    uint8_t commandResponse[2];
+
+    do {
+        eRet = adi_sense_SpiTransfer(pCtx->hSpi, commandData, commandResponse,
+                                     sizeof(command), false);
+        if (eRet)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to send read command for register %u",
+                                nAddress);
+            return eRet;
+        }
+
+        adi_sense_TimeDelayUsec(ADI_SENSE_1000_HOST_COMMS_XFER_DELAY);
+    } while ((commandResponse[0] != ADI_SENSE_1000_HOST_COMMS_CMD_RESP_0) ||
+             (commandResponse[1] != ADI_SENSE_1000_HOST_COMMS_CMD_RESP_1));
+
+    eRet = adi_sense_SpiTransfer(pCtx->hSpi, NULL, pData, nLength, false);
+    if (eRet)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to read data (%uB) from register %u",
+                            nLength, nAddress);
+        return eRet;
+    }
+
+    adi_sense_TimeDelayUsec(ADI_SENSE_1000_HOST_COMMS_XFER_DELAY);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_GetDeviceReadyState(
+    ADI_SENSE_DEVICE_HANDLE   const hDevice,
+    bool_t                  * const bReady)
+{
+    ADI_ADISENSE_SPI_Chip_Type_t chipTypeReg;
+
+    READ_REG_U8(hDevice, chipTypeReg.VALUE8, SPI_CHIP_TYPE);
+    /* If we read this register successfully, assume the device is ready */
+    *bReady = (chipTypeReg.VALUE8 == REG_ADISENSE_SPI_CHIP_TYPE_RESET);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_GetDataReadyModeInfo(
+    ADI_SENSE_DEVICE_HANDLE         const hDevice,
+    ADI_SENSE_MEASUREMENT_MODE      const eMeasurementMode,
+    ADI_SENSE_1000_OPERATING_MODE * const peOperatingMode,
+    ADI_SENSE_1000_DATAREADY_MODE * const peDataReadyMode,
+    uint32_t                      * const pnSamplesPerDataready,
+    uint32_t                      * const pnSamplesPerCycle,
+    uint8_t                       * const pnBytesPerSample)
+{
+    unsigned nChannelsEnabled = 0;
+    unsigned nSamplesPerCycle = 0;
+
+    ADI_ADISENSE_CORE_Mode_t modeReg;
+    READ_REG_U8(hDevice, modeReg.VALUE8, CORE_MODE);
+
+    if ((eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK) ||
+        (modeReg.Conversion_Mode == ADISENSE_CORE_MODE_SINGLECYCLE))
+        *peOperatingMode = ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE;
+    else if (modeReg.Conversion_Mode == ADISENSE_CORE_MODE_MULTICYCLE)
+        *peOperatingMode = ADI_SENSE_1000_OPERATING_MODE_MULTICYCLE;
+    else
+        *peOperatingMode = ADI_SENSE_1000_OPERATING_MODE_CONTINUOUS;
+
+
+    /* FFT mode is quite different to the other modes:
+     * - Each FFT result produces a batch of samples
+     * - The size of the batch depends on selected FFT size and output config options
+     * - DATAREADY will fire for each FFT result (once per channel)
+     * - The size of the cycle depends on the number of channels enabled for FFT
+     */
+    if (eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_FFT)
+    {
+        ADI_ADISENSE_CORE_FFT_Config_t fftConfigReg;
+
+        unsigned nFftChannels;
+        unsigned nSamplesPerChannel;
+
+        READ_REG_U32(hDevice, fftConfigReg.VALUE32, CORE_FFT_CONFIG);
+
+        nFftChannels = fftConfigReg.FFT_Num_Channels + 1;
+
+        if (fftConfigReg.FFT_Output == ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_MAX16)
+        {
+            nSamplesPerChannel = 16;
+            *pnBytesPerSample = 8;
+        }
+        else if (fftConfigReg.FFT_Output == ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_FULL)
+        {
+            nSamplesPerChannel = (256 << fftConfigReg.FFT_Num_Bins) >> 1;
+            *pnBytesPerSample = 5;
+        }
+        else if (fftConfigReg.FFT_Output == ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_FULL_WITH_RAW)
+        {
+            nSamplesPerChannel = (256 << fftConfigReg.FFT_Num_Bins);
+            *pnBytesPerSample = 8;
+        }
+        else
+        {
+            ADI_SENSE_LOG_ERROR("Invalid FFT output format option %d configured",
+                                fftConfigReg.FFT_Output);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        *pnSamplesPerDataready = nSamplesPerChannel;
+        *pnSamplesPerCycle = nSamplesPerChannel * nFftChannels;
+
+        *peDataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE;
+    }
+    else
+    {
+        if (eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_OMIT_RAW)
+        {
+            *pnBytesPerSample = 5;
+        }
+        else
+        {
+            *pnBytesPerSample = 8;
+        }
+
+        for (ADI_SENSE_1000_CHANNEL_ID chId = ADI_SENSE_1000_CHANNEL_ID_CJC_0;
+             chId < ADI_SENSE_1000_MAX_CHANNELS;
+             chId++)
+        {
+            ADI_ADISENSE_CORE_Sensor_Details_t sensorDetailsReg;
+            ADI_ADISENSE_CORE_Channel_Count_t channelCountReg;
+
+            if (ADI_SENSE_1000_CHANNEL_IS_VIRTUAL(chId))
+                continue;
+
+            READ_REG_U8(hDevice, channelCountReg.VALUE8, CORE_CHANNEL_COUNTn(chId));
+            READ_REG_U32(hDevice, sensorDetailsReg.VALUE32, CORE_SENSOR_DETAILSn(chId));
+
+            if (channelCountReg.Channel_Enable && !sensorDetailsReg.Do_Not_Publish)
+            {
+                ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
+                unsigned nActualChannels = 1;
+
+                READ_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(chId));
+
+                if (chId == ADI_SENSE_1000_CHANNEL_ID_SPI_0)
+                {
+                    /* Some sensors automatically generate samples on additional "virtual" channels
+                     * so these channels must be counted as active when those sensors are selected
+                     * and we use the count from the corresponding "physical" channel */
+                    if ((sensorTypeReg.Sensor_Type >=
+                         ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_DEF_L1) &&
+                        (sensorTypeReg.Sensor_Type <=
+                         ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_ADV_L2))
+                        nActualChannels += 2;
+                }
+
+                nChannelsEnabled += nActualChannels;
+                if (eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK)
+                    /* Assume a single sample per channel in test mode */
+                    nSamplesPerCycle += nActualChannels;
+                else
+                    nSamplesPerCycle += nActualChannels *
+                        (channelCountReg.Channel_Count + 1);
+            }
+        }
+
+        if (nChannelsEnabled == 0)
+        {
+            *pnSamplesPerDataready = 0;
+            *pnSamplesPerCycle = 0;
+            return ADI_SENSE_SUCCESS;
+        }
+
+        *pnSamplesPerCycle = nSamplesPerCycle;
+
+        if (modeReg.Drdy_Mode == ADISENSE_CORE_MODE_DRDY_PER_CONVERSION)
+        {
+            *pnSamplesPerDataready = 1;
+        }
+        else if (modeReg.Drdy_Mode == ADISENSE_CORE_MODE_DRDY_PER_CYCLE)
+        {
+            *pnSamplesPerDataready = nSamplesPerCycle;
+        }
+        else
+        {
+            /* Assume DRDY will be asserted after max. 1 cycle in test mode */
+            if (eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK)
+            {
+                *pnSamplesPerDataready = nSamplesPerCycle;
+            }
+            else
+            {
+                ADI_ADISENSE_CORE_Fifo_Num_Cycles_t fifoNumCyclesReg;
+                READ_REG_U8(hDevice, fifoNumCyclesReg.VALUE8, CORE_FIFO_NUM_CYCLES);
+
+                *pnSamplesPerDataready =
+                nSamplesPerCycle * fifoNumCyclesReg.Fifo_Num_Cycles;
+            }
+        }
+
+        if (modeReg.Drdy_Mode == ADISENSE_CORE_MODE_DRDY_PER_CONVERSION)
+            *peDataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CONVERSION;
+        else if (modeReg.Drdy_Mode == ADISENSE_CORE_MODE_DRDY_PER_CYCLE)
+            *peDataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE;
+        else
+        {
+            /* Assume DRDY will be asserted after max. 1 cycle in test mode */
+            if (eMeasurementMode == ADI_SENSE_MEASUREMENT_MODE_HEALTHCHECK)
+                *peDataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE;
+            else
+                *peDataReadyMode = ADI_SENSE_1000_DATAREADY_PER_MULTICYCLE_BURST;
+        }
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_GetProductID(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_PRODUCT_ID *pProductId)
+{
+    ADI_ADISENSE_SPI_Product_ID_L_t productIdLoReg;
+    ADI_ADISENSE_SPI_Product_ID_H_t productIdHiReg;
+
+    READ_REG_U8(hDevice, productIdLoReg.VALUE8, SPI_PRODUCT_ID_L);
+    READ_REG_U8(hDevice, productIdHiReg.VALUE8, SPI_PRODUCT_ID_H);
+
+    *pProductId = (ADI_SENSE_PRODUCT_ID)((productIdHiReg.VALUE8 << 8)
+                                         | productIdLoReg.VALUE8);
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetPowerMode(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_POWER_MODE powerMode)
+{
+    ADI_ADISENSE_CORE_Power_Config_t powerConfigReg;
+
+    if (powerMode == ADI_SENSE_1000_POWER_MODE_LOW)
+    {
+        powerConfigReg.Power_Mode_ADC = ADISENSE_CORE_POWER_CONFIG_ADC_LOW_POWER;
+    }
+    else if (powerMode == ADI_SENSE_1000_POWER_MODE_MID)
+    {
+        powerConfigReg.Power_Mode_ADC = ADISENSE_CORE_POWER_CONFIG_ADC_MID_POWER;
+    }
+    else if (powerMode == ADI_SENSE_1000_POWER_MODE_FULL)
+    {
+        powerConfigReg.Power_Mode_ADC = ADISENSE_CORE_POWER_CONFIG_ADC_FULL_POWER;
+    }
+    else
+    {
+        ADI_SENSE_LOG_ERROR("Invalid power mode %d specified", powerMode);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    WRITE_REG_U8(hDevice, powerConfigReg.VALUE8, CORE_POWER_CONFIG);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetPowerConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_POWER_CONFIG *pPowerConfig)
+{
+    ADI_SENSE_RESULT eRet;
+
+    eRet = adi_sense_SetPowerMode(hDevice, pPowerConfig->powerMode);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set power mode");
+        return eRet;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetMode(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_OPERATING_MODE eOperatingMode,
+    ADI_SENSE_1000_DATAREADY_MODE eDataReadyMode,
+    ADI_SENSE_1000_CALIBRATION_MODE eCalibrationMode,
+    bool bEnableExtFlash)
+{
+    ADI_ADISENSE_CORE_Mode_t modeReg;
+
+    modeReg.VALUE8 = REG_RESET_VAL(CORE_MODE);
+
+    if (eOperatingMode == ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE)
+    {
+        modeReg.Conversion_Mode = ADISENSE_CORE_MODE_SINGLECYCLE;
+    }
+    else if (eOperatingMode == ADI_SENSE_1000_OPERATING_MODE_CONTINUOUS)
+    {
+        modeReg.Conversion_Mode = ADISENSE_CORE_MODE_CONTINUOUS;
+    }
+    else if (eOperatingMode == ADI_SENSE_1000_OPERATING_MODE_MULTICYCLE)
+    {
+        modeReg.Conversion_Mode = ADISENSE_CORE_MODE_MULTICYCLE;
+    }
+    else
+    {
+        ADI_SENSE_LOG_ERROR("Invalid operating mode %d specified",
+                            eOperatingMode);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    if (eDataReadyMode == ADI_SENSE_1000_DATAREADY_PER_CONVERSION)
+    {
+        modeReg.Drdy_Mode = ADISENSE_CORE_MODE_DRDY_PER_CONVERSION;
+    }
+    else if (eDataReadyMode == ADI_SENSE_1000_DATAREADY_PER_CYCLE)
+    {
+        modeReg.Drdy_Mode = ADISENSE_CORE_MODE_DRDY_PER_CYCLE;
+    }
+    else if (eDataReadyMode == ADI_SENSE_1000_DATAREADY_PER_MULTICYCLE_BURST)
+    {
+        if (eOperatingMode != ADI_SENSE_1000_OPERATING_MODE_MULTICYCLE)
+        {
+            ADI_SENSE_LOG_ERROR(
+                "Data-ready mode %d cannot be used with operating mode %d",
+                eDataReadyMode, eOperatingMode);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+        else
+        {
+            modeReg.Drdy_Mode = ADISENSE_CORE_MODE_DRDY_PER_FIFO_FILL;
+        }
+    }
+    else
+    {
+        ADI_SENSE_LOG_ERROR("Invalid data-ready mode %d specified", eDataReadyMode);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    if (eCalibrationMode == ADI_SENSE_1000_NO_CALIBRATION)
+    {
+        modeReg.Calibration_Method = ADISENSE_CORE_MODE_NO_CAL;
+    }
+    else if (eCalibrationMode == ADI_SENSE_1000_DO_CALIBRATION)
+    {
+        modeReg.Calibration_Method = ADISENSE_CORE_MODE_DO_CAL;
+    }
+    else
+    {
+        ADI_SENSE_LOG_ERROR("Invalid calibration mode %d specified",
+                            eCalibrationMode);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    modeReg.Ext_Flash_Store = (bEnableExtFlash ?
+                                ADISENSE_CORE_MODE_EXT_FLASH_USED :
+                                ADISENSE_CORE_MODE_EXT_FLASH_NOT_USED);
+
+    WRITE_REG_U8(hDevice, modeReg.VALUE8, CORE_MODE);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_SetCycleControl(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    uint32_t nCycleInterval,
+    ADI_SENSE_1000_CYCLE_TYPE eCycleType)
+{
+    ADI_ADISENSE_CORE_Cycle_Control_t cycleControlReg;
+
+    cycleControlReg.VALUE16 = REG_RESET_VAL(CORE_CYCLE_CONTROL);
+
+    if (nCycleInterval < (1 << 12))
+    {
+        cycleControlReg.Cycle_Time_Units = ADISENSE_CORE_CYCLE_CONTROL_MICROSECONDS;
+    }
+    else if (nCycleInterval < (1000 * (1 << 12)))
+    {
+        cycleControlReg.Cycle_Time_Units = ADISENSE_CORE_CYCLE_CONTROL_MILLISECONDS;
+        nCycleInterval /= 1000;
+    }
+    else
+    {
+        cycleControlReg.Cycle_Time_Units = ADISENSE_CORE_CYCLE_CONTROL_SECONDS;
+        nCycleInterval /= 1000000;
+    }
+
+    CHECK_REG_FIELD_VAL(CORE_CYCLE_CONTROL_CYCLE_TIME, nCycleInterval);
+    cycleControlReg.Cycle_Time = nCycleInterval;
+
+    if (eCycleType == ADI_SENSE_1000_CYCLE_TYPE_SWITCH)
+    {
+        cycleControlReg.Cycle_Type = ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TYPE_SWITCH;
+    }
+    else if (eCycleType == ADI_SENSE_1000_CYCLE_TYPE_FULL)
+    {
+        cycleControlReg.Cycle_Type = ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TYPE_FULL;
+    }
+    else
+    {
+        ADI_SENSE_LOG_ERROR("Invalid cycle type %d specified", eCycleType);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    WRITE_REG_U16(hDevice, cycleControlReg.VALUE16, CORE_CYCLE_CONTROL);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetMultiCycleConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_MULTICYCLE_CONFIG *pMultiCycleConfig)
+{
+    CHECK_REG_FIELD_VAL(CORE_FIFO_NUM_CYCLES_FIFO_NUM_CYCLES,
+                        pMultiCycleConfig->cyclesPerBurst);
+
+    WRITE_REG_U8(hDevice, pMultiCycleConfig->cyclesPerBurst,
+                 CORE_FIFO_NUM_CYCLES);
+
+    WRITE_REG_U32(hDevice, pMultiCycleConfig->burstInterval,
+                  CORE_MULTI_CYCLE_REPEAT_INTERVAL);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetExternalReferenceValues(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    float32_t externalRef1Value,
+    float32_t externalRef2Value)
+{
+    WRITE_REG_FLOAT(hDevice, externalRef1Value, CORE_EXTERNAL_REFERENCE1);
+    WRITE_REG_FLOAT(hDevice, externalRef2Value, CORE_EXTERNAL_REFERENCE2);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetMeasurementConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_MEASUREMENT_CONFIG *pMeasConfig)
+{
+    ADI_SENSE_RESULT eRet;
+
+    eRet = adi_sense_SetMode(hDevice,
+                             pMeasConfig->operatingMode,
+                             pMeasConfig->dataReadyMode,
+                             pMeasConfig->calibrationMode,
+                             pMeasConfig->enableExternalFlash);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set operating mode");
+        return eRet;
+    }
+
+    eRet = adi_sense_SetCycleControl(hDevice,
+                                     pMeasConfig->cycleInterval,
+                                     pMeasConfig->cycleType);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set cycle control");
+        return eRet;
+    }
+
+    if (pMeasConfig->operatingMode == ADI_SENSE_1000_OPERATING_MODE_MULTICYCLE)
+    {
+        eRet = adi_sense_SetMultiCycleConfig(hDevice,
+                                            &pMeasConfig->multiCycleConfig);
+        if (eRet != ADI_SENSE_SUCCESS)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set multi-cycle configuration");
+            return eRet;
+        }
+    }
+
+    eRet = adi_sense_SetExternalReferenceValues(hDevice,
+                                                pMeasConfig->externalRef1Value,
+                                                pMeasConfig->externalRef2Value);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set external reference values");
+        return eRet;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetDiagnosticsConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_DIAGNOSTICS_CONFIG *pDiagnosticsConfig)
+{
+    ADI_ADISENSE_CORE_Diagnostics_Control_t diagnosticsControlReg;
+
+    diagnosticsControlReg.VALUE16 = REG_RESET_VAL(CORE_DIAGNOSTICS_CONTROL);
+
+    if (pDiagnosticsConfig->disableGlobalDiag)
+        diagnosticsControlReg.Diag_Global_En = 0;
+    else
+        diagnosticsControlReg.Diag_Global_En = 1;
+
+    if (pDiagnosticsConfig->disableMeasurementDiag)
+        diagnosticsControlReg.Diag_Meas_En = 0;
+    else
+        diagnosticsControlReg.Diag_Meas_En = 1;
+
+    switch (pDiagnosticsConfig->osdFrequency)
+    {
+    case ADI_SENSE_1000_OPEN_SENSOR_DIAGNOSTICS_DISABLED:
+        diagnosticsControlReg.Diag_OSD_Freq = ADISENSE_CORE_DIAGNOSTICS_CONTROL_OCD_OFF;
+        break;
+    case ADI_SENSE_1000_OPEN_SENSOR_DIAGNOSTICS_PER_CYCLE:
+        diagnosticsControlReg.Diag_OSD_Freq = ADISENSE_CORE_DIAGNOSTICS_CONTROL_OCD_PER_1_CYCLE;
+        break;
+    case ADI_SENSE_1000_OPEN_SENSOR_DIAGNOSTICS_PER_100_CYCLES:
+        diagnosticsControlReg.Diag_OSD_Freq = ADISENSE_CORE_DIAGNOSTICS_CONTROL_OCD_PER_100_CYCLES;
+        break;
+    case ADI_SENSE_1000_OPEN_SENSOR_DIAGNOSTICS_PER_1000_CYCLES:
+        diagnosticsControlReg.Diag_OSD_Freq = ADISENSE_CORE_DIAGNOSTICS_CONTROL_OCD_PER_1000_CYCLES;
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Invalid open-sensor diagnostic frequency %d specified",
+                            pDiagnosticsConfig->osdFrequency);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    WRITE_REG_U16(hDevice, diagnosticsControlReg.VALUE16, CORE_DIAGNOSTICS_CONTROL);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetFftConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_FFT_CONFIG *pFftConfig,
+    ADI_SENSE_1000_CHANNEL_CONFIG *pChannels)
+{
+    ADI_ADISENSE_CORE_FFT_Config_t fftConfigReg;
+    ADI_ADISENSE_CORE_Mode_t modeReg;
+    uint32_t numFftChannels = 0;
+
+    fftConfigReg.VALUE32 = REG_RESET_VAL(CORE_FFT_CONFIG);
+
+    for (ADI_SENSE_1000_CHANNEL_ID id = ADI_SENSE_1000_CHANNEL_ID_CJC_0;
+         id < ADI_SENSE_1000_MAX_CHANNELS;
+         id++)
+    {
+        if (pChannels[id].enableFFT)
+        {
+            if (numFftChannels >= 4) /* TODO - temporary limit */
+            {
+                ADI_SENSE_LOG_ERROR("Maximum limit of 4 FFT channels exceeded");
+                return ADI_SENSE_INVALID_PARAM;
+            }
+
+            numFftChannels++;
+        }
+    }
+
+    if (numFftChannels > 0)
+    {
+        fftConfigReg.FFT_Num_Channels = numFftChannels - 1;
+
+        switch (pFftConfig->size)
+        {
+        case ADI_SENSE_1000_FFT_SIZE_256:
+            fftConfigReg.FFT_Num_Bins = ADISENSE_CORE_FFT_CONFIG_FFT_BINS_256;
+            break;
+        case ADI_SENSE_1000_FFT_SIZE_512:
+            fftConfigReg.FFT_Num_Bins = ADISENSE_CORE_FFT_CONFIG_FFT_BINS_512;
+            break;
+        case ADI_SENSE_1000_FFT_SIZE_1024:
+            fftConfigReg.FFT_Num_Bins = ADISENSE_CORE_FFT_CONFIG_FFT_BINS_1024;
+            break;
+        case ADI_SENSE_1000_FFT_SIZE_2048:
+            fftConfigReg.FFT_Num_Bins = ADISENSE_CORE_FFT_CONFIG_FFT_BINS_2048;
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid FFT size option %d specified",
+                                pFftConfig->size);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        switch (pFftConfig->window)
+        {
+        case ADI_SENSE_1000_FFT_WINDOW_NONE:
+            fftConfigReg.FFT_Window = ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_NONE;
+            break;
+        case ADI_SENSE_1000_FFT_WINDOW_HANN:
+            fftConfigReg.FFT_Window = ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_HANN;
+            break;
+        case ADI_SENSE_1000_FFT_WINDOW_BLACKMAN_HARRIS:
+            fftConfigReg.FFT_Window = ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_BLACKMANN_HARRIS;
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid FFT window option %d specified",
+                                pFftConfig->window);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        switch (pFftConfig->output)
+        {
+        case ADI_SENSE_1000_FFT_OUTPUT_FULL:
+            fftConfigReg.FFT_Output = ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_FULL;
+            break;
+        case ADI_SENSE_1000_FFT_OUTPUT_MAX16:
+            fftConfigReg.FFT_Output = ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_MAX16;
+            break;
+        case ADI_SENSE_1000_FFT_OUTPUT_FULL_WITH_RAW:
+            fftConfigReg.FFT_Output = ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_FULL_WITH_RAW;
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid FFT output format option %d specified",
+                                pFftConfig->output);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+    }
+    WRITE_REG_U32(hDevice, fftConfigReg.VALUE32, CORE_FFT_CONFIG);
+
+    if (numFftChannels > 0)
+    {
+        READ_REG_U8(hDevice, modeReg.VALUE8, CORE_MODE);
+
+        if (pFftConfig->mode == ADI_SENSE_1000_FFT_MODE_SINGLE)
+        {
+            modeReg.FFT_Mode = ADISENSE_CORE_MODE_FFT_MODE_SINGLE;
+        }
+        else if (pFftConfig->mode == ADI_SENSE_1000_FFT_MODE_CONTINUOUS)
+        {
+            modeReg.FFT_Mode = ADISENSE_CORE_MODE_FFT_MODE_CONTINUOUS;
+        }
+        else
+        {
+            ADI_SENSE_LOG_ERROR("Invalid FFT mode %d specified",
+                                pFftConfig->mode);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        WRITE_REG_U8(hDevice, modeReg.VALUE8, CORE_MODE);
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetChannelCount(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    uint32_t nMeasurementsPerCycle)
+{
+    ADI_ADISENSE_CORE_Channel_Count_t channelCountReg;
+
+    channelCountReg.VALUE8 = REG_RESET_VAL(CORE_CHANNEL_COUNTn);
+
+    if (nMeasurementsPerCycle > 0)
+    {
+        nMeasurementsPerCycle -= 1;
+
+        CHECK_REG_FIELD_VAL(CORE_CHANNEL_COUNT_CHANNEL_COUNT,
+                            nMeasurementsPerCycle);
+
+        channelCountReg.Channel_Enable = 1;
+        channelCountReg.Channel_Count = nMeasurementsPerCycle;
+    }
+    else
+    {
+        channelCountReg.Channel_Enable = 0;
+    }
+
+    WRITE_REG_U8(hDevice, channelCountReg.VALUE8, CORE_CHANNEL_COUNTn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetChannelOptions(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_PRIORITY ePriority,
+    bool bEnableFft)
+{
+    ADI_ADISENSE_CORE_Channel_Options_t channelOptionsReg;
+
+    channelOptionsReg.VALUE8 = REG_RESET_VAL(CORE_CHANNEL_OPTIONSn);
+
+    CHECK_REG_FIELD_VAL(CORE_CHANNEL_OPTIONS_CHANNEL_PRIORITY, ePriority);
+    channelOptionsReg.Channel_Priority = ePriority;
+    channelOptionsReg.FFT_Enable_Ch = bEnableFft ? 1 : 0;
+
+    WRITE_REG_U8(hDevice, channelOptionsReg.VALUE8, CORE_CHANNEL_OPTIONSn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetChannelSkipCount(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    uint32_t nCycleSkipCount)
+{
+    ADI_ADISENSE_CORE_Channel_Skip_t channelSkipReg;
+
+    channelSkipReg.VALUE16 = REG_RESET_VAL(CORE_CHANNEL_SKIPn);
+
+    CHECK_REG_FIELD_VAL(CORE_CHANNEL_SKIP_CHANNEL_SKIP, nCycleSkipCount);
+
+    channelSkipReg.Channel_Skip = nCycleSkipCount;
+
+    WRITE_REG_U16(hDevice, channelSkipReg.VALUE16, CORE_CHANNEL_SKIPn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelAdcSensorType(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_ADC_SENSOR_TYPE sensorType)
+{
+    ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
+
+    sensorTypeReg.VALUE16 = REG_RESET_VAL(CORE_SENSOR_TYPEn);
+
+    /* Ensure that the sensor type is valid for this channel */
+    switch(sensorType)
+    {
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_J_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_K_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_T_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_3_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_4_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_J_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_K_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_T_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_2_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_3_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMOCOUPLE_4_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_PT100_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_PT1000_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_3_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_4_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_PT100_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_PT1000_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_2_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_3_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_3WIRE_4_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_PT100_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_PT1000_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_3_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_4_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_PT100_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_PT1000_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_2_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_3_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_4WIRE_4_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_3_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_4_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_2_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_3_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_4WIRE_4_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_3_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_4_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_2_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_3_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_BRIDGE_6WIRE_4_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_A_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_B_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_A_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_B_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_MICROPHONE_2_ADV_L2:
+        if (! ADI_SENSE_1000_CHANNEL_IS_ADC_SENSOR(eChannelId))
+        {
+            ADI_SENSE_LOG_ERROR(
+                "Invalid ADC sensor type %d specified for channel %d",
+                sensorType, eChannelId);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+        break;
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_PT100_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_PT1000_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_3_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_4_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_PT100_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_PT1000_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_2_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_3_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_RTD_2WIRE_4_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_TYPEA_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_TYPEA_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_TYPEA_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_TYPEA_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_DIODE_2C_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_DIODE_3C_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_A_10K_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_B_10K_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_3_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_4_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_A_10K_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_B_10K_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_2_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_3_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_THERMISTOR_4_ADV_L2:
+        if (! (ADI_SENSE_1000_CHANNEL_IS_ADC_SENSOR(eChannelId) ||
+               ADI_SENSE_1000_CHANNEL_IS_ADC_CJC(eChannelId)))
+        {
+            ADI_SENSE_LOG_ERROR(
+                "Invalid ADC sensor type %d specified for channel %d",
+                sensorType, eChannelId);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+        break;
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE:
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_A_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_B_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_A_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_B_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_2_ADV_L2:
+        if (! ADI_SENSE_1000_CHANNEL_IS_ADC_VOLTAGE(eChannelId))
+        {
+            ADI_SENSE_LOG_ERROR(
+                "Invalid ADC sensor type %d specified for channel %d",
+                sensorType, eChannelId);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+        break;
+    case ADI_SENSE_1000_ADC_SENSOR_CURRENT:
+    case ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_A_DEF_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_1_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_2_DEF_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_A_ADV_L1:
+    case ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_1_ADV_L2:
+    case ADI_SENSE_1000_ADC_SENSOR_CURRENT_PRESSURE_2_ADV_L2:
+        if (! ADI_SENSE_1000_CHANNEL_IS_ADC_CURRENT(eChannelId))
+        {
+            ADI_SENSE_LOG_ERROR(
+                "Invalid ADC sensor type %d specified for channel %d",
+                sensorType, eChannelId);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Invalid/unsupported ADC sensor type %d specified",
+                            sensorType);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    sensorTypeReg.Sensor_Type = sensorType;
+
+    WRITE_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelAdcSensorDetails(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
+/*
+ * TODO - it would be nice if the general- vs. ADC-specific sensor details could be split into separate registers
+ * General details:
+ * - Measurement_Units
+ * - Compensation_Channel
+ * - CJC_Publish (if "CJC" was removed from the name)
+ * ADC-specific details:
+ * - PGA_Gain
+ * - Reference_Select
+ * - Reference_Buffer_Disable
+ * - Vbias
+ */
+{
+    ADI_SENSE_1000_ADC_CHANNEL_CONFIG *pAdcChannelConfig = &pChannelConfig->adcChannelConfig;
+    ADI_SENSE_1000_ADC_REFERENCE_CONFIG *pRefConfig = &pAdcChannelConfig->reference;
+    ADI_ADISENSE_CORE_Sensor_Details_t sensorDetailsReg;
+
+    sensorDetailsReg.VALUE32 = REG_RESET_VAL(CORE_SENSOR_DETAILSn);
+
+    switch(pChannelConfig->measurementUnit)
+    {
+    case ADI_SENSE_1000_MEASUREMENT_UNIT_FAHRENHEIT:
+        sensorDetailsReg.Measurement_Units = ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGF;
+        break;
+    case ADI_SENSE_1000_MEASUREMENT_UNIT_CELSIUS:
+        sensorDetailsReg.Measurement_Units = ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGC;
+        break;
+    case ADI_SENSE_1000_MEASUREMENT_UNIT_UNSPECIFIED:
+        sensorDetailsReg.Measurement_Units = ADISENSE_CORE_SENSOR_DETAILS_UNITS_UNSPECIFIED;
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Invalid measurement unit %d specified",
+                            pChannelConfig->measurementUnit);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    if (pChannelConfig->compensationChannel == ADI_SENSE_1000_CHANNEL_ID_NONE)
+    {
+        sensorDetailsReg.Compensation_Disable = 1;
+        sensorDetailsReg.Compensation_Channel = 0;
+    }
+    else
+    {
+        sensorDetailsReg.Compensation_Disable = 0;
+        sensorDetailsReg.Compensation_Channel = pChannelConfig->compensationChannel;
+    }
+
+    switch(pRefConfig->type)
+    {
+    case ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_INTERNAL_1:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_RINT1;
+        break;
+    case ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_INTERNAL_2:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_RINT2;
+        break;
+    case ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_INTERNAL:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_INT;
+        break;
+    case ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_AVDD:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_AVDD;
+        break;
+    case ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_EXTERNAL_1:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_REXT1;
+        break;
+    case ADI_SENSE_1000_ADC_REFERENCE_RESISTOR_EXTERNAL_2:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_REXT2;
+        break;
+    case ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_EXTERNAL_1:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_VEXT1;
+        break;
+    case ADI_SENSE_1000_ADC_REFERENCE_VOLTAGE_EXTERNAL_2:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_VEXT2;
+        break;
+    case ADI_SENSE_1000_ADC_REFERENCE_BRIDGE_EXCITATION:
+        sensorDetailsReg.Reference_Select = ADISENSE_CORE_SENSOR_DETAILS_REF_EXC;
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Invalid ADC reference type %d specified",
+                            pRefConfig->type);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    switch(pAdcChannelConfig->gain)
+    {
+    case ADI_SENSE_1000_ADC_GAIN_1X:
+        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_1;
+        break;
+    case ADI_SENSE_1000_ADC_GAIN_2X:
+        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_2;
+        break;
+    case ADI_SENSE_1000_ADC_GAIN_4X:
+        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_4;
+        break;
+    case ADI_SENSE_1000_ADC_GAIN_8X:
+        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_8;
+        break;
+    case ADI_SENSE_1000_ADC_GAIN_16X:
+        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_16;
+        break;
+    case ADI_SENSE_1000_ADC_GAIN_32X:
+        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_32;
+        break;
+    case ADI_SENSE_1000_ADC_GAIN_64X:
+        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_64;
+        break;
+    case ADI_SENSE_1000_ADC_GAIN_128X:
+        sensorDetailsReg.PGA_Gain = ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_128;
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Invalid ADC gain %d specified",
+                            pAdcChannelConfig->gain);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    if (pAdcChannelConfig->enableVbias)
+        sensorDetailsReg.Vbias = 1;
+    else
+        sensorDetailsReg.Vbias = 0;
+
+    if (pAdcChannelConfig->reference.disableBuffer)
+        sensorDetailsReg.Reference_Buffer_Disable = 1;
+    else
+        sensorDetailsReg.Reference_Buffer_Disable = 0;
+
+    if (pChannelConfig->disablePublishing)
+        sensorDetailsReg.Do_Not_Publish = 1;
+    else
+        sensorDetailsReg.Do_Not_Publish = 0;
+
+    if (pChannelConfig->enableUnityLut)
+        sensorDetailsReg.Unity_LUT_Select = 1;
+    else
+        sensorDetailsReg.Unity_LUT_Select = 0;
+
+    WRITE_REG_U32(hDevice, sensorDetailsReg.VALUE32, CORE_SENSOR_DETAILSn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelAdcFilter(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_ADC_FILTER_CONFIG *pFilterConfig)
+{
+    ADI_ADISENSE_CORE_Filter_Select_t filterSelectReg;
+
+    filterSelectReg.VALUE32 = REG_RESET_VAL(CORE_FILTER_SELECTn);
+
+    if (pFilterConfig->type == ADI_SENSE_1000_ADC_FILTER_SINC4)
+    {
+        filterSelectReg.ADC_Filter_Type = ADISENSE_CORE_FILTER_SELECT_FILTER_SINC4;
+        filterSelectReg.ADC_FS = pFilterConfig->fs;
+    }
+    else if (pFilterConfig->type == ADI_SENSE_1000_ADC_FILTER_FIR_20SPS)
+    {
+        filterSelectReg.ADC_Filter_Type = ADISENSE_CORE_FILTER_SELECT_FILTER_FIR_20SPS;
+    }
+    else if (pFilterConfig->type == ADI_SENSE_1000_ADC_FILTER_FIR_25SPS)
+    {
+        filterSelectReg.ADC_Filter_Type = ADISENSE_CORE_FILTER_SELECT_FILTER_FIR_25SPS;
+    }
+    else
+    {
+        ADI_SENSE_LOG_ERROR("Invalid ADC filter type %d specified",
+                            pFilterConfig->type);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    WRITE_REG_U32(hDevice, filterSelectReg.VALUE32, CORE_FILTER_SELECTn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelAdcCurrentConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_ADC_EXC_CURRENT_CONFIG *pCurrentConfig)
+{
+    ADI_ADISENSE_CORE_Channel_Excitation_t channelExcitationReg;
+
+    channelExcitationReg.VALUE8 = REG_RESET_VAL(CORE_CHANNEL_EXCITATIONn);
+
+    if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_NONE)
+    {
+        channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_OFF;
+    }
+    else
+    {
+        if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_50uA)
+            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_50UA;
+        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_100uA)
+            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_100UA;
+        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_250uA)
+            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_250UA;
+        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_500uA)
+            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_500UA;
+        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_750uA)
+            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_750UA;
+        else if (pCurrentConfig->outputLevel == ADI_SENSE_1000_ADC_EXC_CURRENT_1000uA)
+            channelExcitationReg.IOUT_Excitation_Current = ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_1000UA;
+        else
+        {
+            ADI_SENSE_LOG_ERROR("Invalid ADC excitation current %d specified",
+                                pCurrentConfig->outputLevel);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+    }
+
+    if (pCurrentConfig->diodeRatio == ADI_SENSE_1000_ADC_EXC_CURRENT_IOUT_DIODE_DEFAULT)
+    {
+        channelExcitationReg.IOUT_Diode_Ratio = 0;
+    }
+    else
+    {
+        channelExcitationReg.IOUT_Diode_Ratio = 1;
+    }
+
+    WRITE_REG_U8(hDevice, channelExcitationReg.VALUE8, CORE_CHANNEL_EXCITATIONn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_SetAdcChannelConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
+{
+    ADI_SENSE_RESULT eRet;
+    ADI_SENSE_1000_ADC_CHANNEL_CONFIG *pAdcChannelConfig =
+        &pChannelConfig->adcChannelConfig;
+
+    eRet = adi_sense_SetChannelAdcSensorType(hDevice, eChannelId,
+                                             pAdcChannelConfig->sensor);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set ADC sensor type for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetChannelAdcSensorDetails(hDevice, eChannelId,
+                                                pChannelConfig);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set ADC sensor details for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetChannelAdcFilter(hDevice, eChannelId,
+                                         &pAdcChannelConfig->filter);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set ADC filter for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetChannelAdcCurrentConfig(hDevice, eChannelId,
+                                                &pAdcChannelConfig->current);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set ADC current for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelDigitalSensorDetails(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
+{
+    ADI_ADISENSE_CORE_Sensor_Details_t sensorDetailsReg;
+
+    sensorDetailsReg.VALUE32 = REG_RESET_VAL(CORE_SENSOR_DETAILSn);
+
+    if (pChannelConfig->compensationChannel == ADI_SENSE_1000_CHANNEL_ID_NONE)
+    {
+        sensorDetailsReg.Compensation_Disable = 1;
+        sensorDetailsReg.Compensation_Channel = 0;
+    }
+    else
+    {
+        ADI_SENSE_LOG_ERROR("Invalid compensation channel specified for digital sensor");
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    if (pChannelConfig->measurementUnit == ADI_SENSE_1000_MEASUREMENT_UNIT_UNSPECIFIED)
+    {
+        sensorDetailsReg.Measurement_Units = ADISENSE_CORE_SENSOR_DETAILS_UNITS_UNSPECIFIED;
+    }
+    else
+    {
+        ADI_SENSE_LOG_ERROR("Invalid measurement unit specified for digital channel");
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    if (pChannelConfig->disablePublishing)
+        sensorDetailsReg.Do_Not_Publish = 1;
+    else
+        sensorDetailsReg.Do_Not_Publish = 0;
+
+    if (pChannelConfig->enableUnityLut)
+        sensorDetailsReg.Unity_LUT_Select = 1;
+    else
+        sensorDetailsReg.Unity_LUT_Select = 0;
+
+    sensorDetailsReg.Vbias = 0;
+    sensorDetailsReg.Reference_Buffer_Disable = 1;
+
+    WRITE_REG_U32(hDevice, sensorDetailsReg.VALUE32, CORE_SENSOR_DETAILSn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetDigitalSensorCommands(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMAND *pConfigCommand,
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMAND *pDataRequestCommand)
+{
+    ADI_ADISENSE_CORE_Digital_Sensor_Num_Cmds_t numCmdsReg;
+
+    numCmdsReg.VALUE8 = REG_RESET_VAL(CORE_DIGITAL_SENSOR_NUM_CMDSn);
+
+    CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_NUM_CMDS_DIGITAL_SENSOR_NUM_CFG_CMDS,
+                        pConfigCommand->commandLength);
+    CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_NUM_CMDS_DIGITAL_SENSOR_NUM_READ_CMDS,
+                        pDataRequestCommand->commandLength);
+
+    numCmdsReg.Digital_Sensor_Num_Cfg_Cmds = pConfigCommand->commandLength;
+    numCmdsReg.Digital_Sensor_Num_Read_Cmds = pDataRequestCommand->commandLength;
+
+    WRITE_REG_U8(hDevice, numCmdsReg.VALUE8,
+                 CORE_DIGITAL_SENSOR_NUM_CMDSn(eChannelId));
+
+    /*
+     * NOTE - the fall-through cases in the switch statement below are
+     * intentional, so temporarily disable related compiler warnings which may
+     * be produced here by GCC
+     */
+#ifndef __CC_ARM
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#endif
+
+    switch (pConfigCommand->commandLength)
+    {
+    case 7:
+        WRITE_REG_U8(hDevice, pConfigCommand->command[6],
+                     CORE_DIGITAL_SENSOR_COMMAND7n(eChannelId));
+    case 6:
+        WRITE_REG_U8(hDevice, pConfigCommand->command[5],
+                     CORE_DIGITAL_SENSOR_COMMAND6n(eChannelId));
+    case 5:
+        WRITE_REG_U8(hDevice, pConfigCommand->command[4],
+                     CORE_DIGITAL_SENSOR_COMMAND5n(eChannelId));
+    case 4:
+        WRITE_REG_U8(hDevice, pConfigCommand->command[3],
+                     CORE_DIGITAL_SENSOR_COMMAND4n(eChannelId));
+    case 3:
+        WRITE_REG_U8(hDevice, pConfigCommand->command[2],
+                     CORE_DIGITAL_SENSOR_COMMAND3n(eChannelId));
+    case 2:
+        WRITE_REG_U8(hDevice, pConfigCommand->command[1],
+                     CORE_DIGITAL_SENSOR_COMMAND2n(eChannelId));
+    case 1:
+        WRITE_REG_U8(hDevice, pConfigCommand->command[0],
+                     CORE_DIGITAL_SENSOR_COMMAND1n(eChannelId));
+    case 0:
+    default:
+        break;
+    };
+
+    switch (pDataRequestCommand->commandLength)
+    {
+    case 7:
+        WRITE_REG_U8(hDevice, pDataRequestCommand->command[6],
+                     CORE_DIGITAL_SENSOR_READ_CMD7n(eChannelId));
+    case 6:
+        WRITE_REG_U8(hDevice, pDataRequestCommand->command[5],
+                     CORE_DIGITAL_SENSOR_READ_CMD6n(eChannelId));
+    case 5:
+        WRITE_REG_U8(hDevice, pDataRequestCommand->command[4],
+                     CORE_DIGITAL_SENSOR_READ_CMD5n(eChannelId));
+    case 4:
+        WRITE_REG_U8(hDevice, pDataRequestCommand->command[3],
+                     CORE_DIGITAL_SENSOR_READ_CMD4n(eChannelId));
+    case 3:
+        WRITE_REG_U8(hDevice, pDataRequestCommand->command[2],
+                     CORE_DIGITAL_SENSOR_READ_CMD3n(eChannelId));
+    case 2:
+        WRITE_REG_U8(hDevice, pDataRequestCommand->command[1],
+                     CORE_DIGITAL_SENSOR_READ_CMD2n(eChannelId));
+    case 1:
+        WRITE_REG_U8(hDevice, pDataRequestCommand->command[0],
+                     CORE_DIGITAL_SENSOR_READ_CMD1n(eChannelId));
+    case 0:
+    default:
+        break;
+    };
+
+    /* Re-enable the implicit-fallthrough warning */
+#ifndef __CC_ARM
+#pragma GCC diagnostic pop
+#endif
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetDigitalSensorFormat(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_DIGITAL_SENSOR_DATA_FORMAT *pDataFormat)
+{
+    ADI_ADISENSE_CORE_Digital_Sensor_Config_t sensorConfigReg;
+
+    sensorConfigReg.VALUE16 = REG_RESET_VAL(CORE_DIGITAL_SENSOR_CONFIGn);
+
+    if (pDataFormat->coding != ADI_SENSE_1000_DIGITAL_SENSOR_DATA_CODING_NONE)
+    {
+        if (pDataFormat->frameLength == 0)
+        {
+            ADI_SENSE_LOG_ERROR("Invalid frame length specified for digital sensor data format");
+            return ADI_SENSE_INVALID_PARAM;
+        }
+        if (pDataFormat->numDataBits == 0)
+        {
+            ADI_SENSE_LOG_ERROR("Invalid frame length specified for digital sensor data format");
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_CONFIG_DIGITAL_SENSOR_READ_BYTES,
+                            pDataFormat->frameLength - 1);
+        CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_CONFIG_DIGITAL_SENSOR_DATA_BITS,
+                            pDataFormat->numDataBits - 1);
+        CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_CONFIG_DIGITAL_SENSOR_BIT_OFFSET,
+                            pDataFormat->bitOffset);
+
+        sensorConfigReg.Digital_Sensor_Read_Bytes = pDataFormat->frameLength - 1;
+        sensorConfigReg.Digital_Sensor_Data_Bits = pDataFormat->numDataBits - 1;
+        sensorConfigReg.Digital_Sensor_Bit_Offset = pDataFormat->bitOffset;
+        sensorConfigReg.Digital_Sensor_Left_Aligned = pDataFormat->leftJustified ? 1 : 0;
+        sensorConfigReg.Digital_Sensor_Little_Endian = pDataFormat->littleEndian ? 1 : 0;
+
+        switch (pDataFormat->coding)
+        {
+        case ADI_SENSE_1000_DIGITAL_SENSOR_DATA_CODING_UNIPOLAR:
+            sensorConfigReg.Digital_Sensor_Coding = ADISENSE_CORE_DIGITAL_SENSOR_CONFIG_CODING_UNIPOLAR;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_DATA_CODING_TWOS_COMPLEMENT:
+            sensorConfigReg.Digital_Sensor_Coding = ADISENSE_CORE_DIGITAL_SENSOR_CONFIG_CODING_TWOS_COMPL;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_DATA_CODING_OFFSET_BINARY:
+            sensorConfigReg.Digital_Sensor_Coding = ADISENSE_CORE_DIGITAL_SENSOR_CONFIG_CODING_OFFSET_BINARY;
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid coding specified for digital sensor data format");
+            return ADI_SENSE_INVALID_PARAM;
+        }
+    }
+    else
+    {
+        sensorConfigReg.Digital_Sensor_Coding = ADISENSE_CORE_DIGITAL_SENSOR_CONFIG_CODING_NONE;
+    }
+
+    WRITE_REG_U16(hDevice, sensorConfigReg.VALUE16,
+                  CORE_DIGITAL_SENSOR_CONFIGn(eChannelId));
+
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetDigitalCalibrationParam(
+        ADI_SENSE_DEVICE_HANDLE hDevice,
+        ADI_SENSE_1000_CHANNEL_ID eChannelId,
+        ADI_SENSE_1000_DIGITAL_CALIBRATION_COMMAND *pCalibrationParam)
+{
+    ADI_ADISENSE_CORE_Calibration_Parameter_t calibrationParamReg;
+
+    calibrationParamReg.VALUE32 = REG_RESET_VAL(CORE_CALIBRATION_PARAMETERn);
+
+    if (pCalibrationParam->enableCalibrationParam == false)
+        calibrationParamReg.Calibration_Parameter_Enable = 0;
+    else
+        calibrationParamReg.Calibration_Parameter_Enable = 1;
+
+    CHECK_REG_FIELD_VAL(CORE_CALIBRATION_PARAMETER_CALIBRATION_PARAMETER,
+        pCalibrationParam->calibrationParam);
+
+    calibrationParamReg.Calibration_Parameter = pCalibrationParam->calibrationParam;
+
+    WRITE_REG_U32(hDevice, calibrationParamReg.VALUE32,
+                  CORE_CALIBRATION_PARAMETERn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelI2cSensorType(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_I2C_SENSOR_TYPE sensorType)
+{
+    ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
+
+    sensorTypeReg.VALUE16 = REG_RESET_VAL(CORE_SENSOR_TYPEn);
+
+    /* Ensure that the sensor type is valid for this channel */
+    switch(sensorType)
+    {
+    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_DEF_L1:
+    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_DEF_L1:
+    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_DEF_L2:
+    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_DEF_L2:
+    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_ADV_L1:
+    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_ADV_L1:
+    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_A_ADV_L2:
+    case ADI_SENSE_1000_I2C_SENSOR_HUMIDITY_B_ADV_L2:
+    case ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_DEF_L1:
+    case ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_DEF_L2:
+    case ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_ADV_L1:
+    case ADI_SENSE_1000_I2C_SENSOR_AMBIENTLIGHT_A_ADV_L2:
+        sensorTypeReg.Sensor_Type = sensorType;
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Unsupported I2C sensor type %d specified", sensorType);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    WRITE_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelI2cSensorAddress(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    uint32_t deviceAddress)
+{
+    CHECK_REG_FIELD_VAL(CORE_DIGITAL_SENSOR_ADDRESS_DIGITAL_SENSOR_ADDRESS, deviceAddress);
+    WRITE_REG_U8(hDevice, deviceAddress, CORE_DIGITAL_SENSOR_ADDRESSn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetDigitalChannelComms(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_DIGITAL_SENSOR_COMMS *pDigitalComms)
+{
+    ADI_ADISENSE_CORE_Digital_Sensor_Comms_t digitalSensorComms;
+
+    digitalSensorComms.VALUE16 = REG_RESET_VAL(CORE_DIGITAL_SENSOR_COMMSn);
+
+    if(pDigitalComms->useCustomCommsConfig)
+    {
+        digitalSensorComms.Digital_Sensor_Comms_En = 1;
+
+        if(pDigitalComms->i2cClockSpeed == ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_I2C_CLOCK_SPEED_100K)
+        {
+            digitalSensorComms.I2C_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_100K;
+        }
+        else if(pDigitalComms->i2cClockSpeed == ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_I2C_CLOCK_SPEED_400K)
+        {
+            digitalSensorComms.I2C_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_400K;
+        }
+        else
+        {
+            ADI_SENSE_LOG_ERROR("Invalid I2C clock speed %d specified",
+                                pDigitalComms->i2cClockSpeed);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        if(pDigitalComms->spiMode == ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE_0)
+        {
+            digitalSensorComms.SPI_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_0;
+        }
+        else if(pDigitalComms->spiMode == ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE_1)
+        {
+            digitalSensorComms.SPI_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_1;
+        }
+        else if(pDigitalComms->spiMode == ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE_2)
+        {
+            digitalSensorComms.SPI_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_2;
+        }
+        else if(pDigitalComms->spiMode == ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_MODE_3)
+        {
+            digitalSensorComms.SPI_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_3;
+        }
+        else
+        {
+            ADI_SENSE_LOG_ERROR("Invalid SPI mode %d specified",
+                                pDigitalComms->spiMode);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        switch (pDigitalComms->spiClock)
+        {
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_13MHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_13MHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_6_5MHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_6_5MHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_3_25MHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_3_25MHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_1_625MHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_1_625MHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_812KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_812KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_406KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_406KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_203KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_203KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_101KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_101KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_50KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_50KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_25KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_25KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_12KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_12KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_6KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_6KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_3KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_3KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_1_5KHZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_1_5KHZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_793HZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_793HZ;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_SPI_CLOCK_396HZ:
+            digitalSensorComms.SPI_Clock = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_396HZ;
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid SPI clock %d specified",
+                                pDigitalComms->spiClock);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        switch (pDigitalComms->uartLineConfig)
+        {
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8N1:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N1;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8N2:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N2;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8N3:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N3;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8E1:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E1;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8E2:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E2;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8E3:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E3;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8O1:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O1;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8O2:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O2;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_LINE_CONFIG_8O3:
+            digitalSensorComms.Uart_Mode = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O3;
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid UART mode %d specified",
+                                pDigitalComms->uartLineConfig);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        switch (pDigitalComms->uartBaudRate)
+        {
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_115200:
+            digitalSensorComms.Uart_Baud = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_115200;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_57600:
+            digitalSensorComms.Uart_Baud = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_57600;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_38400:
+            digitalSensorComms.Uart_Baud = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_38400;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_19200:
+            digitalSensorComms.Uart_Baud = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_19200;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_9600:
+            digitalSensorComms.Uart_Baud = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_9600;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_4800:
+            digitalSensorComms.Uart_Baud = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_4800;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_2400:
+            digitalSensorComms.Uart_Baud = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_2400;
+            break;
+        case ADI_SENSE_1000_DIGITAL_SENSOR_COMMS_UART_BAUD_RATE_1200:
+            digitalSensorComms.Uart_Baud = ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_1200;
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid UART baud rate %d specified",
+                                pDigitalComms->uartBaudRate);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+    }
+    else
+    {
+        digitalSensorComms.Digital_Sensor_Comms_En = 0;
+    }
+
+    WRITE_REG_U16(hDevice, digitalSensorComms.VALUE16, CORE_DIGITAL_SENSOR_COMMSn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_SetI2cChannelConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
+{
+    ADI_SENSE_RESULT eRet;
+    ADI_SENSE_1000_I2C_CHANNEL_CONFIG *pI2cChannelConfig =
+        &pChannelConfig->i2cChannelConfig;
+
+    eRet = adi_sense_SetChannelI2cSensorType(hDevice, eChannelId,
+                                            pI2cChannelConfig->sensor);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor type for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetChannelI2cSensorAddress(hDevice, eChannelId,
+                                               pI2cChannelConfig->deviceAddress);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor address for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetChannelDigitalSensorDetails(hDevice, eChannelId,
+                                                    pChannelConfig);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor details for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalSensorCommands(hDevice, eChannelId,
+                                              &pI2cChannelConfig->configurationCommand,
+                                              &pI2cChannelConfig->dataRequestCommand);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor commands for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalSensorFormat(hDevice, eChannelId,
+                                            &pI2cChannelConfig->dataFormat);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set I2C sensor data format for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalCalibrationParam(hDevice, eChannelId,
+                                            &pI2cChannelConfig->digitalCalibrationParam);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set I2C digital calibration param for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalChannelComms(hDevice, eChannelId,
+                                            &pI2cChannelConfig->configureComms);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set I2C comms for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelSpiSensorType(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_SPI_SENSOR_TYPE sensorType)
+{
+    ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
+
+    sensorTypeReg.VALUE16 = REG_RESET_VAL(CORE_SENSOR_TYPEn);
+
+    /* Ensure that the sensor type is valid for this channel */
+    switch(sensorType)
+    {
+    case ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_DEF_L1:
+    case ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_DEF_L2:
+    case ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_ADV_L1:
+    case ADI_SENSE_1000_SPI_SENSOR_PRESSURE_A_ADV_L2:
+    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_DEF_L1:
+    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_DEF_L1:
+    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_DEF_L2:
+    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_DEF_L2:
+    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_ADV_L1:
+    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_ADV_L1:
+    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_A_ADV_L2:
+    case ADI_SENSE_1000_SPI_SENSOR_ACCELEROMETER_B_ADV_L2:
+        sensorTypeReg.Sensor_Type = sensorType;
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Unsupported SPI sensor type %d specified", sensorType);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    WRITE_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_SetSpiChannelConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
+{
+    ADI_SENSE_RESULT eRet;
+    ADI_SENSE_1000_SPI_CHANNEL_CONFIG *pSpiChannelConfig =
+        &pChannelConfig->spiChannelConfig;
+
+    eRet = adi_sense_SetChannelSpiSensorType(hDevice, eChannelId,
+                                             pSpiChannelConfig->sensor);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set SPI sensor type for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetChannelDigitalSensorDetails(hDevice, eChannelId,
+                                                    pChannelConfig);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set SPI sensor details for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalSensorCommands(hDevice, eChannelId,
+                                              &pSpiChannelConfig->configurationCommand,
+                                              &pSpiChannelConfig->dataRequestCommand);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set SPI sensor commands for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalSensorFormat(hDevice, eChannelId,
+                                            &pSpiChannelConfig->dataFormat);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set SPI sensor data format for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalCalibrationParam(hDevice, eChannelId,
+                                            &pSpiChannelConfig->digitalCalibrationParam);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set SPI digital calibration param for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalChannelComms(hDevice, eChannelId,
+                                            &pSpiChannelConfig->configureComms);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set SPI comms for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+static ADI_SENSE_RESULT adi_sense_SetChannelUartSensorType(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_UART_SENSOR_TYPE sensorType)
+{
+    ADI_ADISENSE_CORE_Sensor_Type_t sensorTypeReg;
+
+    sensorTypeReg.VALUE16 = REG_RESET_VAL(CORE_SENSOR_TYPEn);
+
+    /* Ensure that the sensor type is valid for this channel */
+    switch(sensorType)
+    {
+    case ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_DEF_L1:
+    case ADI_SENSE_1000_UART_SENSOR_UART_CO2_B_DEF_L1:
+    case ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_DEF_L2:
+    case ADI_SENSE_1000_UART_SENSOR_UART_CO2_B_DEF_L2:
+    case ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_ADV_L1:
+    case ADI_SENSE_1000_UART_SENSOR_UART_CO2_B_ADV_L1:
+    case ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_ADV_L2:
+    case ADI_SENSE_1000_UART_SENSOR_UART_CO2_B_ADV_L2:
+        sensorTypeReg.Sensor_Type = sensorType;
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Unsupported UART sensor type %d specified", sensorType);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    WRITE_REG_U16(hDevice, sensorTypeReg.VALUE16, CORE_SENSOR_TYPEn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_SetUartChannelConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
+{
+    ADI_SENSE_RESULT eRet;
+    ADI_SENSE_1000_UART_CHANNEL_CONFIG *pUartChannelConfig =
+        &pChannelConfig->uartChannelConfig;
+
+    eRet = adi_sense_SetChannelUartSensorType(hDevice, eChannelId,
+                                             pUartChannelConfig->sensor);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set UART sensor type for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetChannelDigitalSensorDetails(hDevice, eChannelId,
+                                                    pChannelConfig);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set UART sensor details for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalCalibrationParam(hDevice, eChannelId,
+                                            &pUartChannelConfig->digitalCalibrationParam);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set UART digital calibration param for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+    eRet = adi_sense_SetDigitalChannelComms(hDevice, eChannelId,
+                                            &pUartChannelConfig->configureComms);
+    if (eRet != ADI_SENSE_SUCCESS)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set UART comms for channel %d",
+                            eChannelId);
+        return eRet;
+    }
+
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetChannelThresholdLimits(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    float32_t fHighThresholdLimit,
+    float32_t fLowThresholdLimit)
+{
+    /*
+     * If the low/high limits are *both* set to 0 in memory, or NaNs, assume
+     * that they are unset, or not required, and use infinity defaults instead
+     */
+    if (fHighThresholdLimit == 0.0f && fLowThresholdLimit == 0.0f)
+    {
+        fHighThresholdLimit = INFINITY;
+        fLowThresholdLimit = -INFINITY;
+    }
+    else
+    {
+        if (isnan(fHighThresholdLimit))
+            fHighThresholdLimit = INFINITY;
+        if (isnan(fLowThresholdLimit))
+            fLowThresholdLimit = -INFINITY;
+    }
+
+    WRITE_REG_FLOAT(hDevice, fHighThresholdLimit,
+                    CORE_HIGH_THRESHOLD_LIMITn(eChannelId));
+    WRITE_REG_FLOAT(hDevice, fLowThresholdLimit,
+                    CORE_LOW_THRESHOLD_LIMITn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetOffsetGain(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    float32_t fOffsetAdjustment,
+    float32_t fGainAdjustment)
+{
+    /* Replace with default values if NaNs are specified (or 0.0 for gain) */
+    if (isnan(fGainAdjustment) || (fGainAdjustment == 0.0f))
+        fGainAdjustment = 1.0f;
+    if (isnan(fOffsetAdjustment))
+        fOffsetAdjustment = 0.0f;
+
+    WRITE_REG_FLOAT(hDevice, fGainAdjustment, CORE_SENSOR_GAINn(eChannelId));
+    WRITE_REG_FLOAT(hDevice, fOffsetAdjustment, CORE_SENSOR_OFFSETn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetSensorParameter(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    float32_t fSensorParam)
+{
+    if (fSensorParam == 0.0)
+        fSensorParam = NAN;
+
+    WRITE_REG_FLOAT(hDevice, fSensorParam, CORE_SENSOR_PARAMETERn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetChannelSettlingTime(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    uint32_t nSettlingTime)
+{
+    ADI_ADISENSE_CORE_Settling_Time_t settlingTimeReg;
+
+    if (nSettlingTime < (1 << 12))
+    {
+        settlingTimeReg.Settling_Time_Units = ADISENSE_CORE_SETTLING_TIME_MICROSECONDS;
+    }
+    else if (nSettlingTime < (1000 * (1 << 12)))
+    {
+        settlingTimeReg.Settling_Time_Units = ADISENSE_CORE_SETTLING_TIME_MILLISECONDS;
+        nSettlingTime /= 1000;
+    }
+    else
+    {
+        settlingTimeReg.Settling_Time_Units = ADISENSE_CORE_SETTLING_TIME_SECONDS;
+        nSettlingTime /= 1000000;
+    }
+
+    CHECK_REG_FIELD_VAL(CORE_SETTLING_TIME_SETTLING_TIME, nSettlingTime);
+    settlingTimeReg.Settling_Time = nSettlingTime;
+
+    WRITE_REG_U16(hDevice, settlingTimeReg.VALUE16, CORE_SETTLING_TIMEn(eChannelId));
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetChannelConfig(
+    ADI_SENSE_DEVICE_HANDLE hDevice,
+    ADI_SENSE_1000_CHANNEL_ID eChannelId,
+    ADI_SENSE_1000_CHANNEL_CONFIG *pChannelConfig)
+{
+    ADI_SENSE_RESULT eRet;
+
+    if (! ADI_SENSE_1000_CHANNEL_IS_VIRTUAL(eChannelId))
+    {
+        /* If the channel is not enabled, disable it and return */
+        if (! pChannelConfig->enableChannel)
+            return adi_sense_1000_SetChannelCount(hDevice, eChannelId, 0);
+
+        eRet = adi_sense_1000_SetChannelCount(hDevice, eChannelId,
+                                              pChannelConfig->measurementsPerCycle);
+        if (eRet != ADI_SENSE_SUCCESS)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set measurement count for channel %d",
+                                eChannelId);
+            return eRet;
+        }
+
+        eRet = adi_sense_1000_SetChannelOptions(hDevice, eChannelId,
+                                                pChannelConfig->priority,
+                                                pChannelConfig->enableFFT);
+        if (eRet != ADI_SENSE_SUCCESS)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set priority for channel %d",
+                                eChannelId);
+            return eRet;
+        }
+
+        eRet = adi_sense_1000_SetChannelSkipCount(hDevice, eChannelId,
+                                                  pChannelConfig->cycleSkipCount);
+        if (eRet != ADI_SENSE_SUCCESS)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set cycle skip count for channel %d",
+                                eChannelId);
+            return eRet;
+        }
+
+        switch (eChannelId)
+        {
+        case ADI_SENSE_1000_CHANNEL_ID_CJC_0:
+        case ADI_SENSE_1000_CHANNEL_ID_CJC_1:
+        case ADI_SENSE_1000_CHANNEL_ID_SENSOR_0:
+        case ADI_SENSE_1000_CHANNEL_ID_SENSOR_1:
+        case ADI_SENSE_1000_CHANNEL_ID_SENSOR_2:
+        case ADI_SENSE_1000_CHANNEL_ID_SENSOR_3:
+        case ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0:
+        case ADI_SENSE_1000_CHANNEL_ID_CURRENT_0:
+            eRet = adi_sense_SetAdcChannelConfig(hDevice, eChannelId, pChannelConfig);
+            break;
+        case ADI_SENSE_1000_CHANNEL_ID_I2C_0:
+        case ADI_SENSE_1000_CHANNEL_ID_I2C_1:
+            eRet = adi_sense_SetI2cChannelConfig(hDevice, eChannelId, pChannelConfig);
+            break;
+        case ADI_SENSE_1000_CHANNEL_ID_SPI_0:
+            eRet = adi_sense_SetSpiChannelConfig(hDevice, eChannelId, pChannelConfig);
+            break;
+        case ADI_SENSE_1000_CHANNEL_ID_UART:
+            eRet = adi_sense_SetUartChannelConfig(hDevice, eChannelId, pChannelConfig);
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid channel ID %d specified", eChannelId);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        eRet = adi_sense_1000_SetChannelSettlingTime(hDevice, eChannelId,
+                                                     pChannelConfig->extraSettlingTime);
+        if (eRet != ADI_SENSE_SUCCESS)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set settling time for channel %d",
+                                eChannelId);
+            return eRet;
+        }
+    }
+
+    if (pChannelConfig->enableChannel)
+    {
+        /* Threshold limits can be configured individually for virtual channels */
+        eRet = adi_sense_1000_SetChannelThresholdLimits(hDevice, eChannelId,
+                                                        pChannelConfig->highThreshold,
+                                                        pChannelConfig->lowThreshold);
+        if (eRet != ADI_SENSE_SUCCESS)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set threshold limits for channel %d",
+                                eChannelId);
+            return eRet;
+        }
+
+        /* Offset and gain can be configured individually for virtual channels */
+        eRet = adi_sense_1000_SetOffsetGain(hDevice, eChannelId,
+                                            pChannelConfig->offsetAdjustment,
+                                            pChannelConfig->gainAdjustment);
+        if (eRet != ADI_SENSE_SUCCESS)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set offset/gain for channel %d",
+                                eChannelId);
+            return eRet;
+        }
+
+        /* Set sensor specific parameter */
+        eRet = adi_sense_1000_SetSensorParameter(hDevice, eChannelId,
+                                                 pChannelConfig->sensorParameter);
+        if (eRet != ADI_SENSE_SUCCESS)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set sensor parameter for channel %d",
+                                eChannelId);
+            return eRet;
+        }
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_SetConfig(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_CONFIG         * const pConfig)
+{
+    ADI_SENSE_1000_CONFIG *pDeviceConfig;
+    ADI_SENSE_PRODUCT_ID productId;
+    ADI_SENSE_RESULT eRet;
+
+    if (pConfig->productId != ADI_SENSE_PRODUCT_ID_ADSNS1000)
+    {
+        ADI_SENSE_LOG_ERROR("Configuration Product ID (0x%X) is not supported (0x%0X)",
+                            pConfig->productId, ADI_SENSE_PRODUCT_ID_ADSNS1000);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    /* Check that the actual Product ID is a match? */
+    eRet = adi_sense_GetProductID(hDevice, &productId);
+    if (eRet)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to read device Product ID register");
+        return eRet;
+    }
+    if (pConfig->productId != productId)
+    {
+        ADI_SENSE_LOG_ERROR("Configuration Product ID (0x%X) does not match device (0x%0X)",
+                            pConfig->productId, productId);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    pDeviceConfig = &pConfig->adisense1000;
+
+    eRet = adi_sense_1000_SetPowerConfig(hDevice, &pDeviceConfig->power);
+    if (eRet)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set power configuration");
+        return eRet;
+    }
+
+    eRet = adi_sense_1000_SetMeasurementConfig(hDevice, &pDeviceConfig->measurement);
+    if (eRet)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set measurement configuration");
+        return eRet;
+    }
+
+    eRet = adi_sense_1000_SetDiagnosticsConfig(hDevice, &pDeviceConfig->diagnostics);
+    if (eRet)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set diagnostics configuration");
+        return eRet;
+    }
+
+    for (ADI_SENSE_1000_CHANNEL_ID id = ADI_SENSE_1000_CHANNEL_ID_CJC_0;
+         id < ADI_SENSE_1000_MAX_CHANNELS;
+         id++)
+    {
+        eRet = adi_sense_1000_SetChannelConfig(hDevice, id,
+                                               &pDeviceConfig->channels[id]);
+        if (eRet)
+        {
+            ADI_SENSE_LOG_ERROR("Failed to set channel %d configuration", id);
+            return eRet;
+        }
+    }
+
+    eRet = adi_sense_1000_SetFftConfig(hDevice, &pDeviceConfig->fft,
+                                       pDeviceConfig->channels);
+    if (eRet)
+    {
+        ADI_SENSE_LOG_ERROR("Failed to set FFT configuration");
+        return eRet;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetLutData(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_1000_LUT       * const pLutData)
+{
+    ADI_SENSE_1000_LUT_HEADER *pLutHeader = &pLutData->header;
+    ADI_SENSE_1000_LUT_TABLE *pLutTable = pLutData->tables;
+    unsigned actualLength = 0;
+
+    if (pLutData->header.signature != ADI_SENSE_LUT_SIGNATURE)
+    {
+        ADI_SENSE_LOG_ERROR("LUT signature incorrect (expected 0x%X, actual 0x%X)",
+                            ADI_SENSE_LUT_SIGNATURE, pLutHeader->signature);
+        return ADI_SENSE_INVALID_SIGNATURE;
+    }
+
+    for (unsigned i = 0; i < pLutHeader->numTables; i++)
+    {
+        ADI_SENSE_1000_LUT_DESCRIPTOR *pDesc = &pLutTable->descriptor;
+        ADI_SENSE_1000_LUT_TABLE_DATA *pData = &pLutTable->data;
+        unsigned short calculatedCrc;
+
+        switch (pDesc->geometry)
+        {
+        case ADI_SENSE_1000_LUT_GEOMETRY_COEFFS:
+                switch (pDesc->equation)
+                {
+                case ADI_SENSE_1000_LUT_EQUATION_POLYN:
+                case ADI_SENSE_1000_LUT_EQUATION_POLYNEXP:
+                case ADI_SENSE_1000_LUT_EQUATION_QUADRATIC:
+                case ADI_SENSE_1000_LUT_EQUATION_STEINHART:
+                case ADI_SENSE_1000_LUT_EQUATION_LOGARITHMIC:
+                case ADI_SENSE_1000_LUT_EQUATION_EXPONENTIAL:
+                case ADI_SENSE_1000_LUT_EQUATION_BIVARIATE_POLYN:
+                break;
+                default:
+                    ADI_SENSE_LOG_ERROR("Invalid equation %u specified for LUT table %u",
+                                        pDesc->equation, i);
+                    return ADI_SENSE_INVALID_PARAM;
+                }
+            break;
+        case ADI_SENSE_1000_LUT_GEOMETRY_NES_1D:
+        case ADI_SENSE_1000_LUT_GEOMETRY_NES_2D:
+        case ADI_SENSE_1000_LUT_GEOMETRY_ES_1D:
+        case ADI_SENSE_1000_LUT_GEOMETRY_ES_2D:
+                if (pDesc->equation != ADI_SENSE_1000_LUT_EQUATION_LUT) {
+                    ADI_SENSE_LOG_ERROR("Invalid equation %u specified for LUT table %u",
+                                        pDesc->equation, i);
+                    return ADI_SENSE_INVALID_PARAM;
+                }
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid geometry %u specified for LUT table %u",
+                                pDesc->geometry, i);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        switch (pDesc->dataType)
+        {
+        case ADI_SENSE_1000_LUT_DATA_TYPE_FLOAT32:
+        case ADI_SENSE_1000_LUT_DATA_TYPE_FLOAT64:
+            break;
+        default:
+            ADI_SENSE_LOG_ERROR("Invalid vector format %u specified for LUT table %u",
+                                pDesc->dataType, i);
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        calculatedCrc = adi_sense_crc16_ccitt(pData, pDesc->length);
+        if (calculatedCrc != pDesc->crc16)
+        {
+            ADI_SENSE_LOG_ERROR("CRC validation failed on LUT table %u (expected 0x%04X, actual 0x%04X)",
+                                i, pDesc->crc16, calculatedCrc);
+            return ADI_SENSE_CRC_ERROR;
+        }
+
+        actualLength += sizeof(*pDesc) + pDesc->length;
+
+        /* Move to the next look-up table */
+        pLutTable = (ADI_SENSE_1000_LUT_TABLE *)((uint8_t *)pLutTable + sizeof(*pDesc) + pDesc->length);
+    }
+
+    if (actualLength != pLutHeader->totalLength)
+    {
+        ADI_SENSE_LOG_ERROR("LUT table length mismatch (expected %u, actual %u)",
+                            pLutHeader->totalLength, actualLength);
+        return ADI_SENSE_WRONG_SIZE;
+    }
+
+    if (sizeof(*pLutHeader) + pLutHeader->totalLength > ADI_SENSE_LUT_MAX_SIZE)
+    {
+        ADI_SENSE_LOG_ERROR("Maximum LUT table length (%u bytes) exceeded",
+                            ADI_SENSE_LUT_MAX_SIZE);
+        return ADI_SENSE_WRONG_SIZE;
+    }
+
+    /* Write the LUT data to the device */
+    unsigned lutSize = sizeof(*pLutHeader) + pLutHeader->totalLength;
+    WRITE_REG_U16(hDevice, 0, CORE_LUT_OFFSET);
+    WRITE_REG_U8_ARRAY(hDevice, (uint8_t *)pLutData, lutSize, CORE_LUT_DATA);
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_SetLutDataRaw(
+    ADI_SENSE_DEVICE_HANDLE    const hDevice,
+    ADI_SENSE_1000_LUT_RAW   * const pLutData)
+{
+    return adi_sense_1000_SetLutData(hDevice,
+                                     (ADI_SENSE_1000_LUT *)pLutData);
+}
+
+static ADI_SENSE_RESULT getLutTableSize(
+    ADI_SENSE_1000_LUT_DESCRIPTOR * const pDesc,
+    ADI_SENSE_1000_LUT_TABLE_DATA * const pData,
+    unsigned *pLength)
+{
+    switch (pDesc->geometry)
+    {
+    case ADI_SENSE_1000_LUT_GEOMETRY_COEFFS:
+        if (pDesc->equation == ADI_SENSE_1000_LUT_EQUATION_BIVARIATE_POLYN)
+            *pLength = ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST_SIZE(pData->coeffList2d);
+        else
+            *pLength = ADI_SENSE_1000_LUT_COEFF_LIST_SIZE(pData->coeffList);
+        break;
+    case ADI_SENSE_1000_LUT_GEOMETRY_NES_1D:
+        *pLength = ADI_SENSE_1000_LUT_1D_NES_SIZE(pData->lut1dNes);
+        break;
+    case ADI_SENSE_1000_LUT_GEOMETRY_NES_2D:
+        *pLength = ADI_SENSE_1000_LUT_2D_NES_SIZE(pData->lut2dNes);
+        break;
+    case ADI_SENSE_1000_LUT_GEOMETRY_ES_1D:
+        *pLength = ADI_SENSE_1000_LUT_1D_ES_SIZE(pData->lut1dEs);
+        break;
+    case ADI_SENSE_1000_LUT_GEOMETRY_ES_2D:
+        *pLength = ADI_SENSE_1000_LUT_2D_ES_SIZE(pData->lut2dEs);
+        break;
+    default:
+        ADI_SENSE_LOG_ERROR("Invalid LUT table geometry %d specified\r\n",
+                            pDesc->geometry);
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
+
+ADI_SENSE_RESULT adi_sense_1000_AssembleLutData(
+    ADI_SENSE_1000_LUT                  * pLutBuffer,
+    unsigned                              nLutBufferSize,
+    unsigned                        const nNumTables,
+    ADI_SENSE_1000_LUT_DESCRIPTOR * const ppDesc[],
+    ADI_SENSE_1000_LUT_TABLE_DATA * const ppData[])
+{
+    ADI_SENSE_1000_LUT_HEADER *pHdr = &pLutBuffer->header;
+    uint8_t *pLutTableData = (uint8_t *)pLutBuffer + sizeof(*pHdr);
+
+    if (sizeof(*pHdr) > nLutBufferSize)
+    {
+        ADI_SENSE_LOG_ERROR("Insufficient LUT buffer size provided");
+        return ADI_SENSE_INVALID_PARAM;
+    }
+
+    /* First initialise the top-level header */
+    pHdr->signature = ADI_SENSE_LUT_SIGNATURE;
+    pHdr->version.major = 1;
+    pHdr->version.minor = 0;
+    pHdr->numTables = 0;
+    pHdr->totalLength = 0;
+
+    /*
+     * Walk through the list of table pointers provided, appending the table
+     * descriptor+data from each one to the provided LUT buffer
+     */
+    for (unsigned i = 0; i < nNumTables; i++)
+    {
+        ADI_SENSE_1000_LUT_DESCRIPTOR * const pDesc = ppDesc[i];
+        ADI_SENSE_1000_LUT_TABLE_DATA * const pData = ppData[i];
+        ADI_SENSE_RESULT res;
+        unsigned dataLength = 0;
+
+        /* Calculate the length of the table data */
+        res = getLutTableSize(pDesc, pData, &dataLength);
+        if (res != ADI_SENSE_SUCCESS)
+            return res;
+
+        /* Fill in the table descriptor length and CRC fields */
+        pDesc->length = dataLength;
+        pDesc->crc16 = adi_sense_crc16_ccitt(pData, dataLength);
+
+        if ((sizeof(*pHdr) + pHdr->totalLength + sizeof(*pDesc) + dataLength) > nLutBufferSize)
+        {
+            ADI_SENSE_LOG_ERROR("Insufficient LUT buffer size provided");
+            return ADI_SENSE_INVALID_PARAM;
+        }
+
+        /* Append the table to the LUT buffer (desc + data) */
+        memcpy(pLutTableData + pHdr->totalLength, pDesc, sizeof(*pDesc));
+        pHdr->totalLength += sizeof(*pDesc);
+        memcpy(pLutTableData + pHdr->totalLength, pData, dataLength);
+        pHdr->totalLength += dataLength;
+
+        pHdr->numTables++;
+    }
+
+    return ADI_SENSE_SUCCESS;
+}
--- a/src/adi_sense_1000/ADISENSE1000_REGISTERS.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/adi_sense_1000/ADISENSE1000_REGISTERS.h	Thu May 17 10:34:45 2018 +0100
@@ -4,7 +4,7 @@
      File         :   ADISENSE1000_REGISTERS.h
      Description  :   Register Definitions
 
-     Date         :   Feb 27, 2018
+     Date         :   May 9, 2018
 
      Copyright (c) 2018 Analog Devices, Inc.  All Rights Reserved.
      This software is proprietary and confidential to Analog Devices, Inc. and
@@ -243,6 +243,9 @@
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_DETAIL_CH10  */
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_DETAIL_CH11  */
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_DETAIL_CH12  */
+#define REG_ADISENSE_CORE_ALERT_DETAIL_CH13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_DETAIL_CH13  */
+#define REG_ADISENSE_CORE_ALERT_DETAIL_CH14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_DETAIL_CH14  */
+#define REG_ADISENSE_CORE_ALERT_DETAIL_CH15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_DETAIL_CH15  */
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH0   0x0000002A            /*  ADISENSE_CORE Detailed Error Information */
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH1   0x0000002C            /*  ADISENSE_CORE Detailed Error Information */
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH2   0x0000002E            /*  ADISENSE_CORE Detailed Error Information */
@@ -256,8 +259,11 @@
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH10  0x0000003E            /*  ADISENSE_CORE Detailed Error Information */
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH11  0x00000040            /*  ADISENSE_CORE Detailed Error Information */
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CH12  0x00000042            /*  ADISENSE_CORE Detailed Error Information */
+#define REG_ADISENSE_CORE_ALERT_DETAIL_CH13  0x00000044            /*  ADISENSE_CORE Detailed Error Information */
+#define REG_ADISENSE_CORE_ALERT_DETAIL_CH14  0x00000046            /*  ADISENSE_CORE Detailed Error Information */
+#define REG_ADISENSE_CORE_ALERT_DETAIL_CH15  0x00000048            /*  ADISENSE_CORE Detailed Error Information */
 #define REG_ADISENSE_CORE_ALERT_DETAIL_CHn(i) (REG_ADISENSE_CORE_ALERT_DETAIL_CH0 + ((i) * 2))
-#define REG_ADISENSE_CORE_ALERT_DETAIL_CHn_COUNT 13
+#define REG_ADISENSE_CORE_ALERT_DETAIL_CHn_COUNT 16
 #define REG_ADISENSE_CORE_ERROR_CODE_RESET   0x00000000            /*      Reset Value for Error_Code  */
 #define REG_ADISENSE_CORE_ERROR_CODE         0x0000004C            /*  ADISENSE_CORE Code Indicating Source of Error */
 #define REG_ADISENSE_CORE_ALERT_CODE_RESET   0x00000000            /*      Reset Value for Alert_Code  */
@@ -269,13 +275,23 @@
 #define REG_ADISENSE_CORE_DIAGNOSTICS_CONTROL_RESET 0x00000000            /*      Reset Value for Diagnostics_Control  */
 #define REG_ADISENSE_CORE_DIAGNOSTICS_CONTROL 0x0000005C            /*  ADISENSE_CORE Diagnostic Control */
 #define REG_ADISENSE_CORE_DATA_FIFO_RESET    0x00000000            /*      Reset Value for Data_FIFO  */
-#define REG_ADISENSE_CORE_DATA_FIFO          0x00000060            /*  ADISENSE_CORE FIFO of Sensor Results */
+#define REG_ADISENSE_CORE_DATA_FIFO          0x00000060            /*  ADISENSE_CORE FIFO Buffer of Sensor Results */
+#define REG_ADISENSE_CORE_FFT_CONFIG_RESET   0x00000000            /*      Reset Value for FFT_Config  */
+#define REG_ADISENSE_CORE_FFT_CONFIG         0x00000068            /*  ADISENSE_CORE FFT Configuration */
+#define REG_ADISENSE_CORE_ADVANCED_SENSOR_ACCESS_RESET 0x00000000            /*      Reset Value for Advanced_Sensor_Access  */
+#define REG_ADISENSE_CORE_ADVANCED_SENSOR_ACCESS 0x0000006E            /*  ADISENSE_CORE Enables Access to Advanced Sensor Configuration */
 #define REG_ADISENSE_CORE_LUT_SELECT_RESET   0x00000000            /*      Reset Value for LUT_Select  */
 #define REG_ADISENSE_CORE_LUT_SELECT         0x00000070            /*  ADISENSE_CORE Read/Write Strobe */
 #define REG_ADISENSE_CORE_LUT_OFFSET_RESET   0x00000000            /*      Reset Value for LUT_Offset  */
 #define REG_ADISENSE_CORE_LUT_OFFSET         0x00000072            /*  ADISENSE_CORE Offset into Selected LUT */
 #define REG_ADISENSE_CORE_LUT_DATA_RESET     0x00000000            /*      Reset Value for LUT_Data  */
 #define REG_ADISENSE_CORE_LUT_DATA           0x00000074            /*  ADISENSE_CORE Data to Read/Write from Addressed LUT Entry */
+#define REG_ADISENSE_CORE_EXT_FLASH_INDEX_RESET 0x00000000            /*      Reset Value for Ext_Flash_Index  */
+#define REG_ADISENSE_CORE_EXT_FLASH_INDEX    0x00000080            /*  ADISENSE_CORE Start Position (Sample No.) for Retrieval of Ext. Flash Data */
+#define REG_ADISENSE_CORE_EXT_FLASH_SAMPLE_COUNT_RESET 0x00000000            /*      Reset Value for Ext_Flash_Sample_Count  */
+#define REG_ADISENSE_CORE_EXT_FLASH_SAMPLE_COUNT 0x00000084            /*  ADISENSE_CORE Indicates How Many Samples Stored in External Flash */
+#define REG_ADISENSE_CORE_EXT_FLASH_DATA_RESET 0x00000000            /*      Reset Value for Ext_Flash_Data  */
+#define REG_ADISENSE_CORE_EXT_FLASH_DATA     0x00000088            /*  ADISENSE_CORE Data Read Back from External Flash */
 #define REG_ADISENSE_CORE_REVISION_RESET     0x00000000            /*      Reset Value for Revision  */
 #define REG_ADISENSE_CORE_REVISION           0x0000008C            /*  ADISENSE_CORE Hardware, Firmware Revision */
 #define REG_ADISENSE_CORE_CHANNEL_COUNTn_RESET 0x00000000            /*      Reset Value for Channel_Count[n]  */
@@ -290,6 +306,11 @@
 #define REG_ADISENSE_CORE_CHANNEL_COUNT8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_COUNT8  */
 #define REG_ADISENSE_CORE_CHANNEL_COUNT9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_COUNT9  */
 #define REG_ADISENSE_CORE_CHANNEL_COUNT10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_COUNT10  */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_COUNT11  */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_COUNT12  */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_COUNT13  */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_COUNT14  */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_COUNT15  */
 #define REG_ADISENSE_CORE_CHANNEL_COUNT0     0x00000090            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
 #define REG_ADISENSE_CORE_CHANNEL_COUNT1     0x000000D0            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
 #define REG_ADISENSE_CORE_CHANNEL_COUNT2     0x00000110            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
@@ -301,8 +322,48 @@
 #define REG_ADISENSE_CORE_CHANNEL_COUNT8     0x00000290            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
 #define REG_ADISENSE_CORE_CHANNEL_COUNT9     0x000002D0            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
 #define REG_ADISENSE_CORE_CHANNEL_COUNT10    0x00000310            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT11    0x00000350            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT12    0x00000390            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT13    0x000003D0            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT14    0x00000410            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
+#define REG_ADISENSE_CORE_CHANNEL_COUNT15    0x00000450            /*  ADISENSE_CORE Number of Channel Occurrences per Measurement Cycle */
 #define REG_ADISENSE_CORE_CHANNEL_COUNTn(i)  (REG_ADISENSE_CORE_CHANNEL_COUNT0 + ((i) * 64))
-#define REG_ADISENSE_CORE_CHANNEL_COUNTn_COUNT 11
+#define REG_ADISENSE_CORE_CHANNEL_COUNTn_COUNT 16
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONSn_RESET 0x00000000            /*      Reset Value for Channel_Options[n]  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS0  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS1  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS2_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS2  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS3_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS3  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS4_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS4  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS5_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS5  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS6_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS6  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS7_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS7  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS8  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS9  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS10  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS11  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS12  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS13  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS14  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_OPTIONS15  */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS0   0x00000091            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS1   0x000000D1            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS2   0x00000111            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS3   0x00000151            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS4   0x00000191            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS5   0x000001D1            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS6   0x00000211            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS7   0x00000251            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS8   0x00000291            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS9   0x000002D1            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS10  0x00000311            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS11  0x00000351            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS12  0x00000391            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS13  0x000003D1            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS14  0x00000411            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONS15  0x00000451            /*  ADISENSE_CORE Position of Channel Within Sequence and Enable for FFT */
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONSn(i) (REG_ADISENSE_CORE_CHANNEL_OPTIONS0 + ((i) * 64))
+#define REG_ADISENSE_CORE_CHANNEL_OPTIONSn_COUNT 16
 #define REG_ADISENSE_CORE_SENSOR_TYPEn_RESET 0x00000000            /*      Reset Value for Sensor_Type[n]  */
 #define REG_ADISENSE_CORE_SENSOR_TYPE0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE0  */
 #define REG_ADISENSE_CORE_SENSOR_TYPE1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE1  */
@@ -315,6 +376,11 @@
 #define REG_ADISENSE_CORE_SENSOR_TYPE8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE8  */
 #define REG_ADISENSE_CORE_SENSOR_TYPE9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE9  */
 #define REG_ADISENSE_CORE_SENSOR_TYPE10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE10  */
+#define REG_ADISENSE_CORE_SENSOR_TYPE11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE11  */
+#define REG_ADISENSE_CORE_SENSOR_TYPE12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE12  */
+#define REG_ADISENSE_CORE_SENSOR_TYPE13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE13  */
+#define REG_ADISENSE_CORE_SENSOR_TYPE14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE14  */
+#define REG_ADISENSE_CORE_SENSOR_TYPE15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_TYPE15  */
 #define REG_ADISENSE_CORE_SENSOR_TYPE0       0x00000092            /*  ADISENSE_CORE Sensor Select */
 #define REG_ADISENSE_CORE_SENSOR_TYPE1       0x000000D2            /*  ADISENSE_CORE Sensor Select */
 #define REG_ADISENSE_CORE_SENSOR_TYPE2       0x00000112            /*  ADISENSE_CORE Sensor Select */
@@ -326,8 +392,13 @@
 #define REG_ADISENSE_CORE_SENSOR_TYPE8       0x00000292            /*  ADISENSE_CORE Sensor Select */
 #define REG_ADISENSE_CORE_SENSOR_TYPE9       0x000002D2            /*  ADISENSE_CORE Sensor Select */
 #define REG_ADISENSE_CORE_SENSOR_TYPE10      0x00000312            /*  ADISENSE_CORE Sensor Select */
+#define REG_ADISENSE_CORE_SENSOR_TYPE11      0x00000352            /*  ADISENSE_CORE Sensor Select */
+#define REG_ADISENSE_CORE_SENSOR_TYPE12      0x00000392            /*  ADISENSE_CORE Sensor Select */
+#define REG_ADISENSE_CORE_SENSOR_TYPE13      0x000003D2            /*  ADISENSE_CORE Sensor Select */
+#define REG_ADISENSE_CORE_SENSOR_TYPE14      0x00000412            /*  ADISENSE_CORE Sensor Select */
+#define REG_ADISENSE_CORE_SENSOR_TYPE15      0x00000452            /*  ADISENSE_CORE Sensor Select */
 #define REG_ADISENSE_CORE_SENSOR_TYPEn(i)    (REG_ADISENSE_CORE_SENSOR_TYPE0 + ((i) * 64))
-#define REG_ADISENSE_CORE_SENSOR_TYPEn_COUNT 11
+#define REG_ADISENSE_CORE_SENSOR_TYPEn_COUNT 16
 #define REG_ADISENSE_CORE_SENSOR_DETAILSn_RESET 0x0000FFF0            /*      Reset Value for Sensor_Details[n]  */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS0_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS0  */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS1_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS1  */
@@ -340,6 +411,11 @@
 #define REG_ADISENSE_CORE_SENSOR_DETAILS8_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS8  */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS9_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS9  */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS10_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS10  */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS11_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS11  */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS12_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS12  */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS13_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS13  */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS14_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS14  */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS15_RESET 0x0000FFF0            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_DETAILS15  */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS0    0x00000094            /*  ADISENSE_CORE Sensor Details */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS1    0x000000D4            /*  ADISENSE_CORE Sensor Details */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS2    0x00000114            /*  ADISENSE_CORE Sensor Details */
@@ -351,8 +427,13 @@
 #define REG_ADISENSE_CORE_SENSOR_DETAILS8    0x00000294            /*  ADISENSE_CORE Sensor Details */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS9    0x000002D4            /*  ADISENSE_CORE Sensor Details */
 #define REG_ADISENSE_CORE_SENSOR_DETAILS10   0x00000314            /*  ADISENSE_CORE Sensor Details */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS11   0x00000354            /*  ADISENSE_CORE Sensor Details */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS12   0x00000394            /*  ADISENSE_CORE Sensor Details */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS13   0x000003D4            /*  ADISENSE_CORE Sensor Details */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS14   0x00000414            /*  ADISENSE_CORE Sensor Details */
+#define REG_ADISENSE_CORE_SENSOR_DETAILS15   0x00000454            /*  ADISENSE_CORE Sensor Details */
 #define REG_ADISENSE_CORE_SENSOR_DETAILSn(i) (REG_ADISENSE_CORE_SENSOR_DETAILS0 + ((i) * 64))
-#define REG_ADISENSE_CORE_SENSOR_DETAILSn_COUNT 11
+#define REG_ADISENSE_CORE_SENSOR_DETAILSn_COUNT 16
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATIONn_RESET 0x00000000            /*      Reset Value for Channel_Excitation[n]  */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION0  */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION1  */
@@ -365,6 +446,11 @@
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION8  */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION9  */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION10  */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION11  */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION12  */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION13  */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION14  */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_EXCITATION15  */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION0 0x00000098            /*  ADISENSE_CORE Excitation Current */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION1 0x000000D8            /*  ADISENSE_CORE Excitation Current */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION2 0x00000118            /*  ADISENSE_CORE Excitation Current */
@@ -376,8 +462,13 @@
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION8 0x00000298            /*  ADISENSE_CORE Excitation Current */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION9 0x000002D8            /*  ADISENSE_CORE Excitation Current */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATION10 0x00000318            /*  ADISENSE_CORE Excitation Current */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION11 0x00000358            /*  ADISENSE_CORE Excitation Current */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION12 0x00000398            /*  ADISENSE_CORE Excitation Current */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION13 0x000003D8            /*  ADISENSE_CORE Excitation Current */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION14 0x00000418            /*  ADISENSE_CORE Excitation Current */
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATION15 0x00000458            /*  ADISENSE_CORE Excitation Current */
 #define REG_ADISENSE_CORE_CHANNEL_EXCITATIONn(i) (REG_ADISENSE_CORE_CHANNEL_EXCITATION0 + ((i) * 64))
-#define REG_ADISENSE_CORE_CHANNEL_EXCITATIONn_COUNT 11
+#define REG_ADISENSE_CORE_CHANNEL_EXCITATIONn_COUNT 16
 #define REG_ADISENSE_CORE_SETTLING_TIMEn_RESET 0x00000000            /*      Reset Value for Settling_Time[n]  */
 #define REG_ADISENSE_CORE_SETTLING_TIME0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME0  */
 #define REG_ADISENSE_CORE_SETTLING_TIME1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME1  */
@@ -390,6 +481,11 @@
 #define REG_ADISENSE_CORE_SETTLING_TIME8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME8  */
 #define REG_ADISENSE_CORE_SETTLING_TIME9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME9  */
 #define REG_ADISENSE_CORE_SETTLING_TIME10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME10  */
+#define REG_ADISENSE_CORE_SETTLING_TIME11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME11  */
+#define REG_ADISENSE_CORE_SETTLING_TIME12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME12  */
+#define REG_ADISENSE_CORE_SETTLING_TIME13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME13  */
+#define REG_ADISENSE_CORE_SETTLING_TIME14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME14  */
+#define REG_ADISENSE_CORE_SETTLING_TIME15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SETTLING_TIME15  */
 #define REG_ADISENSE_CORE_SETTLING_TIME0     0x0000009A            /*  ADISENSE_CORE Settling Time */
 #define REG_ADISENSE_CORE_SETTLING_TIME1     0x000000DA            /*  ADISENSE_CORE Settling Time */
 #define REG_ADISENSE_CORE_SETTLING_TIME2     0x0000011A            /*  ADISENSE_CORE Settling Time */
@@ -401,8 +497,13 @@
 #define REG_ADISENSE_CORE_SETTLING_TIME8     0x0000029A            /*  ADISENSE_CORE Settling Time */
 #define REG_ADISENSE_CORE_SETTLING_TIME9     0x000002DA            /*  ADISENSE_CORE Settling Time */
 #define REG_ADISENSE_CORE_SETTLING_TIME10    0x0000031A            /*  ADISENSE_CORE Settling Time */
+#define REG_ADISENSE_CORE_SETTLING_TIME11    0x0000035A            /*  ADISENSE_CORE Settling Time */
+#define REG_ADISENSE_CORE_SETTLING_TIME12    0x0000039A            /*  ADISENSE_CORE Settling Time */
+#define REG_ADISENSE_CORE_SETTLING_TIME13    0x000003DA            /*  ADISENSE_CORE Settling Time */
+#define REG_ADISENSE_CORE_SETTLING_TIME14    0x0000041A            /*  ADISENSE_CORE Settling Time */
+#define REG_ADISENSE_CORE_SETTLING_TIME15    0x0000045A            /*  ADISENSE_CORE Settling Time */
 #define REG_ADISENSE_CORE_SETTLING_TIMEn(i)  (REG_ADISENSE_CORE_SETTLING_TIME0 + ((i) * 64))
-#define REG_ADISENSE_CORE_SETTLING_TIMEn_COUNT 11
+#define REG_ADISENSE_CORE_SETTLING_TIMEn_COUNT 16
 #define REG_ADISENSE_CORE_FILTER_SELECTn_RESET 0x00000000            /*      Reset Value for Filter_Select[n]  */
 #define REG_ADISENSE_CORE_FILTER_SELECT0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT0  */
 #define REG_ADISENSE_CORE_FILTER_SELECT1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT1  */
@@ -415,6 +516,11 @@
 #define REG_ADISENSE_CORE_FILTER_SELECT8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT8  */
 #define REG_ADISENSE_CORE_FILTER_SELECT9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT9  */
 #define REG_ADISENSE_CORE_FILTER_SELECT10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT10  */
+#define REG_ADISENSE_CORE_FILTER_SELECT11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT11  */
+#define REG_ADISENSE_CORE_FILTER_SELECT12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT12  */
+#define REG_ADISENSE_CORE_FILTER_SELECT13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT13  */
+#define REG_ADISENSE_CORE_FILTER_SELECT14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT14  */
+#define REG_ADISENSE_CORE_FILTER_SELECT15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_FILTER_SELECT15  */
 #define REG_ADISENSE_CORE_FILTER_SELECT0     0x0000009C            /*  ADISENSE_CORE ADC Digital Filter Selection */
 #define REG_ADISENSE_CORE_FILTER_SELECT1     0x000000DC            /*  ADISENSE_CORE ADC Digital Filter Selection */
 #define REG_ADISENSE_CORE_FILTER_SELECT2     0x0000011C            /*  ADISENSE_CORE ADC Digital Filter Selection */
@@ -426,8 +532,13 @@
 #define REG_ADISENSE_CORE_FILTER_SELECT8     0x0000029C            /*  ADISENSE_CORE ADC Digital Filter Selection */
 #define REG_ADISENSE_CORE_FILTER_SELECT9     0x000002DC            /*  ADISENSE_CORE ADC Digital Filter Selection */
 #define REG_ADISENSE_CORE_FILTER_SELECT10    0x0000031C            /*  ADISENSE_CORE ADC Digital Filter Selection */
+#define REG_ADISENSE_CORE_FILTER_SELECT11    0x0000035C            /*  ADISENSE_CORE ADC Digital Filter Selection */
+#define REG_ADISENSE_CORE_FILTER_SELECT12    0x0000039C            /*  ADISENSE_CORE ADC Digital Filter Selection */
+#define REG_ADISENSE_CORE_FILTER_SELECT13    0x000003DC            /*  ADISENSE_CORE ADC Digital Filter Selection */
+#define REG_ADISENSE_CORE_FILTER_SELECT14    0x0000041C            /*  ADISENSE_CORE ADC Digital Filter Selection */
+#define REG_ADISENSE_CORE_FILTER_SELECT15    0x0000045C            /*  ADISENSE_CORE ADC Digital Filter Selection */
 #define REG_ADISENSE_CORE_FILTER_SELECTn(i)  (REG_ADISENSE_CORE_FILTER_SELECT0 + ((i) * 64))
-#define REG_ADISENSE_CORE_FILTER_SELECTn_COUNT 11
+#define REG_ADISENSE_CORE_FILTER_SELECTn_COUNT 16
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMITn_RESET 0x7F800000            /*      Reset Value for High_Threshold_Limit[n]  */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT0_RESET 0x7F800000            /*      Reset Value for REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT0  */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT1_RESET 0x7F800000            /*      Reset Value for REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT1  */
@@ -442,6 +553,9 @@
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT10_RESET 0x7F800000            /*      Reset Value for REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT10  */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT11_RESET 0x7F800000            /*      Reset Value for REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT11  */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT12_RESET 0x7F800000            /*      Reset Value for REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT12  */
+#define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT13_RESET 0x7F800000            /*      Reset Value for REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT13  */
+#define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT14_RESET 0x7F800000            /*      Reset Value for REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT14  */
+#define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT15_RESET 0x7F800000            /*      Reset Value for REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT15  */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT0 0x000000A0            /*  ADISENSE_CORE High Threshold */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT1 0x000000E0            /*  ADISENSE_CORE High Threshold */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT2 0x00000120            /*  ADISENSE_CORE High Threshold */
@@ -455,8 +569,11 @@
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT10 0x00000320            /*  ADISENSE_CORE High Threshold */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT11 0x00000360            /*  ADISENSE_CORE High Threshold */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT12 0x000003A0            /*  ADISENSE_CORE High Threshold */
+#define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT13 0x000003E0            /*  ADISENSE_CORE High Threshold */
+#define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT14 0x00000420            /*  ADISENSE_CORE High Threshold */
+#define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT15 0x00000460            /*  ADISENSE_CORE High Threshold */
 #define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMITn(i) (REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMIT0 + ((i) * 64))
-#define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMITn_COUNT 13
+#define REG_ADISENSE_CORE_HIGH_THRESHOLD_LIMITn_COUNT 16
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMITn_RESET 0xFF800000            /*      Reset Value for Low_Threshold_Limit[n]  */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT0_RESET 0xFF800000            /*      Reset Value for REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT0  */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT1_RESET 0xFF800000            /*      Reset Value for REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT1  */
@@ -471,6 +588,9 @@
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT10_RESET 0xFF800000            /*      Reset Value for REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT10  */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT11_RESET 0xFF800000            /*      Reset Value for REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT11  */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT12_RESET 0xFF800000            /*      Reset Value for REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT12  */
+#define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT13_RESET 0xFF800000            /*      Reset Value for REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT13  */
+#define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT14_RESET 0xFF800000            /*      Reset Value for REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT14  */
+#define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT15_RESET 0xFF800000            /*      Reset Value for REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT15  */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT0 0x000000A4            /*  ADISENSE_CORE Low Threshold */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT1 0x000000E4            /*  ADISENSE_CORE Low Threshold */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT2 0x00000124            /*  ADISENSE_CORE Low Threshold */
@@ -484,8 +604,11 @@
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT10 0x00000324            /*  ADISENSE_CORE Low Threshold */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT11 0x00000364            /*  ADISENSE_CORE Low Threshold */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT12 0x000003A4            /*  ADISENSE_CORE Low Threshold */
+#define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT13 0x000003E4            /*  ADISENSE_CORE Low Threshold */
+#define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT14 0x00000424            /*  ADISENSE_CORE Low Threshold */
+#define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT15 0x00000464            /*  ADISENSE_CORE Low Threshold */
 #define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMITn(i) (REG_ADISENSE_CORE_LOW_THRESHOLD_LIMIT0 + ((i) * 64))
-#define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMITn_COUNT 13
+#define REG_ADISENSE_CORE_LOW_THRESHOLD_LIMITn_COUNT 16
 #define REG_ADISENSE_CORE_SENSOR_OFFSETn_RESET 0x00000000            /*      Reset Value for Sensor_Offset[n]  */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_OFFSET0  */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_OFFSET1  */
@@ -500,6 +623,9 @@
 #define REG_ADISENSE_CORE_SENSOR_OFFSET10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_OFFSET10  */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_OFFSET11  */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_OFFSET12  */
+#define REG_ADISENSE_CORE_SENSOR_OFFSET13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_OFFSET13  */
+#define REG_ADISENSE_CORE_SENSOR_OFFSET14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_OFFSET14  */
+#define REG_ADISENSE_CORE_SENSOR_OFFSET15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_OFFSET15  */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET0     0x000000A8            /*  ADISENSE_CORE Sensor Offset Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET1     0x000000E8            /*  ADISENSE_CORE Sensor Offset Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET2     0x00000128            /*  ADISENSE_CORE Sensor Offset Adjustment */
@@ -513,8 +639,11 @@
 #define REG_ADISENSE_CORE_SENSOR_OFFSET10    0x00000328            /*  ADISENSE_CORE Sensor Offset Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET11    0x00000368            /*  ADISENSE_CORE Sensor Offset Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_OFFSET12    0x000003A8            /*  ADISENSE_CORE Sensor Offset Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_OFFSET13    0x000003E8            /*  ADISENSE_CORE Sensor Offset Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_OFFSET14    0x00000428            /*  ADISENSE_CORE Sensor Offset Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_OFFSET15    0x00000468            /*  ADISENSE_CORE Sensor Offset Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_OFFSETn(i)  (REG_ADISENSE_CORE_SENSOR_OFFSET0 + ((i) * 64))
-#define REG_ADISENSE_CORE_SENSOR_OFFSETn_COUNT 13
+#define REG_ADISENSE_CORE_SENSOR_OFFSETn_COUNT 16
 #define REG_ADISENSE_CORE_SENSOR_GAINn_RESET 0x3F800000            /*      Reset Value for Sensor_Gain[n]  */
 #define REG_ADISENSE_CORE_SENSOR_GAIN0_RESET 0x3F800000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_GAIN0  */
 #define REG_ADISENSE_CORE_SENSOR_GAIN1_RESET 0x3F800000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_GAIN1  */
@@ -529,6 +658,9 @@
 #define REG_ADISENSE_CORE_SENSOR_GAIN10_RESET 0x3F800000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_GAIN10  */
 #define REG_ADISENSE_CORE_SENSOR_GAIN11_RESET 0x3F800000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_GAIN11  */
 #define REG_ADISENSE_CORE_SENSOR_GAIN12_RESET 0x3F800000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_GAIN12  */
+#define REG_ADISENSE_CORE_SENSOR_GAIN13_RESET 0x3F800000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_GAIN13  */
+#define REG_ADISENSE_CORE_SENSOR_GAIN14_RESET 0x3F800000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_GAIN14  */
+#define REG_ADISENSE_CORE_SENSOR_GAIN15_RESET 0x3F800000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_GAIN15  */
 #define REG_ADISENSE_CORE_SENSOR_GAIN0       0x000000AC            /*  ADISENSE_CORE Sensor Gain Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_GAIN1       0x000000EC            /*  ADISENSE_CORE Sensor Gain Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_GAIN2       0x0000012C            /*  ADISENSE_CORE Sensor Gain Adjustment */
@@ -542,8 +674,11 @@
 #define REG_ADISENSE_CORE_SENSOR_GAIN10      0x0000032C            /*  ADISENSE_CORE Sensor Gain Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_GAIN11      0x0000036C            /*  ADISENSE_CORE Sensor Gain Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_GAIN12      0x000003AC            /*  ADISENSE_CORE Sensor Gain Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_GAIN13      0x000003EC            /*  ADISENSE_CORE Sensor Gain Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_GAIN14      0x0000042C            /*  ADISENSE_CORE Sensor Gain Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_GAIN15      0x0000046C            /*  ADISENSE_CORE Sensor Gain Adjustment */
 #define REG_ADISENSE_CORE_SENSOR_GAINn(i)    (REG_ADISENSE_CORE_SENSOR_GAIN0 + ((i) * 64))
-#define REG_ADISENSE_CORE_SENSOR_GAINn_COUNT 13
+#define REG_ADISENSE_CORE_SENSOR_GAINn_COUNT 16
 #define REG_ADISENSE_CORE_ALERT_CODE_CHn_RESET 0x00000000            /*      Reset Value for Alert_Code_Ch[n]  */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_CODE_CH0  */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_CODE_CH1  */
@@ -558,6 +693,9 @@
 #define REG_ADISENSE_CORE_ALERT_CODE_CH10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_CODE_CH10  */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_CODE_CH11  */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_CODE_CH12  */
+#define REG_ADISENSE_CORE_ALERT_CODE_CH13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_CODE_CH13  */
+#define REG_ADISENSE_CORE_ALERT_CODE_CH14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_CODE_CH14  */
+#define REG_ADISENSE_CORE_ALERT_CODE_CH15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_ALERT_CODE_CH15  */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH0     0x000000B0            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH1     0x000000F0            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH2     0x00000130            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
@@ -571,8 +709,116 @@
 #define REG_ADISENSE_CORE_ALERT_CODE_CH10    0x00000330            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH11    0x00000370            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
 #define REG_ADISENSE_CORE_ALERT_CODE_CH12    0x000003B0            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
+#define REG_ADISENSE_CORE_ALERT_CODE_CH13    0x000003F0            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
+#define REG_ADISENSE_CORE_ALERT_CODE_CH14    0x00000430            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
+#define REG_ADISENSE_CORE_ALERT_CODE_CH15    0x00000470            /*  ADISENSE_CORE Per-Channel Detailed Alert-Code Information */
 #define REG_ADISENSE_CORE_ALERT_CODE_CHn(i)  (REG_ADISENSE_CORE_ALERT_CODE_CH0 + ((i) * 64))
-#define REG_ADISENSE_CORE_ALERT_CODE_CHn_COUNT 13
+#define REG_ADISENSE_CORE_ALERT_CODE_CHn_COUNT 16
+#define REG_ADISENSE_CORE_CHANNEL_SKIPn_RESET 0x00000000            /*      Reset Value for Channel_Skip[n]  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP0  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP1  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP2_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP2  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP3_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP3  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP4_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP4  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP5_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP5  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP6_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP6  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP7_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP7  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP8  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP9  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP10  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP11  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP12  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP13  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP14  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CHANNEL_SKIP15  */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP0      0x000000B2            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP1      0x000000F2            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP2      0x00000132            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP3      0x00000172            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP4      0x000001B2            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP5      0x000001F2            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP6      0x00000232            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP7      0x00000272            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP8      0x000002B2            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP9      0x000002F2            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP10     0x00000332            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP11     0x00000372            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP12     0x000003B2            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP13     0x000003F2            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP14     0x00000432            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIP15     0x00000472            /*  ADISENSE_CORE Indicates If Channel Will Skip Some Measurement Cycles */
+#define REG_ADISENSE_CORE_CHANNEL_SKIPn(i)   (REG_ADISENSE_CORE_CHANNEL_SKIP0 + ((i) * 64))
+#define REG_ADISENSE_CORE_CHANNEL_SKIPn_COUNT 16
+#define REG_ADISENSE_CORE_SENSOR_PARAMETERn_RESET 0x7FC00000            /*      Reset Value for Sensor_Parameter[n]  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER0_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER0  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER1_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER1  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER2_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER2  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER3_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER3  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER4_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER4  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER5_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER5  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER6_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER6  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER7_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER7  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER8_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER8  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER9_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER9  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER10_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER10  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER11_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER11  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER12_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER12  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER13_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER13  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER14_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER14  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER15_RESET 0x7FC00000            /*      Reset Value for REG_ADISENSE_CORE_SENSOR_PARAMETER15  */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER0  0x000000B4            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER1  0x000000F4            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER2  0x00000134            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER3  0x00000174            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER4  0x000001B4            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER5  0x000001F4            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER6  0x00000234            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER7  0x00000274            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER8  0x000002B4            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER9  0x000002F4            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER10 0x00000334            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER11 0x00000374            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER12 0x000003B4            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER13 0x000003F4            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER14 0x00000434            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETER15 0x00000474            /*  ADISENSE_CORE Sensor Parameter Adjustment */
+#define REG_ADISENSE_CORE_SENSOR_PARAMETERn(i) (REG_ADISENSE_CORE_SENSOR_PARAMETER0 + ((i) * 64))
+#define REG_ADISENSE_CORE_SENSOR_PARAMETERn_COUNT 16
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETERn_RESET 0x00000000            /*      Reset Value for Calibration_Parameter[n]  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER0  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER1  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER2_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER2  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER3_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER3  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER4_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER4  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER5_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER5  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER6_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER6  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER7_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER7  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER8  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER9  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER10  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER11  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER12  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER13  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER14  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_CALIBRATION_PARAMETER15  */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER0 0x000000B8            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER1 0x000000F8            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER2 0x00000138            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER3 0x00000178            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER4 0x000001B8            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER5 0x000001F8            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER6 0x00000238            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER7 0x00000278            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER8 0x000002B8            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER9 0x000002F8            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER10 0x00000338            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER11 0x00000378            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER12 0x000003B8            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER13 0x000003F8            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER14 0x00000438            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETER15 0x00000478            /*  ADISENSE_CORE Calibration Parameter Value */
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETERn(i) (REG_ADISENSE_CORE_CALIBRATION_PARAMETER0 + ((i) * 64))
+#define REG_ADISENSE_CORE_CALIBRATION_PARAMETERn_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIGn_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Config[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG0  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG1  */
@@ -585,19 +831,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG8  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG9  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG10  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG0 0x000000B8            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG1 0x000000F8            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG2 0x00000138            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG3 0x00000178            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG4 0x000001B8            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG5 0x000001F8            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG6 0x00000238            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG7 0x00000278            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG8 0x000002B8            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG9 0x000002F8            /*  ADISENSE_CORE Digital Sensor Data Coding */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG10 0x00000338            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG11  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG12  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG13  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG14  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG15  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG0 0x000000BC            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG1 0x000000FC            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG2 0x0000013C            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG3 0x0000017C            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG4 0x000001BC            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG5 0x000001FC            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG6 0x0000023C            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG7 0x0000027C            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG8 0x000002BC            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG9 0x000002FC            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG10 0x0000033C            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG11 0x0000037C            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG12 0x000003BC            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG13 0x000003FC            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG14 0x0000043C            /*  ADISENSE_CORE Digital Sensor Data Coding */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG15 0x0000047C            /*  ADISENSE_CORE Digital Sensor Data Coding */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIGn(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG0 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIGn_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_CONFIGn_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESSn_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Address[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS0  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS1  */
@@ -610,19 +866,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS8  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS9  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS10  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS0 0x000000BA            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS1 0x000000FA            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS2 0x0000013A            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS3 0x0000017A            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS4 0x000001BA            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS5 0x000001FA            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS6 0x0000023A            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS7 0x0000027A            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS8 0x000002BA            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS9 0x000002FA            /*  ADISENSE_CORE Sensor Address */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS10 0x0000033A            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS11  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS12  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS13  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS14  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS15  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS0 0x000000BE            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS1 0x000000FE            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS2 0x0000013E            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS3 0x0000017E            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS4 0x000001BE            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS5 0x000001FE            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS6 0x0000023E            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS7 0x0000027E            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS8 0x000002BE            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS9 0x000002FE            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS10 0x0000033E            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS11 0x0000037E            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS12 0x000003BE            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS13 0x000003FE            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS14 0x0000043E            /*  ADISENSE_CORE Sensor Address */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS15 0x0000047E            /*  ADISENSE_CORE Sensor Address */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESSn(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESS0 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESSn_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_ADDRESSn_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDSn_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Num_Cmds[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS0_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS0  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS1_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS1  */
@@ -635,19 +901,64 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS8_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS8  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS9_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS9  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS10  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS0 0x000000BB            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS1 0x000000FB            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS2 0x0000013B            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS3 0x0000017B            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS4 0x000001BB            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS5 0x000001FB            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS6 0x0000023B            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS7 0x0000027B            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS8 0x000002BB            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS9 0x000002FB            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS10 0x0000033B            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS11  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS12_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS12  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS13_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS13  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS14_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS14  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS15_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS15  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS0 0x000000BF            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS1 0x000000FF            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS2 0x0000013F            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS3 0x0000017F            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS4 0x000001BF            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS5 0x000001FF            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS6 0x0000023F            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS7 0x0000027F            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS8 0x000002BF            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS9 0x000002FF            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS10 0x0000033F            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS11 0x0000037F            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS12 0x000003BF            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS13 0x000003FF            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS14 0x0000043F            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS15 0x0000047F            /*  ADISENSE_CORE Number of Configuration, Read Commands for Digital Sensors */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDSn(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS0 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDSn_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDSn_COUNT 16
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMSn_RESET 0x00000006            /*      Reset Value for Digital_Sensor_Comms[n]  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS0_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS0  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS1_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS1  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS2_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS2  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS3_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS3  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS4_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS4  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS5_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS5  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS6_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS6  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS7_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS7  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS8_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS8  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS9_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS9  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS10_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS10  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS11_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS11  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS12_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS12  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS13_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS13  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS14_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS14  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS15_RESET 0x00000006            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS15  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS0 0x000000C0            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS1 0x00000100            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS2 0x00000140            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS3 0x00000180            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS4 0x000001C0            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS5 0x00000200            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS6 0x00000240            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS7 0x00000280            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS8 0x000002C0            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS9 0x00000300            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS10 0x00000340            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS11 0x00000380            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS12 0x000003C0            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS13 0x00000400            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS14 0x00000440            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS15 0x00000480            /*  ADISENSE_CORE Digital Sensor Communication Clock Configuration */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMSn(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMS0 + ((i) * 64))
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMSn_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND1n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Command1[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND10  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND11  */
@@ -660,19 +971,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND18_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND18  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND19_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND19  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND110_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND110  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND10 0x000000C0            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND11 0x00000100            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND12 0x00000140            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND13 0x00000180            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND14 0x000001C0            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND15 0x00000200            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND16 0x00000240            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND17 0x00000280            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND18 0x000002C0            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND19 0x00000300            /*  ADISENSE_CORE Sensor Configuration Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND110 0x00000340            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND111_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND111  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND112_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND112  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND113_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND113  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND114_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND114  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND115_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND115  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND10 0x000000C2            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND11 0x00000102            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND12 0x00000142            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND13 0x00000182            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND14 0x000001C2            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND15 0x00000202            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND16 0x00000242            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND17 0x00000282            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND18 0x000002C2            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND19 0x00000302            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND110 0x00000342            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND111 0x00000382            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND112 0x000003C2            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND113 0x00000402            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND114 0x00000442            /*  ADISENSE_CORE Sensor Configuration Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND115 0x00000482            /*  ADISENSE_CORE Sensor Configuration Command1 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND1n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND10 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND1n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND1n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND2n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Command2[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND20_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND20  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND21_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND21  */
@@ -685,19 +1006,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND28_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND28  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND29_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND29  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND210_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND210  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND20 0x000000C1            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND21 0x00000101            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND22 0x00000141            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND23 0x00000181            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND24 0x000001C1            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND25 0x00000201            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND26 0x00000241            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND27 0x00000281            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND28 0x000002C1            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND29 0x00000301            /*  ADISENSE_CORE Sensor Configuration Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND210 0x00000341            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND211_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND211  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND212_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND212  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND213_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND213  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND214_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND214  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND215_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND215  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND20 0x000000C3            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND21 0x00000103            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND22 0x00000143            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND23 0x00000183            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND24 0x000001C3            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND25 0x00000203            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND26 0x00000243            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND27 0x00000283            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND28 0x000002C3            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND29 0x00000303            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND210 0x00000343            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND211 0x00000383            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND212 0x000003C3            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND213 0x00000403            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND214 0x00000443            /*  ADISENSE_CORE Sensor Configuration Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND215 0x00000483            /*  ADISENSE_CORE Sensor Configuration Command2 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND2n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND20 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND2n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND2n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND3n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Command3[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND30_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND30  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND31_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND31  */
@@ -710,19 +1041,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND38_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND38  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND39_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND39  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND310_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND310  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND30 0x000000C2            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND31 0x00000102            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND32 0x00000142            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND33 0x00000182            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND34 0x000001C2            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND35 0x00000202            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND36 0x00000242            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND37 0x00000282            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND38 0x000002C2            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND39 0x00000302            /*  ADISENSE_CORE Sensor Configuration Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND310 0x00000342            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND311_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND311  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND312_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND312  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND313_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND313  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND314_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND314  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND315_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND315  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND30 0x000000C4            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND31 0x00000104            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND32 0x00000144            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND33 0x00000184            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND34 0x000001C4            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND35 0x00000204            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND36 0x00000244            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND37 0x00000284            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND38 0x000002C4            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND39 0x00000304            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND310 0x00000344            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND311 0x00000384            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND312 0x000003C4            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND313 0x00000404            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND314 0x00000444            /*  ADISENSE_CORE Sensor Configuration Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND315 0x00000484            /*  ADISENSE_CORE Sensor Configuration Command3 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND3n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND30 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND3n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND3n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND4n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Command4[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND40_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND40  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND41_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND41  */
@@ -735,19 +1076,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND48_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND48  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND49_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND49  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND410_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND410  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND40 0x000000C3            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND41 0x00000103            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND42 0x00000143            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND43 0x00000183            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND44 0x000001C3            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND45 0x00000203            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND46 0x00000243            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND47 0x00000283            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND48 0x000002C3            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND49 0x00000303            /*  ADISENSE_CORE Sensor Configuration Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND410 0x00000343            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND411_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND411  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND412_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND412  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND413_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND413  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND414_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND414  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND415_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND415  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND40 0x000000C5            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND41 0x00000105            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND42 0x00000145            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND43 0x00000185            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND44 0x000001C5            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND45 0x00000205            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND46 0x00000245            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND47 0x00000285            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND48 0x000002C5            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND49 0x00000305            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND410 0x00000345            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND411 0x00000385            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND412 0x000003C5            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND413 0x00000405            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND414 0x00000445            /*  ADISENSE_CORE Sensor Configuration Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND415 0x00000485            /*  ADISENSE_CORE Sensor Configuration Command4 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND4n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND40 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND4n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND4n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND5n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Command5[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND50_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND50  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND51_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND51  */
@@ -760,19 +1111,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND58_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND58  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND59_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND59  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND510_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND510  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND50 0x000000C4            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND51 0x00000104            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND52 0x00000144            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND53 0x00000184            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND54 0x000001C4            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND55 0x00000204            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND56 0x00000244            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND57 0x00000284            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND58 0x000002C4            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND59 0x00000304            /*  ADISENSE_CORE Sensor Configuration Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND510 0x00000344            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND511_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND511  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND512_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND512  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND513_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND513  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND514_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND514  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND515_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND515  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND50 0x000000C6            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND51 0x00000106            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND52 0x00000146            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND53 0x00000186            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND54 0x000001C6            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND55 0x00000206            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND56 0x00000246            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND57 0x00000286            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND58 0x000002C6            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND59 0x00000306            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND510 0x00000346            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND511 0x00000386            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND512 0x000003C6            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND513 0x00000406            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND514 0x00000446            /*  ADISENSE_CORE Sensor Configuration Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND515 0x00000486            /*  ADISENSE_CORE Sensor Configuration Command5 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND5n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND50 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND5n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND5n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND6n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Command6[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND60_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND60  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND61_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND61  */
@@ -785,19 +1146,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND68_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND68  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND69_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND69  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND610_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND610  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND60 0x000000C5            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND61 0x00000105            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND62 0x00000145            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND63 0x00000185            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND64 0x000001C5            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND65 0x00000205            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND66 0x00000245            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND67 0x00000285            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND68 0x000002C5            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND69 0x00000305            /*  ADISENSE_CORE Sensor Configuration Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND610 0x00000345            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND611_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND611  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND612_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND612  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND613_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND613  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND614_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND614  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND615_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND615  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND60 0x000000C7            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND61 0x00000107            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND62 0x00000147            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND63 0x00000187            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND64 0x000001C7            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND65 0x00000207            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND66 0x00000247            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND67 0x00000287            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND68 0x000002C7            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND69 0x00000307            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND610 0x00000347            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND611 0x00000387            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND612 0x000003C7            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND613 0x00000407            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND614 0x00000447            /*  ADISENSE_CORE Sensor Configuration Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND615 0x00000487            /*  ADISENSE_CORE Sensor Configuration Command6 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND6n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND60 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND6n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND6n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND7n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Command7[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND70_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND70  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND71_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND71  */
@@ -810,19 +1181,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND78_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND78  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND79_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND79  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND710_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND710  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND70 0x000000C6            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND71 0x00000106            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND72 0x00000146            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND73 0x00000186            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND74 0x000001C6            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND75 0x00000206            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND76 0x00000246            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND77 0x00000286            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND78 0x000002C6            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND79 0x00000306            /*  ADISENSE_CORE Sensor Configuration Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND710 0x00000346            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND711_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND711  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND712_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND712  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND713_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND713  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND714_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND714  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND715_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND715  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND70 0x000000C8            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND71 0x00000108            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND72 0x00000148            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND73 0x00000188            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND74 0x000001C8            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND75 0x00000208            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND76 0x00000248            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND77 0x00000288            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND78 0x000002C8            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND79 0x00000308            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND710 0x00000348            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND711 0x00000388            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND712 0x000003C8            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND713 0x00000408            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND714 0x00000448            /*  ADISENSE_CORE Sensor Configuration Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND715 0x00000488            /*  ADISENSE_CORE Sensor Configuration Command7 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND7n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND70 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND7n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND7n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD1n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Read_Cmd1[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD10_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD10  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD11_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD11  */
@@ -835,19 +1216,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD18_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD18  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD19_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD19  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD110_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD110  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD10 0x000000C8            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD11 0x00000108            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD12 0x00000148            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD13 0x00000188            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD14 0x000001C8            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD15 0x00000208            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD16 0x00000248            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD17 0x00000288            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD18 0x000002C8            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD19 0x00000308            /*  ADISENSE_CORE Sensor Read Command1 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD110 0x00000348            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD111_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD111  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD112_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD112  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD113_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD113  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD114_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD114  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD115_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD115  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD10 0x000000C9            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD11 0x00000109            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD12 0x00000149            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD13 0x00000189            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD14 0x000001C9            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD15 0x00000209            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD16 0x00000249            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD17 0x00000289            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD18 0x000002C9            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD19 0x00000309            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD110 0x00000349            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD111 0x00000389            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD112 0x000003C9            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD113 0x00000409            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD114 0x00000449            /*  ADISENSE_CORE Sensor Read Command1 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD115 0x00000489            /*  ADISENSE_CORE Sensor Read Command1 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD1n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD10 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD1n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD1n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD2n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Read_Cmd2[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD20_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD20  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD21_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD21  */
@@ -860,19 +1251,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD28_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD28  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD29_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD29  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD210_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD210  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD20 0x000000C9            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD21 0x00000109            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD22 0x00000149            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD23 0x00000189            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD24 0x000001C9            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD25 0x00000209            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD26 0x00000249            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD27 0x00000289            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD28 0x000002C9            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD29 0x00000309            /*  ADISENSE_CORE Sensor Read Command2 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD210 0x00000349            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD211_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD211  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD212_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD212  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD213_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD213  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD214_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD214  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD215_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD215  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD20 0x000000CA            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD21 0x0000010A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD22 0x0000014A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD23 0x0000018A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD24 0x000001CA            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD25 0x0000020A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD26 0x0000024A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD27 0x0000028A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD28 0x000002CA            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD29 0x0000030A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD210 0x0000034A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD211 0x0000038A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD212 0x000003CA            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD213 0x0000040A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD214 0x0000044A            /*  ADISENSE_CORE Sensor Read Command2 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD215 0x0000048A            /*  ADISENSE_CORE Sensor Read Command2 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD2n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD20 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD2n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD2n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD3n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Read_Cmd3[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD30_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD30  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD31_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD31  */
@@ -885,19 +1286,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD38_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD38  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD39_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD39  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD310_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD310  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD30 0x000000CA            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD31 0x0000010A            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD32 0x0000014A            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD33 0x0000018A            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD34 0x000001CA            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD35 0x0000020A            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD36 0x0000024A            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD37 0x0000028A            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD38 0x000002CA            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD39 0x0000030A            /*  ADISENSE_CORE Sensor Read Command3 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD310 0x0000034A            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD311_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD311  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD312_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD312  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD313_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD313  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD314_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD314  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD315_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD315  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD30 0x000000CB            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD31 0x0000010B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD32 0x0000014B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD33 0x0000018B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD34 0x000001CB            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD35 0x0000020B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD36 0x0000024B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD37 0x0000028B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD38 0x000002CB            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD39 0x0000030B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD310 0x0000034B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD311 0x0000038B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD312 0x000003CB            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD313 0x0000040B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD314 0x0000044B            /*  ADISENSE_CORE Sensor Read Command3 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD315 0x0000048B            /*  ADISENSE_CORE Sensor Read Command3 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD3n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD30 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD3n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD3n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD4n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Read_Cmd4[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD40_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD40  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD41_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD41  */
@@ -910,19 +1321,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD48_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD48  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD49_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD49  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD410_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD410  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD40 0x000000CB            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD41 0x0000010B            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD42 0x0000014B            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD43 0x0000018B            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD44 0x000001CB            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD45 0x0000020B            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD46 0x0000024B            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD47 0x0000028B            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD48 0x000002CB            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD49 0x0000030B            /*  ADISENSE_CORE Sensor Read Command4 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD410 0x0000034B            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD411_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD411  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD412_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD412  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD413_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD413  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD414_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD414  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD415_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD415  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD40 0x000000CC            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD41 0x0000010C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD42 0x0000014C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD43 0x0000018C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD44 0x000001CC            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD45 0x0000020C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD46 0x0000024C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD47 0x0000028C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD48 0x000002CC            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD49 0x0000030C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD410 0x0000034C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD411 0x0000038C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD412 0x000003CC            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD413 0x0000040C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD414 0x0000044C            /*  ADISENSE_CORE Sensor Read Command4 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD415 0x0000048C            /*  ADISENSE_CORE Sensor Read Command4 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD4n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD40 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD4n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD4n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD5n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Read_Cmd5[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD50_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD50  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD51_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD51  */
@@ -935,19 +1356,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD58_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD58  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD59_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD59  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD510_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD510  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD50 0x000000CC            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD51 0x0000010C            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD52 0x0000014C            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD53 0x0000018C            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD54 0x000001CC            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD55 0x0000020C            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD56 0x0000024C            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD57 0x0000028C            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD58 0x000002CC            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD59 0x0000030C            /*  ADISENSE_CORE Sensor Read Command5 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD510 0x0000034C            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD511_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD511  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD512_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD512  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD513_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD513  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD514_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD514  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD515_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD515  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD50 0x000000CD            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD51 0x0000010D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD52 0x0000014D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD53 0x0000018D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD54 0x000001CD            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD55 0x0000020D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD56 0x0000024D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD57 0x0000028D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD58 0x000002CD            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD59 0x0000030D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD510 0x0000034D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD511 0x0000038D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD512 0x000003CD            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD513 0x0000040D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD514 0x0000044D            /*  ADISENSE_CORE Sensor Read Command5 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD515 0x0000048D            /*  ADISENSE_CORE Sensor Read Command5 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD5n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD50 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD5n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD5n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD6n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Read_Cmd6[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD60_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD60  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD61_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD61  */
@@ -960,19 +1391,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD68_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD68  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD69_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD69  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD610_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD610  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD60 0x000000CD            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD61 0x0000010D            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD62 0x0000014D            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD63 0x0000018D            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD64 0x000001CD            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD65 0x0000020D            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD66 0x0000024D            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD67 0x0000028D            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD68 0x000002CD            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD69 0x0000030D            /*  ADISENSE_CORE Sensor Read Command6 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD610 0x0000034D            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD611_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD611  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD612_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD612  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD613_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD613  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD614_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD614  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD615_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD615  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD60 0x000000CE            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD61 0x0000010E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD62 0x0000014E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD63 0x0000018E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD64 0x000001CE            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD65 0x0000020E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD66 0x0000024E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD67 0x0000028E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD68 0x000002CE            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD69 0x0000030E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD610 0x0000034E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD611 0x0000038E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD612 0x000003CE            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD613 0x0000040E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD614 0x0000044E            /*  ADISENSE_CORE Sensor Read Command6 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD615 0x0000048E            /*  ADISENSE_CORE Sensor Read Command6 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD6n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD60 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD6n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD6n_COUNT 16
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD7n_RESET 0x00000000            /*      Reset Value for Digital_Sensor_Read_Cmd7[n]  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD70_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD70  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD71_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD71  */
@@ -985,19 +1426,29 @@
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD78_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD78  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD79_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD79  */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD710_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD710  */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD70 0x000000CE            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD71 0x0000010E            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD72 0x0000014E            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD73 0x0000018E            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD74 0x000001CE            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD75 0x0000020E            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD76 0x0000024E            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD77 0x0000028E            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD78 0x000002CE            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD79 0x0000030E            /*  ADISENSE_CORE Sensor Read Command7 */
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD710 0x0000034E            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD711_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD711  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD712_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD712  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD713_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD713  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD714_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD714  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD715_RESET 0x00000000            /*      Reset Value for REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD715  */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD70 0x000000CF            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD71 0x0000010F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD72 0x0000014F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD73 0x0000018F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD74 0x000001CF            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD75 0x0000020F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD76 0x0000024F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD77 0x0000028F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD78 0x000002CF            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD79 0x0000030F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD710 0x0000034F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD711 0x0000038F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD712 0x000003CF            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD713 0x0000040F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD714 0x0000044F            /*  ADISENSE_CORE Sensor Read Command7 */
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD715 0x0000048F            /*  ADISENSE_CORE Sensor Read Command7 */
 #define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD7n(i) (REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD70 + ((i) * 64))
-#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD7n_COUNT 11
+#define REG_ADISENSE_CORE_DIGITAL_SENSOR_READ_CMD7n_COUNT 16
 
 /* ============================================================================================================================
         ADISENSE_CORE Register BitMasks, Positions & Enumerations 
@@ -1012,23 +1463,45 @@
 #define ENUM_ADISENSE_CORE_COMMAND_CONVERT_WITH_RAW 0x00000002            /*  Special_Command: Start Conversions with Added RAW ADC Data */
 #define ENUM_ADISENSE_CORE_COMMAND_RUN_DIAGNOSTICS 0x00000003            /*  Special_Command: Initiate a Diagnostics Cycle */
 #define ENUM_ADISENSE_CORE_COMMAND_SELF_CALIBRATION 0x00000004            /*  Special_Command: Initiate a Self-Calibration Cycle */
-#define ENUM_ADISENSE_CORE_COMMAND_LOAD_CONFIG 0x00000005            /*  Special_Command: Load Registers with Configuration from FLASH */
-#define ENUM_ADISENSE_CORE_COMMAND_SAVE_CONFIG 0x00000006            /*  Special_Command: Store Current Register Configuration to FLASH */
 #define ENUM_ADISENSE_CORE_COMMAND_LATCH_CONFIG 0x00000007            /*  Special_Command: Latch Configuration. */
 #define ENUM_ADISENSE_CORE_COMMAND_LOAD_LUT  0x00000008            /*  Special_Command: Load LUT from FLASH */
 #define ENUM_ADISENSE_CORE_COMMAND_SAVE_LUT  0x00000009            /*  Special_Command: Save LUT to FLASH */
 #define ENUM_ADISENSE_CORE_COMMAND_SYSTEM_CHECK 0x0000000A            /*  Special_Command: Full Suite of Measurement Diagnostics */
+#define ENUM_ADISENSE_CORE_COMMAND_CONVERT_FFT 0x0000000B            /*  Special_Command: Perform FFTs on Selected Channel(s) */
+#define ENUM_ADISENSE_CORE_COMMAND_ERASE_EXTERNAL_FLASH 0x00000010            /*  Special_Command: Erase Contents of External Flash */
+#define ENUM_ADISENSE_CORE_COMMAND_POWER_DOWN 0x00000014            /*  Special_Command: Enter Low Power State */
+#define ENUM_ADISENSE_CORE_COMMAND_LOAD_CONFIG_1 0x00000018            /*  Special_Command: Load Registers with Configuration#1 from FLASH */
+#define ENUM_ADISENSE_CORE_COMMAND_SAVE_CONFIG_1 0x00000019            /*  Special_Command: Store Current Registers to FLASH Configuration#1 */
+#define ENUM_ADISENSE_CORE_COMMAND_LOAD_CONFIG_2 0x0000001A            /*  Special_Command: Load Registers with Configuration#2 from FLASH */
+#define ENUM_ADISENSE_CORE_COMMAND_SAVE_CONFIG_2 0x0000001B            /*  Special_Command: Store Current Registers to FLASH Configuration#2 */
+#define ENUM_ADISENSE_CORE_COMMAND_LOAD_CONFIG_3 0x0000001C            /*  Special_Command: Load Registers with Configuration#3 from FLASH */
+#define ENUM_ADISENSE_CORE_COMMAND_SAVE_CONFIG_3 0x0000001D            /*  Special_Command: Store Current Registers to FLASH Configuration#3 */
+#define ENUM_ADISENSE_CORE_COMMAND_LOAD_CONFIG_4 0x0000001E            /*  Special_Command: Load Registers with Configuration#4 from FLASH */
+#define ENUM_ADISENSE_CORE_COMMAND_SAVE_CONFIG_4 0x0000001F            /*  Special_Command: Store Current Registers to FLASH Configuration#4 */
+#define ENUM_ADISENSE_CORE_COMMAND_CALIBRATE_DIGITAL 0x00000020            /*  Special_Command: Performs a Calibration of Digital Sensor, if Supported & Enabled. */
 
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_MODE                   Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_MODE_EXT_FLASH_STORE  7            /*  Indicates If Measurement Data Should Be Stored in Flash */
+#define BITP_ADISENSE_CORE_MODE_FFT_MODE      5            /*  Indicates Single or Multiple Sequence of FFTs */
+#define BITP_ADISENSE_CORE_MODE_CALIBRATION_METHOD  4            /*  Indicates If Calibration is Required on 'Latch' Command */
 #define BITP_ADISENSE_CORE_MODE_DRDY_MODE     2            /*  Indicates Behavior of DRDY with Respect to FIFO State */
 #define BITP_ADISENSE_CORE_MODE_CONVERSION_MODE  0            /*  Conversion Mode */
+#define BITM_ADISENSE_CORE_MODE_EXT_FLASH_STORE 0x00000080    /*  Indicates If Measurement Data Should Be Stored in Flash */
+#define BITM_ADISENSE_CORE_MODE_FFT_MODE     0x00000020    /*  Indicates Single or Multiple Sequence of FFTs */
+#define BITM_ADISENSE_CORE_MODE_CALIBRATION_METHOD 0x00000010    /*  Indicates If Calibration is Required on 'Latch' Command */
 #define BITM_ADISENSE_CORE_MODE_DRDY_MODE    0x0000000C    /*  Indicates Behavior of DRDY with Respect to FIFO State */
 #define BITM_ADISENSE_CORE_MODE_CONVERSION_MODE 0x00000003    /*  Conversion Mode */
+#define ENUM_ADISENSE_CORE_MODE_EXT_FLASH_NOT_USED 0x00000000            /*  Ext_Flash_Store: Do Not Use External Flash */
+#define ENUM_ADISENSE_CORE_MODE_EXT_FLASH_USED 0x00000080            /*  Ext_Flash_Store: Use External Flash */
+#define ENUM_ADISENSE_CORE_MODE_FFT_MODE_SINGLE 0x00000000            /*  FFT_Mode: Perform Single Sequence of FFT(s) on Selected Channel(s) */
+#define ENUM_ADISENSE_CORE_MODE_FFT_MODE_CONTINUOUS 0x00000020            /*  FFT_Mode: Perform Continuous Sequence of FFTs on Selected Channel(s) */
+#define ENUM_ADISENSE_CORE_MODE_NO_CAL       0x00000000            /*  Calibration_Method: No Calibration Performed */
+#define ENUM_ADISENSE_CORE_MODE_DO_CAL       0x00000010            /*  Calibration_Method: Calibration Performed */
 #define ENUM_ADISENSE_CORE_MODE_DRDY_PER_CONVERSION 0x00000000            /*  Drdy_Mode: Data Ready Per Conversion */
 #define ENUM_ADISENSE_CORE_MODE_DRDY_PER_CYCLE 0x00000004            /*  Drdy_Mode: Data Ready Per Cycle */
-#define ENUM_ADISENSE_CORE_MODE_DRDY_PER_FIFO_FILL 0x00000008            /*  Drdy_Mode: Data Ready Per FIFO Fill */
+#define ENUM_ADISENSE_CORE_MODE_DRDY_PER_FIFO_FILL 0x00000008            /*  Drdy_Mode: Data Ready Per FIFO Fill / Multi-Cycle Burst */
 #define ENUM_ADISENSE_CORE_MODE_SINGLECYCLE  0x00000000            /*  Conversion_Mode: Single Cycle */
 #define ENUM_ADISENSE_CORE_MODE_MULTICYCLE   0x00000001            /*  Conversion_Mode: Multi Cycle */
 #define ENUM_ADISENSE_CORE_MODE_CONTINUOUS   0x00000002            /*  Conversion_Mode: Continuous Conversion */
@@ -1036,9 +1509,7 @@
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_POWER_CONFIG           Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
-#define BITP_ADISENSE_CORE_POWER_CONFIG_STDBY_EN  4            /*  Standby */
 #define BITP_ADISENSE_CORE_POWER_CONFIG_POWER_MODE_ADC  0            /*  ADC Power Mode */
-#define BITM_ADISENSE_CORE_POWER_CONFIG_STDBY_EN 0x00000010    /*  Standby */
 #define BITM_ADISENSE_CORE_POWER_CONFIG_POWER_MODE_ADC 0x00000003    /*  ADC Power Mode */
 #define ENUM_ADISENSE_CORE_POWER_CONFIG_ADC_LOW_POWER 0x00000000            /*  Power_Mode_ADC: ADC Low Power Mode */
 #define ENUM_ADISENSE_CORE_POWER_CONFIG_ADC_MID_POWER 0x00000001            /*  Power_Mode_ADC: ADC Mid Power Mode */
@@ -1048,12 +1519,16 @@
           ADISENSE_CORE_CYCLE_CONTROL          Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
 #define BITP_ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TIME_UNITS 14            /*  Units for Cycle Time */
+#define BITP_ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TYPE 12            /*  Type of Measurement Cycle */
 #define BITP_ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TIME  0            /*  Duration of a Full Measurement Cycle */
 #define BITM_ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TIME_UNITS 0x0000C000    /*  Units for Cycle Time */
+#define BITM_ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TYPE 0x00001000    /*  Type of Measurement Cycle */
 #define BITM_ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TIME 0x00000FFF    /*  Duration of a Full Measurement Cycle */
 #define ENUM_ADISENSE_CORE_CYCLE_CONTROL_MICROSECONDS 0x00000000            /*  Cycle_Time_Units: Micro-Seconds */
 #define ENUM_ADISENSE_CORE_CYCLE_CONTROL_MILLISECONDS 0x00004000            /*  Cycle_Time_Units: Milli-Seconds */
 #define ENUM_ADISENSE_CORE_CYCLE_CONTROL_SECONDS 0x00008000            /*  Cycle_Time_Units: Seconds */
+#define ENUM_ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TYPE_SWITCH 0x00000000            /*  Cycle_Type: Switch Channels After Every Conversion */
+#define ENUM_ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TYPE_FULL 0x00001000            /*  Cycle_Type: Perform Full Number Of Conversions On A Channel Consecutively */
 
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_FIFO_NUM_CYCLES        Pos/Masks         Description
@@ -1086,20 +1561,12 @@
    ------------------------------------------------------------------------------------------------------------------------- */
 #define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_CALIBRATION_ERROR 13            /*  Indicates Error During Internal Device Calibrations */
 #define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_CONVERSION_ERROR 12            /*  Indicates Error During Internal ADC Conversions */
-#define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_AINP_OV_ERROR 11            /*  Indicates Over-Voltage Error on Positive Analog Input */
-#define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_AINP_UV_ERROR 10            /*  Indicates Under-Voltage Error on Positive Analog Input */
-#define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_AINM_OV_ERROR  9            /*  Indicates Over-Voltage Error on Negative Analog Input */
-#define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_AINM_UV_ERROR  8            /*  Indicates Under-Voltage Error on Negative Analog Input */
 #define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_SUPPLY_CAP_ERROR  3            /*  Indicates Fault on Internal Supply Regulator Capacitor */
 #define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_SUPPLY_MONITOR_ERROR  2            /*  Indicates Low Voltage on Internal Supply Voltages */
 #define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_COMMS_ERROR  1            /*  Indicates Error on Internal Device Communications */
 #define BITP_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_CHECKSUM_ERROR  0            /*  Indicates Error on Internal Checksum Calculations */
 #define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_CALIBRATION_ERROR 0x00002000    /*  Indicates Error During Internal Device Calibrations */
 #define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_CONVERSION_ERROR 0x00001000    /*  Indicates Error During Internal ADC Conversions */
-#define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_AINP_OV_ERROR 0x00000800    /*  Indicates Over-Voltage Error on Positive Analog Input */
-#define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_AINP_UV_ERROR 0x00000400    /*  Indicates Under-Voltage Error on Positive Analog Input */
-#define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_AINM_OV_ERROR 0x00000200    /*  Indicates Over-Voltage Error on Negative Analog Input */
-#define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_AINM_UV_ERROR 0x00000100    /*  Indicates Under-Voltage Error on Negative Analog Input */
 #define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_SUPPLY_CAP_ERROR 0x00000008    /*  Indicates Fault on Internal Supply Regulator Capacitor */
 #define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_SUPPLY_MONITOR_ERROR 0x00000004    /*  Indicates Low Voltage on Internal Supply Voltages */
 #define BITM_ADISENSE_CORE_DIAGNOSTICS_STATUS_DIAG_COMMS_ERROR 0x00000002    /*  Indicates Error on Internal Device Communications */
@@ -1108,6 +1575,9 @@
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_CHANNEL_ALERT_STATUS   Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH15 15            /*  Indicates Channel Alert is Active */
+#define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH14 14            /*  Indicates Channel Alert is Active */
+#define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH13 13            /*  Indicates Channel Alert is Active */
 #define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH12 12            /*  Indicates Channel Alert is Active */
 #define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH11 11            /*  Indicates Channel Alert is Active */
 #define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH10 10            /*  Indicates Channel Alert is Active */
@@ -1121,6 +1591,9 @@
 #define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH2  2            /*  Indicates Channel Alert is Active */
 #define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH1  1            /*  Indicates Channel Alert is Active */
 #define BITP_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH0  0            /*  Indicates Channel Alert is Active */
+#define BITM_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH15 0x00008000    /*  Indicates Channel Alert is Active */
+#define BITM_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH14 0x00004000    /*  Indicates Channel Alert is Active */
+#define BITM_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH13 0x00002000    /*  Indicates Channel Alert is Active */
 #define BITM_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH12 0x00001000    /*  Indicates Channel Alert is Active */
 #define BITM_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH11 0x00000800    /*  Indicates Channel Alert is Active */
 #define BITM_ADISENSE_CORE_CHANNEL_ALERT_STATUS_ALERT_CH10 0x00000400    /*  Indicates Channel Alert is Active */
@@ -1138,8 +1611,18 @@
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_ALERT_STATUS_2         Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_ALERT_STATUS_2_EXT_FLASH_ERROR  7            /*  Indicates with External Flash Memory */
+#define BITP_ADISENSE_CORE_ALERT_STATUS_2_TEMPERATURE_ALARM_LO  6            /*  Indicates Device Temperature Low Alarm */
+#define BITP_ADISENSE_CORE_ALERT_STATUS_2_TEMPERATURE_ALARM_HI  5            /*  Indicates Device Temperature High Alarm */
+#define BITP_ADISENSE_CORE_ALERT_STATUS_2_TEMPERATURE_ALERT_LO  4            /*  Indicates Device Temperature Low Alert */
+#define BITP_ADISENSE_CORE_ALERT_STATUS_2_TEMPERATURE_ALERT_HI  3            /*  Indicates Device Temperature High Alert */
 #define BITP_ADISENSE_CORE_ALERT_STATUS_2_CONFIGURATION_ERROR  2            /*  Indicates Error with Programmed Configuration */
 #define BITP_ADISENSE_CORE_ALERT_STATUS_2_LUT_ERROR  1            /*  Indicates Error with One or More Look-Up-Tables */
+#define BITM_ADISENSE_CORE_ALERT_STATUS_2_EXT_FLASH_ERROR 0x00000080    /*  Indicates with External Flash Memory */
+#define BITM_ADISENSE_CORE_ALERT_STATUS_2_TEMPERATURE_ALARM_LO 0x00000040    /*  Indicates Device Temperature Low Alarm */
+#define BITM_ADISENSE_CORE_ALERT_STATUS_2_TEMPERATURE_ALARM_HI 0x00000020    /*  Indicates Device Temperature High Alarm */
+#define BITM_ADISENSE_CORE_ALERT_STATUS_2_TEMPERATURE_ALERT_LO 0x00000010    /*  Indicates Device Temperature Low Alert */
+#define BITM_ADISENSE_CORE_ALERT_STATUS_2_TEMPERATURE_ALERT_HI 0x00000008    /*  Indicates Device Temperature High Alert */
 #define BITM_ADISENSE_CORE_ALERT_STATUS_2_CONFIGURATION_ERROR 0x00000004    /*  Indicates Error with Programmed Configuration */
 #define BITM_ADISENSE_CORE_ALERT_STATUS_2_LUT_ERROR 0x00000002    /*  Indicates Error with One or More Look-Up-Tables */
 
@@ -1154,6 +1637,7 @@
 #define BITP_ADISENSE_CORE_ALERT_DETAIL_CH_UNDER_VOLTAGE 10            /*  Indicates Channel Under-Voltage */
 #define BITP_ADISENSE_CORE_ALERT_DETAIL_CH_LUT_ERROR_CH  9            /*  Indicates Error with Channel Look-Up-Table */
 #define BITP_ADISENSE_CORE_ALERT_DETAIL_CH_CONFIG_ERR  8            /*  Indicates Configuration Error on Channel */
+#define BITP_ADISENSE_CORE_ALERT_DETAIL_CH_CALIBRATION_INVALID  7            /*  Indicates Problem During Calibration of Channel */
 #define BITP_ADISENSE_CORE_ALERT_DETAIL_CH_REF_DETECT  6            /*  Indicates Whether ADC Reference is Valid */
 #define BITP_ADISENSE_CORE_ALERT_DETAIL_CH_SENSOR_OPEN  5            /*  Indicates Sensor Input is Open Circuit */
 #define BITP_ADISENSE_CORE_ALERT_DETAIL_CH_HIGH_LIMIT  4            /*  Indicates Sensor Result is Greater Than High Limit */
@@ -1169,6 +1653,7 @@
 #define BITM_ADISENSE_CORE_ALERT_DETAIL_CH_UNDER_VOLTAGE 0x00000400    /*  Indicates Channel Under-Voltage */
 #define BITM_ADISENSE_CORE_ALERT_DETAIL_CH_LUT_ERROR_CH 0x00000200    /*  Indicates Error with Channel Look-Up-Table */
 #define BITM_ADISENSE_CORE_ALERT_DETAIL_CH_CONFIG_ERR 0x00000100    /*  Indicates Configuration Error on Channel */
+#define BITM_ADISENSE_CORE_ALERT_DETAIL_CH_CALIBRATION_INVALID 0x00000080    /*  Indicates Problem During Calibration of Channel */
 #define BITM_ADISENSE_CORE_ALERT_DETAIL_CH_REF_DETECT 0x00000040    /*  Indicates Whether ADC Reference is Valid */
 #define BITM_ADISENSE_CORE_ALERT_DETAIL_CH_SENSOR_OPEN 0x00000020    /*  Indicates Sensor Input is Open Circuit */
 #define BITM_ADISENSE_CORE_ALERT_DETAIL_CH_HIGH_LIMIT 0x00000010    /*  Indicates Sensor Result is Greater Than High Limit */
@@ -1218,20 +1703,41 @@
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_DATA_FIFO              Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
-#define BITP_ADISENSE_CORE_DATA_FIFO_RAW_SAMPLE 40            /*  ADC Result */
-#define BITP_ADISENSE_CORE_DATA_FIFO_CH_VALID 39            /*  Indicates Whether Valid Data Read from FIFO */
-#define BITP_ADISENSE_CORE_DATA_FIFO_CH_RAW  38            /*  Indicates If RAW Data is Valid */
-#define BITP_ADISENSE_CORE_DATA_FIFO_CH_ALERT 37            /*  Indicates Alert on Channel */
-#define BITP_ADISENSE_CORE_DATA_FIFO_CH_ERROR 36            /*  Indicates Error on Channel */
-#define BITP_ADISENSE_CORE_DATA_FIFO_CHANNEL_ID 32            /*  Indicates Which Channel This FIFO Data Corresponds to */
-#define BITP_ADISENSE_CORE_DATA_FIFO_SENSOR_RESULT  0            /*  Linearized and Compensated Sensor Result */
-#define BITM_ADISENSE_CORE_DATA_FIFO_RAW_SAMPLE 0xFFFFFF0000000000    /*  ADC Result */
-#define BITM_ADISENSE_CORE_DATA_FIFO_CH_VALID 0x8000000000    /*  Indicates Whether Valid Data Read from FIFO */
-#define BITM_ADISENSE_CORE_DATA_FIFO_CH_RAW  0x4000000000    /*  Indicates If RAW Data is Valid */
-#define BITM_ADISENSE_CORE_DATA_FIFO_CH_ALERT 0x2000000000    /*  Indicates Alert on Channel */
-#define BITM_ADISENSE_CORE_DATA_FIFO_CH_ERROR 0x1000000000    /*  Indicates Error on Channel */
-#define BITM_ADISENSE_CORE_DATA_FIFO_CHANNEL_ID 0xF00000000    /*  Indicates Which Channel This FIFO Data Corresponds to */
-#define BITM_ADISENSE_CORE_DATA_FIFO_SENSOR_RESULT 0xFFFFFFFF    /*  Linearized and Compensated Sensor Result */
+#define BITP_ADISENSE_CORE_DATA_FIFO_DATA_FIFO  0            /*  Fifo Buffer of Sensor Results */
+#define BITM_ADISENSE_CORE_DATA_FIFO_DATA_FIFO 0x000000FF    /*  Fifo Buffer of Sensor Results */
+
+/* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_FFT_CONFIG             Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_FFT_CONFIG_FFT_NUM_CHANNELS  6            /*  Indicates Number of Channels for FFT */
+#define BITP_ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT  4            /*  Indicates FFT Output Format */
+#define BITP_ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW  2            /*  Indicates Window Type for FFT */
+#define BITP_ADISENSE_CORE_FFT_CONFIG_FFT_NUM_BINS  0            /*  Indicates Number of Bins in FFT */
+#define BITM_ADISENSE_CORE_FFT_CONFIG_FFT_NUM_CHANNELS 0x000000C0    /*  Indicates Number of Channels for FFT */
+#define BITM_ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT 0x00000030    /*  Indicates FFT Output Format */
+#define BITM_ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW 0x0000000C    /*  Indicates Window Type for FFT */
+#define BITM_ADISENSE_CORE_FFT_CONFIG_FFT_NUM_BINS 0x00000003    /*  Indicates Number of Bins in FFT */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_CHANS_1 0x00000000            /*  FFT_Num_Channels: One FFT Channel */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_CHANS_2 0x00000040            /*  FFT_Num_Channels: Two FFT Channels */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_CHANS_3 0x00000080            /*  FFT_Num_Channels: Three FFT Channels */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_CHANS_4 0x000000C0            /*  FFT_Num_Channels: Four FFT Channels */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_FULL 0x00000000            /*  FFT_Output: N/2-Term Amplitude Response */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_MAX16 0x00000010            /*  FFT_Output: Bin-Number and Amplitude of 16 Highest Peaks of Amplitude Response */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_FULL_WITH_RAW 0x00000020            /*  FFT_Output: N/2-Term Amplitude Response Plus N Raw ADC Samples */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_NONE 0x00000000            /*  FFT_Window: No Window */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_HANN 0x00000004            /*  FFT_Window: Hann Window */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_BLACKMANN_HARRIS 0x00000008            /*  FFT_Window: Blackman-Harris-Nuttall Window */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_TBD 0x0000000C            /*  FFT_Window: Reserved */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_BINS_256 0x00000000            /*  FFT_Num_Bins: FFT Size 256 */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_BINS_512 0x00000001            /*  FFT_Num_Bins: FFT Size 512 */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_BINS_1024 0x00000002            /*  FFT_Num_Bins: FFT Size 1024 */
+#define ENUM_ADISENSE_CORE_FFT_CONFIG_FFT_BINS_2048 0x00000003            /*  FFT_Num_Bins: FFT Size 2048 */
+
+/* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_ADVANCED_SENSOR_ACCESS Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_ADVANCED_SENSOR_ACCESS_ADVANCED_SENSOR_ACCESS  0            /*  Write Specific Key Value to Access Advanced Sensors */
+#define BITM_ADISENSE_CORE_ADVANCED_SENSOR_ACCESS_ADVANCED_SENSOR_ACCESS 0x0000FFFF    /*  Write Specific Key Value to Access Advanced Sensors */
 
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_LUT_SELECT             Pos/Masks         Description
@@ -1254,14 +1760,32 @@
 #define BITM_ADISENSE_CORE_LUT_DATA_LUT_DATA 0x000000FF    /*  Data Byte to Write to / Read from Look-Up-Table */
 
 /* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_EXT_FLASH_INDEX        Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_EXT_FLASH_INDEX_EXT_FLASH_INDEX  0            /*  Start Position (Sample No.) for Retrieval of Ext. Flash Data */
+#define BITM_ADISENSE_CORE_EXT_FLASH_INDEX_EXT_FLASH_INDEX 0xFFFFFFFF    /*  Start Position (Sample No.) for Retrieval of Ext. Flash Data */
+
+/* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_EXT_FLASH_SAMPLE_COUNT Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_EXT_FLASH_SAMPLE_COUNT_EXT_FLASH_SAMPLE_COUNT  0            /*  Indicates How Many Samples Stored in External Flash */
+#define BITM_ADISENSE_CORE_EXT_FLASH_SAMPLE_COUNT_EXT_FLASH_SAMPLE_COUNT 0xFFFFFFFF    /*  Indicates How Many Samples Stored in External Flash */
+
+/* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_EXT_FLASH_DATA         Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_EXT_FLASH_DATA_EXT_FLASH_DATA  0            /*  Data Read Back from External Flash */
+#define BITM_ADISENSE_CORE_EXT_FLASH_DATA_EXT_FLASH_DATA 0x000000FF    /*  Data Read Back from External Flash */
+
+/* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_REVISION               Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
-#define BITP_ADISENSE_CORE_REVISION_COMMS_PROTOCOL 16            /*  ID Info */
-#define BITP_ADISENSE_CORE_REVISION_HARDWARE_REVISION  8            /*  ID Info */
-#define BITP_ADISENSE_CORE_REVISION_FIRMWARE_REVISION  0            /*  ID Info */
-#define BITM_ADISENSE_CORE_REVISION_COMMS_PROTOCOL 0x00FF0000    /*  ID Info */
-#define BITM_ADISENSE_CORE_REVISION_HARDWARE_REVISION 0x0000FF00    /*  ID Info */
-#define BITM_ADISENSE_CORE_REVISION_FIRMWARE_REVISION 0x000000FF    /*  ID Info */
+#define BITP_ADISENSE_CORE_REVISION_REV_MAJOR 24            /*  Major Revision Information */
+#define BITP_ADISENSE_CORE_REVISION_REV_MINOR 16            /*  Minor Revision Information */
+#define BITP_ADISENSE_CORE_REVISION_REV_PATCH  0            /*  Patch Revision Information */
+#define BITM_ADISENSE_CORE_REVISION_REV_MAJOR 0xFF000000    /*  Major Revision Information */
+#define BITM_ADISENSE_CORE_REVISION_REV_MINOR 0x00FF0000    /*  Minor Revision Information */
+#define BITM_ADISENSE_CORE_REVISION_REV_PATCH 0x0000FFFF    /*  Patch Revision Information */
 
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_CHANNEL_COUNT[n]       Pos/Masks         Description
@@ -1272,6 +1796,16 @@
 #define BITM_ADISENSE_CORE_CHANNEL_COUNT_CHANNEL_COUNT 0x0000007F    /*  How Many Times Channel Should Appear in One Cycle */
 
 /* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_CHANNEL_OPTIONS[n]     Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_CHANNEL_OPTIONS_FFT_ENABLE_CH  7            /*  Indicates Channel to Be Used for FFT */
+#define BITP_ADISENSE_CORE_CHANNEL_OPTIONS_CHANNEL_PRIORITY  0            /*  Indicates Priority or Position of This Channel in Sequence */
+#define BITM_ADISENSE_CORE_CHANNEL_OPTIONS_FFT_ENABLE_CH 0x00000080    /*  Indicates Channel to Be Used for FFT */
+#define BITM_ADISENSE_CORE_CHANNEL_OPTIONS_CHANNEL_PRIORITY 0x0000000F    /*  Indicates Priority or Position of This Channel in Sequence */
+#define ENUM_ADISENSE_CORE_CHANNEL_OPTIONS_NO_FFT 0x00000000            /*  FFT_Enable_Ch: FFT Will not be Performed on This Channel */
+#define ENUM_ADISENSE_CORE_CHANNEL_OPTIONS_DO_FFT 0x00000080            /*  FFT_Enable_Ch: FFT Will be Performed on This Channel */
+
+/* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_SENSOR_TYPE[n]         Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
 #define BITP_ADISENSE_CORE_SENSOR_TYPE_SENSOR_TYPE  0            /*  Sensor Type */
@@ -1279,110 +1813,183 @@
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_T_DEF_L1 0x00000000            /*  Sensor_Type: Thermocouple T-Type Sensor Defined Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_J_DEF_L1 0x00000001            /*  Sensor_Type: Thermocouple J-Type Sensor Defined Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_K_DEF_L1 0x00000002            /*  Sensor_Type: Thermocouple K-Type Sensor Defined Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_1_DEF_L2 0x0000000C            /*  Sensor_Type: Thermocouple Sensor 1 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_2_DEF_L2 0x0000000D            /*  Sensor_Type: Thermocouple Sensor 2 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_3_DEF_L2 0x0000000E            /*  Sensor_Type: Thermocouple Sensor 3 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_4_DEF_L2 0x0000000F            /*  Sensor_Type: Thermocouple Sensor 4 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_1_DEF_L2 0x00000008            /*  Sensor_Type: Thermocouple Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_2_DEF_L2 0x00000009            /*  Sensor_Type: Thermocouple Sensor 2 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_3_DEF_L2 0x0000000A            /*  Sensor_Type: Thermocouple Sensor 3 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_4_DEF_L2 0x0000000B            /*  Sensor_Type: Thermocouple Sensor 4 Defined Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_T_ADV_L1 0x00000010            /*  Sensor_Type: Thermocouple T-Type Sensor Advanced Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_J_ADV_L1 0x00000011            /*  Sensor_Type: Thermocouple J-Type Sensor Advanced Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_K_ADV_L1 0x00000012            /*  Sensor_Type: Thermocouple K-Type Sensor Advanced Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_1_ADV_L2 0x0000001C            /*  Sensor_Type: Thermocouple Sensor 1 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_2_ADV_L2 0x0000001D            /*  Sensor_Type: Thermocouple Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_3_ADV_L2 0x0000001E            /*  Sensor_Type: Thermocouple Sensor 3 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_4_ADV_L2 0x0000001F            /*  Sensor_Type: Thermocouple Sensor 4 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_1_ADV_L2 0x00000018            /*  Sensor_Type: Thermocouple Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_2_ADV_L2 0x00000019            /*  Sensor_Type: Thermocouple Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_3_ADV_L2 0x0000001A            /*  Sensor_Type: Thermocouple Sensor 3 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_4_ADV_L2 0x0000001B            /*  Sensor_Type: Thermocouple Sensor 4 Advanced Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT100_DEF_L1 0x00000020            /*  Sensor_Type: RTD 2 Wire PT100 Sensor Defined Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT1000_DEF_L1 0x00000021            /*  Sensor_Type: RTD 2 Wire PT1000 Sensor Defined Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_1_DEF_L2 0x0000002C            /*  Sensor_Type: RTD 2 Wire Sensor 1 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_2_DEF_L2 0x0000002D            /*  Sensor_Type: RTD 2 Wire Sensor 2 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_3_DEF_L2 0x0000002E            /*  Sensor_Type: RTD 2 Wire Sensor 3 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_4_DEF_L2 0x0000002F            /*  Sensor_Type: RTD 2 Wire Sensor 4 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_1_DEF_L2 0x00000028            /*  Sensor_Type: RTD 2 Wire Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_2_DEF_L2 0x00000029            /*  Sensor_Type: RTD 2 Wire Sensor 2 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_3_DEF_L2 0x0000002A            /*  Sensor_Type: RTD 2 Wire Sensor 3 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_4_DEF_L2 0x0000002B            /*  Sensor_Type: RTD 2 Wire Sensor 4 Defined Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT100_ADV_L1 0x00000030            /*  Sensor_Type: RTD 2 Wire PT100 Sensor Advanced Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT1000_ADV_L1 0x00000031            /*  Sensor_Type: RTD 2 Wire PT1000 Sensor Advanced Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_1_ADV_L2 0x0000003C            /*  Sensor_Type: RTD 2 Wire Sensor 1 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_2_ADV_L2 0x0000003D            /*  Sensor_Type: RTD 2 Wire Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_3_ADV_L2 0x0000003E            /*  Sensor_Type: RTD 2 Wire Sensor 3 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_4_ADV_L2 0x0000003F            /*  Sensor_Type: RTD 2 Wire Sensor 4 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_1_ADV_L2 0x00000038            /*  Sensor_Type: RTD 2 Wire Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_2_ADV_L2 0x00000039            /*  Sensor_Type: RTD 2 Wire Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_3_ADV_L2 0x0000003A            /*  Sensor_Type: RTD 2 Wire Sensor 3 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_4_ADV_L2 0x0000003B            /*  Sensor_Type: RTD 2 Wire Sensor 4 Advanced Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT100_DEF_L1 0x00000040            /*  Sensor_Type: RTD 3 Wire PT100 Sensor Defined Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT1000_DEF_L1 0x00000041            /*  Sensor_Type: RTD 3 Wire PT1000 Sensor Defined Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_1_DEF_L2 0x0000004C            /*  Sensor_Type: RTD 3 Wire Sensor 1 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_2_DEF_L2 0x0000004D            /*  Sensor_Type: RTD 3 Wire Sensor 2 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_3_DEF_L2 0x0000004E            /*  Sensor_Type: RTD 3 Wire Sensor 3 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_4_DEF_L2 0x0000004F            /*  Sensor_Type: RTD 3 Wire Sensor 4 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_1_DEF_L2 0x00000048            /*  Sensor_Type: RTD 3 Wire Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_2_DEF_L2 0x00000049            /*  Sensor_Type: RTD 3 Wire Sensor 2 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_3_DEF_L2 0x0000004A            /*  Sensor_Type: RTD 3 Wire Sensor 3 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_4_DEF_L2 0x0000004B            /*  Sensor_Type: RTD 3 Wire Sensor 4 Defined Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT100_ADV_L1 0x00000050            /*  Sensor_Type: RTD 3 Wire PT100 Sensor Advanced Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT1000_ADV_L1 0x00000051            /*  Sensor_Type: RTD 3 Wire PT1000 Sensor Advanced Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_1_ADV_L2 0x0000005C            /*  Sensor_Type: RTD 3 Wire Sensor 1 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_2_ADV_L2 0x0000005D            /*  Sensor_Type: RTD 3 Wire Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_3_ADV_L2 0x0000005E            /*  Sensor_Type: RTD 3 Wire Sensor 3 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_4_ADV_L2 0x0000005F            /*  Sensor_Type: RTD 3 Wire Sensor 4 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_1_ADV_L2 0x00000058            /*  Sensor_Type: RTD 3 Wire Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_2_ADV_L2 0x00000059            /*  Sensor_Type: RTD 3 Wire Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_3_ADV_L2 0x0000005A            /*  Sensor_Type: RTD 3 Wire Sensor 3 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_4_ADV_L2 0x0000005B            /*  Sensor_Type: RTD 3 Wire Sensor 4 Advanced Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT100_DEF_L1 0x00000060            /*  Sensor_Type: RTD 4 Wire PT100 Sensor Defined Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT1000_DEF_L1 0x00000061            /*  Sensor_Type: RTD 4 Wire PT1000 Sensor Defined Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_1_DEF_L2 0x0000006C            /*  Sensor_Type: RTD 4 Wire Sensor 1 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_2_DEF_L2 0x0000006D            /*  Sensor_Type: RTD 4 Wire Sensor 2 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_3_DEF_L2 0x0000006E            /*  Sensor_Type: RTD 4 Wire Sensor 3 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_4_DEF_L2 0x0000006F            /*  Sensor_Type: RTD 4 Wire Sensor 4 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_1_DEF_L2 0x00000068            /*  Sensor_Type: RTD 4 Wire Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_2_DEF_L2 0x00000069            /*  Sensor_Type: RTD 4 Wire Sensor 2 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_3_DEF_L2 0x0000006A            /*  Sensor_Type: RTD 4 Wire Sensor 3 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_4_DEF_L2 0x0000006B            /*  Sensor_Type: RTD 4 Wire Sensor 4 Defined Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT100_ADV_L1 0x00000070            /*  Sensor_Type: RTD 4 Wire PT100 Sensor Advanced Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT1000_ADV_L1 0x00000071            /*  Sensor_Type: RTD 4 Wire PT1000 Sensor Advanced Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_1_ADV_L2 0x0000007C            /*  Sensor_Type: RTD 4 Wire Sensor 1 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_2_ADV_L2 0x0000007D            /*  Sensor_Type: RTD 4 Wire Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_3_ADV_L2 0x0000007E            /*  Sensor_Type: RTD 4 Wire Sensor 3 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_4_ADV_L2 0x0000007F            /*  Sensor_Type: RTD 4 Wire Sensor 4 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_1_ADV_L2 0x00000078            /*  Sensor_Type: RTD 4 Wire Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_2_ADV_L2 0x00000079            /*  Sensor_Type: RTD 4 Wire Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_3_ADV_L2 0x0000007A            /*  Sensor_Type: RTD 4 Wire Sensor 3 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_4_ADV_L2 0x0000007B            /*  Sensor_Type: RTD 4 Wire Sensor 4 Advanced Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_A_10K_DEF_L1 0x00000080            /*  Sensor_Type: Thermistor Type A 10kOhm Sensor Defined Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_B_10K_DEF_L1 0x00000081            /*  Sensor_Type: Thermistor Type B 10kOhm Sensor Defined Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_1_DEF_L2 0x0000008C            /*  Sensor_Type: Thermistor Sensor 1 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_2_DEF_L2 0x0000008D            /*  Sensor_Type: Thermistor Sensor 2 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_3_DEF_L2 0x0000008E            /*  Sensor_Type: Thermistor Sensor 3 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_4_DEF_L2 0x0000008F            /*  Sensor_Type: Thermistor Sensor 4 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_1_DEF_L2 0x00000088            /*  Sensor_Type: Thermistor Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_2_DEF_L2 0x00000089            /*  Sensor_Type: Thermistor Sensor 2 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_3_DEF_L2 0x0000008A            /*  Sensor_Type: Thermistor Sensor 3 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_4_DEF_L2 0x0000008B            /*  Sensor_Type: Thermistor Sensor 4 Defined Level 2 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_A_10K_ADV_L1 0x00000090            /*  Sensor_Type: Thermistor Type A 10kOhm Sensor Advanced Level 1 */
 #define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_B_10K_ADV_L1 0x00000091            /*  Sensor_Type: Thermistor Type B 10kOhm Sensor Advanced Level 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_1_ADV_L2 0x0000009C            /*  Sensor_Type: Thermistor Sensor 1 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_2_ADV_L2 0x0000009D            /*  Sensor_Type: Thermistor Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_3_ADV_L2 0x0000009E            /*  Sensor_Type: Thermistor Sensor 3 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_4_ADV_L2 0x0000009F            /*  Sensor_Type: Thermistor Sensor 4 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_1_DEF_L2 0x000000A0            /*  Sensor_Type: Bridge 4 Wire Sensor 1 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_2_DEF_L2 0x000000A1            /*  Sensor_Type: Bridge 4 Wire Sensor 2 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_3_DEF_L2 0x000000A2            /*  Sensor_Type: Bridge 4 Wire Sensor 3 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_4_DEF_L2 0x000000A3            /*  Sensor_Type: Bridge 4 Wire Sensor 4 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_1_ADV_L2 0x000000B0            /*  Sensor_Type: Bridge 4 Wire Sensor 1 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_2_ADV_L2 0x000000B1            /*  Sensor_Type: Bridge 4 Wire Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_3_ADV_L2 0x000000B2            /*  Sensor_Type: Bridge 4 Wire Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_4_ADV_L2 0x000000B3            /*  Sensor_Type: Bridge 4 Wire Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_1_DEF_L2 0x000000C0            /*  Sensor_Type: Bridge 6 Wire Sensor 1 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_2_DEF_L2 0x000000C1            /*  Sensor_Type: Bridge 6 Wire Sensor 2 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_3_DEF_L2 0x000000C2            /*  Sensor_Type: Bridge 6 Wire Sensor 3 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_4_DEF_L2 0x000000C3            /*  Sensor_Type: Bridge 6 Wire Sensor 4 Defined Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_1_ADV_L2 0x000000D0            /*  Sensor_Type: Bridge 6 Wire Sensor 1 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_2_ADV_L2 0x000000D1            /*  Sensor_Type: Bridge 6 Wire Sensor 2 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_3_ADV_L2 0x000000D2            /*  Sensor_Type: Bridge 6 Wire Sensor 3 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_4_ADV_L2 0x000000D3            /*  Sensor_Type: Bridge 6 Wire Sensor 4 Advanced Level 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE 0x00000100            /*  Sensor_Type: Voltage Input */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_HONEYWELL_TRUSTABILITY 0x00000110            /*  Sensor_Type: Voltage Output Pressure Sensor 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_AMPHENOL_NPA300X 0x00000111            /*  Sensor_Type: Voltage Output Pressure Sensor 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_3_DEF 0x00000112            /*  Sensor_Type: Voltage Output Pressure Sensor 3 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT 0x00000180            /*  Sensor_Type: Current Input */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_HONEYWELL_PX2 0x00000181            /*  Sensor_Type: Current Output Pressure Sensor 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_2 0x00000182            /*  Sensor_Type: Current Output Pressure Sensor 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_1 0x00000800            /*  Sensor_Type: I2C Pressure Sensor 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_HONEYWELL_HUMIDICON 0x00000840            /*  Sensor_Type: I2C Humidity Sensor 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_SENSIRION_SHT3X 0x00000841            /*  Sensor_Type: I2C Humidity Sensor 2 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_HONEYWELL_TRUSTABILITY 0x00000C00            /*  Sensor_Type: SPI Pressure Sensor 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_1 0x00000C40            /*  Sensor_Type: SPI Humidity Sensor Type 1 */
-#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_1 0x00000C80            /*  Sensor_Type: SPI Accelerometer Sensor Type 1 3-Axis */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_1_ADV_L2 0x00000098            /*  Sensor_Type: Thermistor Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_2_ADV_L2 0x00000099            /*  Sensor_Type: Thermistor Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_3_ADV_L2 0x0000009A            /*  Sensor_Type: Thermistor Sensor 3 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_4_ADV_L2 0x0000009B            /*  Sensor_Type: Thermistor Sensor 4 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_1_DEF_L2 0x000000A8            /*  Sensor_Type: Bridge 4 Wire Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_2_DEF_L2 0x000000A9            /*  Sensor_Type: Bridge 4 Wire Sensor 2 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_3_DEF_L2 0x000000AA            /*  Sensor_Type: Bridge 4 Wire Sensor 3 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_4_DEF_L2 0x000000AB            /*  Sensor_Type: Bridge 4 Wire Sensor 4 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_1_ADV_L2 0x000000B8            /*  Sensor_Type: Bridge 4 Wire Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_2_ADV_L2 0x000000B9            /*  Sensor_Type: Bridge 4 Wire Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_3_ADV_L2 0x000000BA            /*  Sensor_Type: Bridge 4 Wire Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_4_ADV_L2 0x000000BB            /*  Sensor_Type: Bridge 4 Wire Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_1_DEF_L2 0x000000C8            /*  Sensor_Type: Bridge 6 Wire Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_2_DEF_L2 0x000000C9            /*  Sensor_Type: Bridge 6 Wire Sensor 2 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_3_DEF_L2 0x000000CA            /*  Sensor_Type: Bridge 6 Wire Sensor 3 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_4_DEF_L2 0x000000CB            /*  Sensor_Type: Bridge 6 Wire Sensor 4 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_1_ADV_L2 0x000000D8            /*  Sensor_Type: Bridge 6 Wire Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_2_ADV_L2 0x000000D9            /*  Sensor_Type: Bridge 6 Wire Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_3_ADV_L2 0x000000DA            /*  Sensor_Type: Bridge 6 Wire Sensor 3 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_4_ADV_L2 0x000000DB            /*  Sensor_Type: Bridge 6 Wire Sensor 4 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_2C_TYPEA_DEF_L1 0x000000E0            /*  Sensor_Type: Diode 2 Current Type A Sensor Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_3C_TYPEA_DEF_L1 0x000000E1            /*  Sensor_Type: Diode 3 Current Type A Sensor Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_2C_1_DEF_L2 0x000000E8            /*  Sensor_Type: Diode 2 Current Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_3C_1_DEF_L2 0x000000E9            /*  Sensor_Type: Diode 3 Current Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_2C_TYPEA_ADV_L1 0x000000F0            /*  Sensor_Type: Diode 2 Current Type A Sensor Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_3C_TYPEA_ADV_L1 0x000000F1            /*  Sensor_Type: Diode 3 Current Type A Sensor Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_2C_1_ADV_L2 0x000000F8            /*  Sensor_Type: Diode 2 Current Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_3C_1_ADV_L2 0x000000F9            /*  Sensor_Type: Diode 3 Current Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_A_DEF_L1 0x00000100            /*  Sensor_Type: Microphone With No External Amplifier Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_B_DEF_L1 0x00000101            /*  Sensor_Type: Microphone With External Amplifier Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_1_DEF_L2 0x00000108            /*  Sensor_Type: Microphone With No External Amplifier Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_2_DEF_L2 0x00000109            /*  Sensor_Type: Microphone With External Amplifier Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_A_ADV_L1 0x00000110            /*  Sensor_Type: Microphone With No External Amplifier Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_B_ADV_L1 0x00000111            /*  Sensor_Type: Microphone With External Amplifier Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_1_ADV_L2 0x00000116            /*  Sensor_Type: Microphone With No External Amplifier Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_2_ADV_L2 0x00000117            /*  Sensor_Type: Microphone With External Amplifier Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE 0x00000200            /*  Sensor_Type: Voltage Input */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_A_DEF_L1 0x00000220            /*  Sensor_Type: Voltage Output Pressure Sensor A Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_B_DEF_L1 0x00000221            /*  Sensor_Type: Voltage Output Pressure Sensor B Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_1_DEF_L2 0x00000228            /*  Sensor_Type: Voltage Output Pressure Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_2_DEF_L2 0x00000229            /*  Sensor_Type: Voltage Output Pressure Sensor 2 Defined  Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_A_ADV_L1 0x00000230            /*  Sensor_Type: Voltage Output Pressure Sensor A Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_B_ADV_L1 0x00000231            /*  Sensor_Type: Voltage Output Pressure Sensor B Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_1_ADV_L2 0x00000238            /*  Sensor_Type: Voltage Output Pressure Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_2_ADV_L2 0x00000239            /*  Sensor_Type: Voltage Output Pressure Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT 0x00000300            /*  Sensor_Type: Current Input */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_A_DEF_L1 0x00000320            /*  Sensor_Type: Current Output Pressure Sensor A Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_1_DEF_L2 0x00000328            /*  Sensor_Type: Current Output Pressure Sensor 1 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_2_DEF_L2 0x00000329            /*  Sensor_Type: Current Output Pressure Sensor 2 Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_A_ADV_L1 0x00000330            /*  Sensor_Type: Current Output Pressure Sensor A Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_1_ADV_L2 0x00000338            /*  Sensor_Type: Current Output Pressure Sensor 1 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_2_ADV_L2 0x00000339            /*  Sensor_Type: Current Output Pressure Sensor 2 Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_A_DEF_L1 0x00000800            /*  Sensor_Type: I2C Pressure Sensor A Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_B_DEF_L1 0x00000801            /*  Sensor_Type: I2C Pressure Sensor B Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_A_DEF_L2 0x00000808            /*  Sensor_Type: I2C Pressure Sensor A Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_B_DEF_L2 0x00000809            /*  Sensor_Type: I2C Pressure Sensor B Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_A_ADV_L1 0x00000810            /*  Sensor_Type: I2C Pressure Sensor A Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_B_ADV_L1 0x00000811            /*  Sensor_Type: I2C Pressure Sensor B Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_A_ADV_L2 0x00000818            /*  Sensor_Type: I2C Pressure Sensor A Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_B_ADV_L2 0x00000819            /*  Sensor_Type: I2C Pressure Sensor B Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_A_DEF_L1 0x00000840            /*  Sensor_Type: I2C Humidity Sensor A Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_B_DEF_L1 0x00000841            /*  Sensor_Type: I2C Humidity Sensor B Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_A_DEF_L2 0x00000848            /*  Sensor_Type: I2C Humidity Sensor A Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_B_DEF_L2 0x00000849            /*  Sensor_Type: I2C Humidity Sensor B Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_A_ADV_L1 0x00000850            /*  Sensor_Type: I2C Humidity Sensor A Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_B_ADV_L1 0x00000851            /*  Sensor_Type: I2C Humidity Sensor B Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_A_ADV_L2 0x00000858            /*  Sensor_Type: I2C Humidity Sensor A Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_B_ADV_L2 0x00000859            /*  Sensor_Type: I2C Humidity Sensor B Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_AMBIENTLIGHT_A_DEF_L1 0x00000880            /*  Sensor_Type: I2C Ambient Light Sensor A Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_AMBIENTLIGHT_A_DEF_L2 0x00000888            /*  Sensor_Type: I2C Ambient Light Sensor A Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_AMBIENTLIGHT_A_ADV_L1 0x00000890            /*  Sensor_Type: I2C Ambient Light Sensor A Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_AMBIENTLIGHT_A_ADV_L2 0x00000898            /*  Sensor_Type: I2C Ambient Light Sensor A Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_A_DEF_L1 0x00000C00            /*  Sensor_Type: SPI Pressure Sensor A Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_A_DEF_L2 0x00000C08            /*  Sensor_Type: SPI Pressure Sensor A Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_A_ADV_L1 0x00000C10            /*  Sensor_Type: SPI Pressure Sensor A Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_A_ADV_L2 0x00000C18            /*  Sensor_Type: SPI Pressure Sensor A Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_A_DEF_L1 0x00000C40            /*  Sensor_Type: SPI Humidity Sensor A Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_B_DEF_L1 0x00000C41            /*  Sensor_Type: SPI Humidity Sensor B Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_A_DEF_L2 0x00000C48            /*  Sensor_Type: SPI Humidity Sensor A Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_B_DEF_L2 0x00000C49            /*  Sensor_Type: SPI Humidity Sensor B Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_A_ADV_L1 0x00000C50            /*  Sensor_Type: SPI Humidity Sensor A Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_B_ADV_L1 0x00000C51            /*  Sensor_Type: SPI Humidity Sensor B Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_A_ADV_L2 0x00000C58            /*  Sensor_Type: SPI Humidity Sensor A Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_B_ADV_L2 0x00000C59            /*  Sensor_Type: SPI Humidity Sensor B Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_DEF_L1 0x00000C80            /*  Sensor_Type: SPI Accelerometer Sensor A 3-Axis Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_DEF_L1 0x00000C81            /*  Sensor_Type: SPI Accelerometer Sensor B 3-Axis Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_DEF_L2 0x00000C88            /*  Sensor_Type: SPI Accelerometer Sensor A 3-Axis Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_DEF_L2 0x00000C89            /*  Sensor_Type: SPI Accelerometer Sensor B 3-Axis Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_ADV_L1 0x00000C90            /*  Sensor_Type: SPI Accelerometer Sensor A 3-Axis Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_ADV_L1 0x00000C91            /*  Sensor_Type: SPI Accelerometer Sensor B 3-Axis Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_ADV_L2 0x00000C98            /*  Sensor_Type: SPI Accelerometer Sensor A 3-Axis Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_ADV_L2 0x00000C99            /*  Sensor_Type: SPI Accelerometer Sensor B 3-Axis Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_A_DEF_L1 0x00000E00            /*  Sensor_Type: UART CO2 Sensor A Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_B_DEF_L1 0x00000E01            /*  Sensor_Type: UART CO2 Sensor B Defined Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_A_DEF_L2 0x00000E08            /*  Sensor_Type: UART CO2 Sensor A Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_B_DEF_L2 0x00000E09            /*  Sensor_Type: UART CO2 Sensor B Defined Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_A_ADV_L1 0x00000E10            /*  Sensor_Type: UART CO2 Sensor A Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_B_ADV_L1 0x00000E11            /*  Sensor_Type: UART CO2 Sensor B Advanced Level 1 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_A_ADV_L2 0x00000E18            /*  Sensor_Type: UART CO2 Sensor A Advanced Level 2 */
+#define ENUM_ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_B_ADV_L2 0x00000E19            /*  Sensor_Type: UART CO2 Sensor B Advanced Level 2 */
 
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_SENSOR_DETAILS[n]      Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_SENSOR_DETAILS_COMPENSATION_DISABLE 31            /*  Indicates Compensation Data Should Not Be Used */
+#define BITP_ADISENSE_CORE_SENSOR_DETAILS_AVERAGING 28            /*  Number of ADC Results to Average */
 #define BITP_ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN 24            /*  PGA Gain */
 #define BITP_ADISENSE_CORE_SENSOR_DETAILS_REFERENCE_SELECT 20            /*  Reference Selection */
 #define BITP_ADISENSE_CORE_SENSOR_DETAILS_VBIAS 19            /*  Controls ADC Vbias Output */
 #define BITP_ADISENSE_CORE_SENSOR_DETAILS_REFERENCE_BUFFER_DISABLE 18            /*  Enable or Disable ADC Reference Buffer */
 #define BITP_ADISENSE_CORE_SENSOR_DETAILS_DO_NOT_PUBLISH 17            /*  Do Not Publish Channel Result */
+#define BITP_ADISENSE_CORE_SENSOR_DETAILS_UNITY_LUT_SELECT 16            /*  Selects Unity Transfer Function Instead of Sensor Default */
 #define BITP_ADISENSE_CORE_SENSOR_DETAILS_COMPENSATION_CHANNEL  4            /*  Indicates Which Channel is Used to Compensate Sensor Result */
 #define BITP_ADISENSE_CORE_SENSOR_DETAILS_MEASUREMENT_UNITS  0            /*  Units of Sensor Measurement */
+#define BITM_ADISENSE_CORE_SENSOR_DETAILS_COMPENSATION_DISABLE 0x80000000    /*  Indicates Compensation Data Should Not Be Used */
+#define BITM_ADISENSE_CORE_SENSOR_DETAILS_AVERAGING 0x70000000    /*  Number of ADC Results to Average */
 #define BITM_ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN 0x07000000    /*  PGA Gain */
 #define BITM_ADISENSE_CORE_SENSOR_DETAILS_REFERENCE_SELECT 0x00F00000    /*  Reference Selection */
 #define BITM_ADISENSE_CORE_SENSOR_DETAILS_VBIAS 0x00080000    /*  Controls ADC Vbias Output */
 #define BITM_ADISENSE_CORE_SENSOR_DETAILS_REFERENCE_BUFFER_DISABLE 0x00040000    /*  Enable or Disable ADC Reference Buffer */
 #define BITM_ADISENSE_CORE_SENSOR_DETAILS_DO_NOT_PUBLISH 0x00020000    /*  Do Not Publish Channel Result */
+#define BITM_ADISENSE_CORE_SENSOR_DETAILS_UNITY_LUT_SELECT 0x00010000    /*  Selects Unity Transfer Function Instead of Sensor Default */
 #define BITM_ADISENSE_CORE_SENSOR_DETAILS_COMPENSATION_CHANNEL 0x000000F0    /*  Indicates Which Channel is Used to Compensate Sensor Result */
 #define BITM_ADISENSE_CORE_SENSOR_DETAILS_MEASUREMENT_UNITS 0x0000000F    /*  Units of Sensor Measurement */
 #define ENUM_ADISENSE_CORE_SENSOR_DETAILS_PGA_GAIN_1 0x00000000            /*  PGA_Gain: Gain of 1 */
@@ -1402,14 +2009,22 @@
 #define ENUM_ADISENSE_CORE_SENSOR_DETAILS_REF_REXT1 0x00600000            /*  Reference_Select: External Resistor on Refin1 */
 #define ENUM_ADISENSE_CORE_SENSOR_DETAILS_REF_REXT2 0x00700000            /*  Reference_Select: External Resistor on Refin2 */
 #define ENUM_ADISENSE_CORE_SENSOR_DETAILS_REF_EXC 0x00800000            /*  Reference_Select: Bridge Excitation Voltage */
-#define ENUM_ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGC 0x00000000            /*  Measurement_Units: Degrees C */
-#define ENUM_ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGF 0x00000001            /*  Measurement_Units: Degrees F */
+#define ENUM_ADISENSE_CORE_SENSOR_DETAILS_UNITS_UNSPECIFIED 0x00000000            /*  Measurement_Units: Not Specified */
+#define ENUM_ADISENSE_CORE_SENSOR_DETAILS_UNITS_RESERVED 0x00000001            /*  Measurement_Units: Reserved */
+#define ENUM_ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGC 0x00000002            /*  Measurement_Units: Degrees C */
+#define ENUM_ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGF 0x00000003            /*  Measurement_Units: Degrees F */
 
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_CHANNEL_EXCITATION[n]  Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_DONT_SWAP_3WIRE  7            /*  Indicates 3-Wire Excitation Currents Should Not Be Swapped */
+#define BITP_ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_DIODE_RATIO  5            /*  Modify Current Ratios Used for Diode Sensor */
 #define BITP_ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_EXCITATION_CURRENT  0            /*  Current Source Value */
+#define BITM_ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_DONT_SWAP_3WIRE 0x00000080    /*  Indicates 3-Wire Excitation Currents Should Not Be Swapped */
+#define BITM_ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_DIODE_RATIO 0x00000020    /*  Modify Current Ratios Used for Diode Sensor */
 #define BITM_ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_EXCITATION_CURRENT 0x00000007    /*  Current Source Value */
+#define ENUM_ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_DIODE_DEFAULT 0x00000000            /*  IOUT_Diode_Ratio: Default Excitation Current Ratios */
+#define ENUM_ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_DIODE_MAX 0x00000020            /*  IOUT_Diode_Ratio: Higher Excitation Current Ratios */
 #define ENUM_ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_OFF 0x00000000            /*  IOUT_Excitation_Current: Disabled */
 #define ENUM_ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_50UA 0x00000001            /*  IOUT_Excitation_Current: 50 \mu;A */
 #define ENUM_ADISENSE_CORE_CHANNEL_EXCITATION_IEXC_100UA 0x00000002            /*  IOUT_Excitation_Current: 100 \mu;A */
@@ -1421,8 +2036,13 @@
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_SETTLING_TIME[n]       Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_SETTLING_TIME_SETTLING_TIME_UNITS 14            /*  Units for Settling Time */
 #define BITP_ADISENSE_CORE_SETTLING_TIME_SETTLING_TIME  0            /*  Settling Time to Allow When Switching to Channel */
-#define BITM_ADISENSE_CORE_SETTLING_TIME_SETTLING_TIME 0x0000FFFF    /*  Settling Time to Allow When Switching to Channel */
+#define BITM_ADISENSE_CORE_SETTLING_TIME_SETTLING_TIME_UNITS 0x0000C000    /*  Units for Settling Time */
+#define BITM_ADISENSE_CORE_SETTLING_TIME_SETTLING_TIME 0x00003FFF    /*  Settling Time to Allow When Switching to Channel */
+#define ENUM_ADISENSE_CORE_SETTLING_TIME_MICROSECONDS 0x00000000            /*  Settling_Time_Units: Micro-Seconds */
+#define ENUM_ADISENSE_CORE_SETTLING_TIME_MILLISECONDS 0x00004000            /*  Settling_Time_Units: Milli-Seconds */
+#define ENUM_ADISENSE_CORE_SETTLING_TIME_SECONDS 0x00008000            /*  Settling_Time_Units: Seconds */
 
 /* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_FILTER_SELECT[n]       Pos/Masks         Description
@@ -1467,6 +2087,26 @@
 #define BITM_ADISENSE_CORE_ALERT_CODE_CH_ALERT_CODE_CH 0x0000FFFF    /*  Per-Channel Code Indicating Type of Alert */
 
 /* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_CHANNEL_SKIP[n]        Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_CHANNEL_SKIP_CHANNEL_SKIP  0            /*  Indicates If Channel Will Skip Some Measurement Cycles */
+#define BITM_ADISENSE_CORE_CHANNEL_SKIP_CHANNEL_SKIP 0x000000FF    /*  Indicates If Channel Will Skip Some Measurement Cycles */
+
+/* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_SENSOR_PARAMETER[n]    Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_SENSOR_PARAMETER_SENSOR_PARAMETER  0            /*  Sensor Parameter Adjustment */
+#define BITM_ADISENSE_CORE_SENSOR_PARAMETER_SENSOR_PARAMETER 0xFFFFFFFF    /*  Sensor Parameter Adjustment */
+
+/* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_CALIBRATION_PARAMETER[n] Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_CALIBRATION_PARAMETER_CALIBRATION_PARAMETER_ENABLE 24            /*  Enables Use of Calibration_Parameter */
+#define BITP_ADISENSE_CORE_CALIBRATION_PARAMETER_CALIBRATION_PARAMETER  0            /*  Calibration Parameter Value */
+#define BITM_ADISENSE_CORE_CALIBRATION_PARAMETER_CALIBRATION_PARAMETER_ENABLE 0x01000000    /*  Enables Use of Calibration_Parameter */
+#define BITM_ADISENSE_CORE_CALIBRATION_PARAMETER_CALIBRATION_PARAMETER 0x00FFFFFF    /*  Calibration Parameter Value */
+
+/* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_DIGITAL_SENSOR_CONFIG[n] Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
 #define BITP_ADISENSE_CORE_DIGITAL_SENSOR_CONFIG_DIGITAL_SENSOR_DATA_BITS 11            /*  Number of Relevant Data Bits */
@@ -1501,6 +2141,65 @@
 #define BITM_ADISENSE_CORE_DIGITAL_SENSOR_NUM_CMDS_DIGITAL_SENSOR_NUM_CFG_CMDS 0x00000007    /*  Number of Configuration Commands for Digital Sensor */
 
 /* -------------------------------------------------------------------------------------------------------------------------
+          ADISENSE_CORE_DIGITAL_SENSOR_COMMS[n] Pos/Masks         Description
+   ------------------------------------------------------------------------------------------------------------------------- */
+#define BITP_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_MODE 12            /*  Configuration for Sensor UART Protocol */
+#define BITP_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE 10            /*  Configuration for Sensor SPI Protocol */
+#define BITP_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_BAUD  7            /*  Controls Baud Rate for UART Sensors */
+#define BITP_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_CLOCK  5            /*  Controls SCLK Frequency for I2C Sensors */
+#define BITP_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_CLOCK  1            /*  Controls Clock Frequency for SPI Sensors */
+#define BITP_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_DIGITAL_SENSOR_COMMS_EN  0            /*  Enable Digital Sensor Comms Register Parameters */
+#define BITM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_MODE 0x0000F000    /*  Configuration for Sensor UART Protocol */
+#define BITM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE 0x00000C00    /*  Configuration for Sensor SPI Protocol */
+#define BITM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_BAUD 0x00000380    /*  Controls Baud Rate for UART Sensors */
+#define BITM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_CLOCK 0x00000060    /*  Controls SCLK Frequency for I2C Sensors */
+#define BITM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_CLOCK 0x0000001E    /*  Controls Clock Frequency for SPI Sensors */
+#define BITM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_DIGITAL_SENSOR_COMMS_EN 0x00000001    /*  Enable Digital Sensor Comms Register Parameters */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N1 0x00000000            /*  Uart_Mode: 8 Data Bits No Parity   1 Stop Bit */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N2 0x00001000            /*  Uart_Mode: 8 Data Bits No Parity   2 Stop Bits */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N3 0x00002000            /*  Uart_Mode: 8 Data Bits No Parity   3 Stop Bits */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E1 0x00004000            /*  Uart_Mode: 8 Data Bits Even Parity 1 Stop Bit */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E2 0x00005000            /*  Uart_Mode: 8 Data Bits Even Parity 2 Stop Bits */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E3 0x00006000            /*  Uart_Mode: 8 Data Bits Even Parity 3 Stop Bits */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O1 0x00008000            /*  Uart_Mode: 8 Data Bits Odd Parity  1 Stop Bit */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O2 0x00009000            /*  Uart_Mode: 8 Data Bits Odd Parity  2 Stop Bits */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O3 0x0000A000            /*  Uart_Mode: 8 Data Bits Odd Parity  3 Stop Bits */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_0 0x00000000            /*  SPI_Mode: Clock Polarity = 0 Clock Phase = 0 */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_1 0x00000400            /*  SPI_Mode: Clock Polarity = 0 Clock Phase = 1 */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_2 0x00000800            /*  SPI_Mode: Clock Polarity = 1 Clock Phase = 0 */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_3 0x00000C00            /*  SPI_Mode: Clock Polarity = 1 Clock Phase = 1 */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_115200 0x00000000            /*  Uart_Baud: 115200 bps */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_57600 0x00000080            /*  Uart_Baud: 57600 bps */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_38400 0x00000100            /*  Uart_Baud: 38400 bps */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_19200 0x00000180            /*  Uart_Baud: 19200 bps */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_9600 0x00000200            /*  Uart_Baud: 9600 bps */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_4800 0x00000280            /*  Uart_Baud: 4800 bps */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_2400 0x00000300            /*  Uart_Baud: 2400 bps */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_1200 0x00000380            /*  Uart_Baud: 1200 bps */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_100K 0x00000000            /*  I2C_Clock: 100kHz SCL */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_400K 0x00000020            /*  I2C_Clock: 400kHz SCL */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_RESERVED1 0x00000040            /*  I2C_Clock: Reserved */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_RESERVED2 0x00000060            /*  I2C_Clock: Reserved */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_13MHZ 0x00000000            /*  SPI_Clock: 13 MHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_6_5MHZ 0x00000002            /*  SPI_Clock: 6.5 MHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_3_25MHZ 0x00000004            /*  SPI_Clock: 3.25 MHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_1_625MHZ 0x00000006            /*  SPI_Clock: 1.625 MHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_812KHZ 0x00000008            /*  SPI_Clock: 812.5kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_406KHZ 0x0000000A            /*  SPI_Clock: 406.2kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_203KHZ 0x0000000C            /*  SPI_Clock: 203.1kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_101KHZ 0x0000000E            /*  SPI_Clock: 101.5kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_50KHZ 0x00000010            /*  SPI_Clock: 50.8kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_25KHZ 0x00000012            /*  SPI_Clock: 25.4kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_12KHZ 0x00000014            /*  SPI_Clock: 12.7kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_6KHZ 0x00000016            /*  SPI_Clock: 6.3kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_3KHZ 0x00000018            /*  SPI_Clock: 3.2kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_1_5KHZ 0x0000001A            /*  SPI_Clock: 1.58kHz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_793HZ 0x0000001C            /*  SPI_Clock: 793Hz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_396HZ 0x0000001E            /*  SPI_Clock: 396Hz */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_DIGITAL_COMMS_DEFAULT 0x00000000            /*  Digital_Sensor_Comms_En: Default Parameters Used for Digital Sensor Communications */
+#define ENUM_ADISENSE_CORE_DIGITAL_SENSOR_COMMS_DIGITAL_COMMS_USER 0x00000001            /*  Digital_Sensor_Comms_En: User Supplied Parameters Used for Digital Sensor Communications */
+
+/* -------------------------------------------------------------------------------------------------------------------------
           ADISENSE_CORE_DIGITAL_SENSOR_COMMAND1[n] Pos/Masks         Description
    ------------------------------------------------------------------------------------------------------------------------- */
 #define BITP_ADISENSE_CORE_DIGITAL_SENSOR_COMMAND1_DIGITAL_SENSOR_COMMAND1  0            /*  Configuration Command to Send to Digital I2C/SPI Sensor */
@@ -1586,4 +2285,3 @@
 
 
 #endif	/* end ifndef _DEF_ADISENSE1000_REGISTERS_H */
-
--- a/src/adi_sense_1000/ADISENSE1000_REGISTERS_typedefs.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/adi_sense_1000/ADISENSE1000_REGISTERS_typedefs.h	Thu May 17 10:34:45 2018 +0100
@@ -4,7 +4,7 @@
      File         :   ADISENSE1000_REGISTERS_typedefs.h
      Description  :   C Register Structures
 
-     Date         :   Feb 27, 2018
+     Date         :   May 9, 2018
 
      Copyright (c) 2018 Analog Devices, Inc.  All Rights Reserved.
      This software is proprietary and confidential to Analog Devices, Inc. and
@@ -447,17 +447,27 @@
  *  ========================================================================= */
 typedef enum
 {
-  ADISENSE_CORE_COMMAND_NOP              = 0,   /**< No Command                                    */
-  ADISENSE_CORE_COMMAND_CONVERT          = 1,   /**< Start ADC Conversions                         */
-  ADISENSE_CORE_COMMAND_CONVERT_WITH_RAW = 2,   /**< Start Conversions with Added RAW ADC Data     */
-  ADISENSE_CORE_COMMAND_RUN_DIAGNOSTICS  = 3,   /**< Initiate a Diagnostics Cycle                  */
-  ADISENSE_CORE_COMMAND_SELF_CALIBRATION = 4,   /**< Initiate a Self-Calibration Cycle             */
-  ADISENSE_CORE_COMMAND_LOAD_CONFIG      = 5,   /**< Load Registers with Configuration from FLASH  */
-  ADISENSE_CORE_COMMAND_SAVE_CONFIG      = 6,   /**< Store Current Register Configuration to FLASH */
-  ADISENSE_CORE_COMMAND_LATCH_CONFIG     = 7,   /**< Latch Configuration.                          */
-  ADISENSE_CORE_COMMAND_LOAD_LUT         = 8,   /**< Load LUT from FLASH                           */
-  ADISENSE_CORE_COMMAND_SAVE_LUT         = 9,   /**< Save LUT to FLASH                             */
-  ADISENSE_CORE_COMMAND_SYSTEM_CHECK     = 10   /**< Full Suite of Measurement Diagnostics         */
+  ADISENSE_CORE_COMMAND_NOP                  = 0,   /**< No Command                                                        */
+  ADISENSE_CORE_COMMAND_CONVERT              = 1,   /**< Start ADC Conversions                                             */
+  ADISENSE_CORE_COMMAND_CONVERT_WITH_RAW     = 2,   /**< Start Conversions with Added RAW ADC Data                         */
+  ADISENSE_CORE_COMMAND_RUN_DIAGNOSTICS      = 3,   /**< Initiate a Diagnostics Cycle                                      */
+  ADISENSE_CORE_COMMAND_SELF_CALIBRATION     = 4,   /**< Initiate a Self-Calibration Cycle                                 */
+  ADISENSE_CORE_COMMAND_LATCH_CONFIG         = 7,   /**< Latch Configuration.                                              */
+  ADISENSE_CORE_COMMAND_LOAD_LUT             = 8,   /**< Load LUT from FLASH                                               */
+  ADISENSE_CORE_COMMAND_SAVE_LUT             = 9,   /**< Save LUT to FLASH                                                 */
+  ADISENSE_CORE_COMMAND_SYSTEM_CHECK         = 10,  /**< Full Suite of Measurement Diagnostics                             */
+  ADISENSE_CORE_COMMAND_CONVERT_FFT          = 11,  /**< Perform FFTs on Selected Channel(s)                               */
+  ADISENSE_CORE_COMMAND_ERASE_EXTERNAL_FLASH = 16,  /**< Erase Contents of External Flash                                  */
+  ADISENSE_CORE_COMMAND_POWER_DOWN           = 20,  /**< Enter Low Power State                                             */
+  ADISENSE_CORE_COMMAND_LOAD_CONFIG_1        = 24,  /**< Load Registers with Configuration#1 from FLASH                    */
+  ADISENSE_CORE_COMMAND_SAVE_CONFIG_1        = 25,  /**< Store Current Registers to FLASH Configuration#1                  */
+  ADISENSE_CORE_COMMAND_LOAD_CONFIG_2        = 26,  /**< Load Registers with Configuration#2 from FLASH                    */
+  ADISENSE_CORE_COMMAND_SAVE_CONFIG_2        = 27,  /**< Store Current Registers to FLASH Configuration#2                  */
+  ADISENSE_CORE_COMMAND_LOAD_CONFIG_3        = 28,  /**< Load Registers with Configuration#3 from FLASH                    */
+  ADISENSE_CORE_COMMAND_SAVE_CONFIG_3        = 29,  /**< Store Current Registers to FLASH Configuration#3                  */
+  ADISENSE_CORE_COMMAND_LOAD_CONFIG_4        = 30,  /**< Load Registers with Configuration#4 from FLASH                    */
+  ADISENSE_CORE_COMMAND_SAVE_CONFIG_4        = 31,  /**< Store Current Registers to FLASH Configuration#4                  */
+  ADISENSE_CORE_COMMAND_CALIBRATE_DIGITAL    = 32   /**< Performs a Calibration of Digital Sensor, if Supported & Enabled. */
 } ADI_ADISENSE_CORE_Command_Special_Command;
 
 
@@ -499,12 +509,45 @@
  *  ========================================================================= */
 typedef enum
 {
-  ADISENSE_CORE_MODE_DRDY_PER_CONVERSION = 0,  /**< Data Ready Per Conversion */
-  ADISENSE_CORE_MODE_DRDY_PER_CYCLE      = 1,  /**< Data Ready Per Cycle      */
-  ADISENSE_CORE_MODE_DRDY_PER_FIFO_FILL  = 2   /**< Data Ready Per FIFO Fill  */
+  ADISENSE_CORE_MODE_DRDY_PER_CONVERSION = 0,  /**< Data Ready Per Conversion                    */
+  ADISENSE_CORE_MODE_DRDY_PER_CYCLE      = 1,  /**< Data Ready Per Cycle                         */
+  ADISENSE_CORE_MODE_DRDY_PER_FIFO_FILL  = 2   /**< Data Ready Per FIFO Fill / Multi-Cycle Burst */
 } ADI_ADISENSE_CORE_Mode_Drdy_Mode;
 
 
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Mode_Calibration_Method
+ *! \brief  Indicates If Calibration is Required on 'Latch' Command (Calibration_Method) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_MODE_NO_CAL = 0,  /**< No Calibration Performed */
+  ADISENSE_CORE_MODE_DO_CAL = 1   /**< Calibration Performed    */
+} ADI_ADISENSE_CORE_Mode_Calibration_Method;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Mode_FFT_Mode
+ *! \brief  Indicates Single or Multiple Sequence of FFTs (FFT_Mode) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_MODE_FFT_MODE_SINGLE     = 0,  /**< Perform Single Sequence of FFT(s) on Selected Channel(s)   */
+  ADISENSE_CORE_MODE_FFT_MODE_CONTINUOUS = 1   /**< Perform Continuous Sequence of FFTs on Selected Channel(s) */
+} ADI_ADISENSE_CORE_Mode_FFT_Mode;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Mode_Ext_Flash_Store
+ *! \brief  Indicates If Measurement Data Should Be Stored in Flash (Ext_Flash_Store) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_MODE_EXT_FLASH_NOT_USED = 0,  /**< Do Not Use External Flash */
+  ADISENSE_CORE_MODE_EXT_FLASH_USED     = 1   /**< Use External Flash        */
+} ADI_ADISENSE_CORE_Mode_Ext_Flash_Store;
+
+
 /* ==========================================================================
  *! \struct ADI_ADISENSE_CORE_Mode_Struct
  *! \brief  Operating Mode and DRDY Control Register bit field structure
@@ -514,7 +557,10 @@
     struct {
       uint8_t Conversion_Mode :  2;  /**< Conversion Mode */
       uint8_t Drdy_Mode       :  2;  /**< Indicates Behavior of DRDY with Respect to FIFO State */
-      uint8_t reserved4       :  4;
+      uint8_t Calibration_Method :  1;  /**< Indicates If Calibration is Required on 'Latch' Command */
+      uint8_t FFT_Mode           :  1;  /**< Indicates Single or Multiple Sequence of FFTs */
+      uint8_t reserved6          :  1;
+      uint8_t Ext_Flash_Store    :  1;  /**< Indicates If Measurement Data Should Be Stored in Flash */
     };
     uint8_t VALUE8;
   };
@@ -547,9 +593,7 @@
   union {
     struct {
       uint8_t Power_Mode_ADC :  2;  /**< ADC Power Mode */
-      uint8_t reserved2      :  2;
-      uint8_t Stdby_En       :  1;  /**< Standby */
-      uint8_t reserved5      :  3;
+      uint8_t reserved2      :  6;
     };
     uint8_t VALUE8;
   };
@@ -563,6 +607,17 @@
  */
 
 /*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Cycle_Control_Cycle_Type
+ *! \brief  Type of Measurement Cycle (Cycle_Type) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TYPE_SWITCH = 0,  /**< Switch Channels After Every Conversion                        */
+  ADISENSE_CORE_CYCLE_CONTROL_CYCLE_TYPE_FULL   = 1   /**< Perform Full Number Of Conversions On A Channel Consecutively */
+} ADI_ADISENSE_CORE_Cycle_Control_Cycle_Type;
+
+
+/*  =========================================================================
  *! \enum   ADI_ADISENSE_CORE_Cycle_Control_Cycle_Time_Units
  *! \brief  Units for Cycle Time (Cycle_Time_Units) Enumerations
  *  ========================================================================= */
@@ -582,7 +637,8 @@
   union {
     struct {
       uint16_t Cycle_Time : 12;  /**< Duration of a Full Measurement Cycle */
-      uint16_t reserved12       :  2;
+      uint16_t Cycle_Type :  1;  /**< Type of Measurement Cycle */
+      uint16_t reserved13       :  1;
       uint16_t Cycle_Time_Units :  2;  /**< Units for Cycle Time */
     };
     uint16_t VALUE16;
@@ -674,11 +730,7 @@
       uint16_t Diag_Comms_Error    :  1;  /**< Indicates Error on Internal Device Communications */
       uint16_t Diag_Supply_Monitor_Error :  1;  /**< Indicates Low Voltage on Internal Supply Voltages */
       uint16_t Diag_Supply_Cap_Error     :  1;  /**< Indicates Fault on Internal Supply Regulator Capacitor */
-      uint16_t reserved4                 :  4;
-      uint16_t Diag_Ainm_UV_Error        :  1;  /**< Indicates Under-Voltage Error on Negative Analog Input */
-      uint16_t Diag_Ainm_OV_Error        :  1;  /**< Indicates Over-Voltage Error on Negative Analog Input */
-      uint16_t Diag_Ainp_UV_Error        :  1;  /**< Indicates Under-Voltage Error on Positive Analog Input */
-      uint16_t Diag_Ainp_OV_Error        :  1;  /**< Indicates Over-Voltage Error on Positive Analog Input */
+      uint16_t reserved4                 :  8;
       uint16_t Diag_Conversion_Error     :  1;  /**< Indicates Error During Internal ADC Conversions */
       uint16_t Diag_Calibration_Error    :  1;  /**< Indicates Error During Internal Device Calibrations */
       uint16_t reserved14                :  2;
@@ -714,7 +766,9 @@
       uint16_t Alert_Ch10 :  1;  /**< Indicates Channel Alert is Active */
       uint16_t Alert_Ch11 :  1;  /**< Indicates Channel Alert is Active */
       uint16_t Alert_Ch12 :  1;  /**< Indicates Channel Alert is Active */
-      uint16_t reserved13 :  3;
+      uint16_t Alert_Ch13 :  1;  /**< Indicates Channel Alert is Active */
+      uint16_t Alert_Ch14 :  1;  /**< Indicates Channel Alert is Active */
+      uint16_t Alert_Ch15 :  1;  /**< Indicates Channel Alert is Active */
     };
     uint16_t VALUE16;
   };
@@ -737,7 +791,12 @@
       uint16_t reserved0  :  1;
       uint16_t LUT_Error  :  1;  /**< Indicates Error with One or More Look-Up-Tables */
       uint16_t Configuration_Error :  1;  /**< Indicates Error with Programmed Configuration */
-      uint16_t reserved3           : 13;
+      uint16_t Temperature_Alert_Hi :  1;  /**< Indicates Device Temperature High Alert */
+      uint16_t Temperature_Alert_Lo :  1;  /**< Indicates Device Temperature Low Alert */
+      uint16_t Temperature_Alarm_Hi :  1;  /**< Indicates Device Temperature High Alarm */
+      uint16_t Temperature_Alarm_Lo :  1;  /**< Indicates Device Temperature Low Alarm */
+      uint16_t Ext_Flash_Error      :  1;  /**< Indicates Error with External Flash Memory */
+      uint16_t reserved8            :  8;
     };
     uint16_t VALUE16;
   };
@@ -764,11 +823,11 @@
       uint16_t High_Limit  :  1;  /**< Indicates Sensor Result is Greater Than High Limit */
       uint16_t Sensor_Open :  1;  /**< Indicates Sensor Input is Open Circuit */
       uint16_t Ref_Detect  :  1;  /**< Indicates Whether ADC Reference is Valid */
-      uint16_t reserved7   :  1;
-      uint16_t Config_Err  :  1;  /**< Indicates Configuration Error on Channel */
-      uint16_t LUT_Error_Ch :  1;  /**< Indicates Error with Channel Look-Up-Table */
-      uint16_t Under_Voltage :  1;  /**< Indicates Channel Under-Voltage */
-      uint16_t Over_Voltage  :  1;  /**< Indicates Channel Over-Voltage */
+      uint16_t Calibration_Invalid :  1;  /**< Indicates Problem During Calibration of Channel */
+      uint16_t Config_Err          :  1;  /**< Indicates Configuration Error on Channel */
+      uint16_t LUT_Error_Ch        :  1;  /**< Indicates Error with Channel Look-Up-Table */
+      uint16_t Under_Voltage       :  1;  /**< Indicates Channel Under-Voltage */
+      uint16_t Over_Voltage        :  1;  /**< Indicates Channel Over-Voltage */
       uint16_t Correction_UnderRange :  1;  /**< Indicates Result Less Than LUT/Equation Range */
       uint16_t Correction_OverRange  :  1;  /**< Indicates Result Larger Than LUT/Equation Range */
       uint16_t Sensor_Not_Ready      :  1;  /**< Indicates Digital Sensor Not Ready When Read */
@@ -896,32 +955,121 @@
 
 /*@}*/
 
-/** @defgroup Data_FIFO FIFO of Sensor Results (Data_FIFO) Register
- *  FIFO of Sensor Results (Data_FIFO) Register.
+/** @defgroup Data_FIFO FIFO Buffer of Sensor Results (Data_FIFO) Register
+ *  FIFO Buffer of Sensor Results (Data_FIFO) Register.
  *  @{
  */
 
 /* ==========================================================================
  *! \struct ADI_ADISENSE_CORE_Data_FIFO_Struct
- *! \brief  FIFO of Sensor Results Register bit field structure
+ *! \brief  FIFO Buffer of Sensor Results Register bit field structure
  * ========================================================================== */
 typedef struct _ADI_ADISENSE_CORE_Data_FIFO_t {
   union {
     struct {
-      float32_t Sensor_Result;      /**< Linearized and Compensated Sensor Result */
-      uint32_t Channel_ID    :  4;  /**< Indicates Which Channel This FIFO Data Corresponds to */
-      uint32_t Ch_Error      :  1;  /**< Indicates Error on Channel */
-      uint32_t Ch_Alert      :  1;  /**< Indicates Alert on Channel */
-      uint32_t Ch_Raw        :  1;  /**< Indicates If RAW Data is Valid */
-      uint32_t Ch_Valid      :  1;  /**< Indicates Whether Valid Data Read from FIFO */
-      uint32_t Raw_Sample    : 24;  /**< ADC Result */
+      uint8_t Data_Fifo  :  8;  /**< Fifo Buffer of Sensor Results */
     };
-    uint64_t VALUE64;
+    uint8_t VALUE8;
   };
 } ADI_ADISENSE_CORE_Data_FIFO_t;
 
 /*@}*/
 
+/** @defgroup FFT_Config FFT Configuration (FFT_Config) Register
+ *  FFT Configuration (FFT_Config) Register.
+ *  @{
+ */
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_FFT_Config_FFT_Num_Bins
+ *! \brief  Indicates Number of Bins in FFT (FFT_Num_Bins) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_FFT_CONFIG_FFT_BINS_256  = 0,  /**< FFT Size 256  */
+  ADISENSE_CORE_FFT_CONFIG_FFT_BINS_512  = 1,  /**< FFT Size 512  */
+  ADISENSE_CORE_FFT_CONFIG_FFT_BINS_1024 = 2,  /**< FFT Size 1024 */
+  ADISENSE_CORE_FFT_CONFIG_FFT_BINS_2048 = 3   /**< FFT Size 2048 */
+} ADI_ADISENSE_CORE_FFT_Config_FFT_Num_Bins;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_FFT_Config_FFT_Window
+ *! \brief  Indicates Window Type for FFT (FFT_Window) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_NONE             = 0,  /**< No Window                      */
+  ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_HANN             = 1,  /**< Hann Window                    */
+  ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_BLACKMANN_HARRIS = 2,  /**< Blackman-Harris-Nuttall Window */
+  ADISENSE_CORE_FFT_CONFIG_FFT_WINDOW_TBD              = 3   /**< Reserved                       */
+} ADI_ADISENSE_CORE_FFT_Config_FFT_Window;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_FFT_Config_FFT_Output
+ *! \brief  Indicates FFT Output Format (FFT_Output) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_FULL          = 0,  /**< N/2-Term Amplitude Response                                        */
+  ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_MAX16         = 1,  /**< Bin-Number and Amplitude of 16 Highest Peaks of Amplitude Response */
+  ADISENSE_CORE_FFT_CONFIG_FFT_OUTPUT_FULL_WITH_RAW = 2   /**< N/2-Term Amplitude Response Plus N Raw ADC Samples                 */
+} ADI_ADISENSE_CORE_FFT_Config_FFT_Output;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_FFT_Config_FFT_Num_Channels
+ *! \brief  Indicates Number of Channels for FFT (FFT_Num_Channels) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_FFT_CONFIG_FFT_CHANS_1 = 0,  /**< One FFT Channel    */
+  ADISENSE_CORE_FFT_CONFIG_FFT_CHANS_2 = 1,  /**< Two FFT Channels   */
+  ADISENSE_CORE_FFT_CONFIG_FFT_CHANS_3 = 2,  /**< Three FFT Channels */
+  ADISENSE_CORE_FFT_CONFIG_FFT_CHANS_4 = 3   /**< Four FFT Channels  */
+} ADI_ADISENSE_CORE_FFT_Config_FFT_Num_Channels;
+
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_FFT_Config_Struct
+ *! \brief  FFT Configuration Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_FFT_Config_t {
+  union {
+    struct {
+      uint32_t FFT_Num_Bins :  2;  /**< Indicates Number of Bins in FFT */
+      uint32_t FFT_Window   :  2;  /**< Indicates Window Type for FFT */
+      uint32_t FFT_Output   :  2;  /**< Indicates FFT Output Format */
+      uint32_t FFT_Num_Channels :  2;  /**< Indicates Number of Channels for FFT */
+      uint32_t reserved8        : 24;
+    };
+    uint32_t VALUE32;
+  };
+} ADI_ADISENSE_CORE_FFT_Config_t;
+
+/*@}*/
+
+/** @defgroup Advanced_Sensor_Access Enables Access to Advanced Sensor Configuration (Advanced_Sensor_Access) Register
+ *  Enables Access to Advanced Sensor Configuration (Advanced_Sensor_Access) Register.
+ *  @{
+ */
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Advanced_Sensor_Access_Struct
+ *! \brief  Enables Access to Advanced Sensor Configuration Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Advanced_Sensor_Access_t {
+  union {
+    struct {
+      uint16_t Advanced_Sensor_Access : 16;  /**< Write Specific Key Value to Access Advanced Sensors */
+    };
+    uint16_t VALUE16;
+  };
+} ADI_ADISENSE_CORE_Advanced_Sensor_Access_t;
+
+/*@}*/
+
 /** @defgroup LUT_Select Read/Write Strobe (LUT_Select) Register
  *  Read/Write Strobe (LUT_Select) Register.
  *  @{
@@ -995,6 +1143,66 @@
 
 /*@}*/
 
+/** @defgroup Ext_Flash_Index Start Position (Sample No.) for Retrieval of Ext. Flash Data (Ext_Flash_Index) Register
+ *  Start Position (Sample No.) for Retrieval of Ext. Flash Data (Ext_Flash_Index) Register.
+ *  @{
+ */
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Ext_Flash_Index_Struct
+ *! \brief  Start Position (Sample No.) for Retrieval of Ext. Flash Data Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Ext_Flash_Index_t {
+  union {
+    struct {
+      uint32_t Ext_Flash_Index : 32;  /**< Start Position (Sample No.) for Retrieval of Ext. Flash Data */
+    };
+    uint32_t VALUE32;
+  };
+} ADI_ADISENSE_CORE_Ext_Flash_Index_t;
+
+/*@}*/
+
+/** @defgroup Ext_Flash_Sample_Count Indicates How Many Samples Stored in External Flash (Ext_Flash_Sample_Count) Register
+ *  Indicates How Many Samples Stored in External Flash (Ext_Flash_Sample_Count) Register.
+ *  @{
+ */
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Ext_Flash_Sample_Count_Struct
+ *! \brief  Indicates How Many Samples Stored in External Flash Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Ext_Flash_Sample_Count_t {
+  union {
+    struct {
+      uint32_t Ext_Flash_Sample_Count : 32;  /**< Indicates How Many Samples Stored in External Flash */
+    };
+    uint32_t VALUE32;
+  };
+} ADI_ADISENSE_CORE_Ext_Flash_Sample_Count_t;
+
+/*@}*/
+
+/** @defgroup Ext_Flash_Data Data Read Back from External Flash (Ext_Flash_Data) Register
+ *  Data Read Back from External Flash (Ext_Flash_Data) Register.
+ *  @{
+ */
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Ext_Flash_Data_Struct
+ *! \brief  Data Read Back from External Flash Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Ext_Flash_Data_t {
+  union {
+    struct {
+      uint8_t Ext_Flash_Data :  8;  /**< Data Read Back from External Flash */
+    };
+    uint8_t VALUE8;
+  };
+} ADI_ADISENSE_CORE_Ext_Flash_Data_t;
+
+/*@}*/
+
 /** @defgroup Revision Hardware, Firmware Revision (Revision) Register
  *  Hardware, Firmware Revision (Revision) Register.
  *  @{
@@ -1007,10 +1215,9 @@
 typedef struct _ADI_ADISENSE_CORE_Revision_t {
   union {
     struct {
-      uint32_t Firmware_Revision :  8;  /**< ID Info */
-      uint32_t Hardware_Revision :  8;  /**< ID Info */
-      uint32_t Comms_Protocol    :  8;  /**< ID Info */
-      uint32_t reserved24        :  8;
+      uint32_t Rev_Patch  : 16;  /**< Patch Revision Information */
+      uint32_t Rev_Minor  :  8;  /**< Minor Revision Information */
+      uint32_t Rev_Major  :  8;  /**< Major Revision Information */
     };
     uint32_t VALUE32;
   };
@@ -1039,6 +1246,39 @@
 
 /*@}*/
 
+/** @defgroup Channel_Options Position of Channel Within Sequence and Enable for FFT (Channel_Options) Register
+ *  Position of Channel Within Sequence and Enable for FFT (Channel_Options) Register.
+ *  @{
+ */
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Channel_Options_FFT_Enable_Ch
+ *! \brief  Indicates Channel to Be Used for FFT (FFT_Enable_Ch) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_CHANNEL_OPTIONS_NO_FFT = 0,  /**< FFT Will not be Performed on This Channel */
+  ADISENSE_CORE_CHANNEL_OPTIONS_DO_FFT = 1   /**< FFT Will be Performed on This Channel     */
+} ADI_ADISENSE_CORE_Channel_Options_FFT_Enable_Ch;
+
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Channel_Options_Struct
+ *! \brief  Position of Channel Within Sequence and Enable for FFT Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Channel_Options_t {
+  union {
+    struct {
+      uint8_t Channel_Priority :  4;  /**< Indicates Priority or Position of This Channel in Sequence */
+      uint8_t reserved4        :  3;
+      uint8_t FFT_Enable_Ch    :  1;  /**< Indicates Channel to Be Used for FFT */
+    };
+    uint8_t VALUE8;
+  };
+} ADI_ADISENSE_CORE_Channel_Options_t;
+
+/*@}*/
+
 /** @defgroup Sensor_Type Sensor Select (Sensor_Type) Register
  *  Sensor Select (Sensor_Type) Register.
  *  @{
@@ -1050,97 +1290,164 @@
  *  ========================================================================= */
 typedef enum
 {
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_T_DEF_L1                   = 0,     /**< Thermocouple T-Type Sensor Defined Level 1       */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_J_DEF_L1                   = 1,     /**< Thermocouple J-Type Sensor Defined Level 1       */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_K_DEF_L1                   = 2,     /**< Thermocouple K-Type Sensor Defined Level 1       */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_1_DEF_L2                   = 12,    /**< Thermocouple Sensor 1 Defined Level 2            */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_2_DEF_L2                   = 13,    /**< Thermocouple Sensor 2 Defined Level 2            */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_3_DEF_L2                   = 14,    /**< Thermocouple Sensor 3 Defined Level 2            */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_4_DEF_L2                   = 15,    /**< Thermocouple Sensor 4 Defined Level 2            */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_T_ADV_L1                   = 16,    /**< Thermocouple T-Type Sensor Advanced Level 1      */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_J_ADV_L1                   = 17,    /**< Thermocouple J-Type Sensor Advanced Level 1      */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_K_ADV_L1                   = 18,    /**< Thermocouple K-Type Sensor Advanced Level 1      */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_1_ADV_L2                   = 28,    /**< Thermocouple Sensor 1 Advanced Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_2_ADV_L2                   = 29,    /**< Thermocouple Sensor 2 Advanced Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_3_ADV_L2                   = 30,    /**< Thermocouple Sensor 3 Advanced Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_4_ADV_L2                   = 31,    /**< Thermocouple Sensor 4 Advanced Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT100_DEF_L1                     = 32,    /**< RTD 2 Wire PT100 Sensor Defined Level 1          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT1000_DEF_L1                    = 33,    /**< RTD 2 Wire PT1000 Sensor Defined Level 1         */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_1_DEF_L2                         = 44,    /**< RTD 2 Wire Sensor 1 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_2_DEF_L2                         = 45,    /**< RTD 2 Wire Sensor 2 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_3_DEF_L2                         = 46,    /**< RTD 2 Wire Sensor 3 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_4_DEF_L2                         = 47,    /**< RTD 2 Wire Sensor 4 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT100_ADV_L1                     = 48,    /**< RTD 2 Wire PT100 Sensor Advanced Level 1         */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT1000_ADV_L1                    = 49,    /**< RTD 2 Wire PT1000 Sensor Advanced Level 1        */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_1_ADV_L2                         = 60,    /**< RTD 2 Wire Sensor 1 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_2_ADV_L2                         = 61,    /**< RTD 2 Wire Sensor 2 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_3_ADV_L2                         = 62,    /**< RTD 2 Wire Sensor 3 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_4_ADV_L2                         = 63,    /**< RTD 2 Wire Sensor 4 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT100_DEF_L1                     = 64,    /**< RTD 3 Wire PT100 Sensor Defined Level 1          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT1000_DEF_L1                    = 65,    /**< RTD 3 Wire PT1000 Sensor Defined Level 1         */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_1_DEF_L2                         = 76,    /**< RTD 3 Wire Sensor 1 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_2_DEF_L2                         = 77,    /**< RTD 3 Wire Sensor 2 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_3_DEF_L2                         = 78,    /**< RTD 3 Wire Sensor 3 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_4_DEF_L2                         = 79,    /**< RTD 3 Wire Sensor 4 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT100_ADV_L1                     = 80,    /**< RTD 3 Wire PT100 Sensor Advanced Level 1         */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT1000_ADV_L1                    = 81,    /**< RTD 3 Wire PT1000 Sensor Advanced Level 1        */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_1_ADV_L2                         = 92,    /**< RTD 3 Wire Sensor 1 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_2_ADV_L2                         = 93,    /**< RTD 3 Wire Sensor 2 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_3_ADV_L2                         = 94,    /**< RTD 3 Wire Sensor 3 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_4_ADV_L2                         = 95,    /**< RTD 3 Wire Sensor 4 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT100_DEF_L1                     = 96,    /**< RTD 4 Wire PT100 Sensor Defined Level 1          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT1000_DEF_L1                    = 97,    /**< RTD 4 Wire PT1000 Sensor Defined Level 1         */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_1_DEF_L2                         = 108,   /**< RTD 4 Wire Sensor 1 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_2_DEF_L2                         = 109,   /**< RTD 4 Wire Sensor 2 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_3_DEF_L2                         = 110,   /**< RTD 4 Wire Sensor 3 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_4_DEF_L2                         = 111,   /**< RTD 4 Wire Sensor 4 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT100_ADV_L1                     = 112,   /**< RTD 4 Wire PT100 Sensor Advanced Level 1         */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT1000_ADV_L1                    = 113,   /**< RTD 4 Wire PT1000 Sensor Advanced Level 1        */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_1_ADV_L2                         = 124,   /**< RTD 4 Wire Sensor 1 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_2_ADV_L2                         = 125,   /**< RTD 4 Wire Sensor 2 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_3_ADV_L2                         = 126,   /**< RTD 4 Wire Sensor 3 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_4_ADV_L2                         = 127,   /**< RTD 4 Wire Sensor 4 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_A_10K_DEF_L1                 = 128,   /**< Thermistor Type A 10kOhm Sensor Defined Level 1  */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_B_10K_DEF_L1                 = 129,   /**< Thermistor Type B 10kOhm Sensor Defined Level 1  */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_1_DEF_L2                     = 140,   /**< Thermistor Sensor 1 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_2_DEF_L2                     = 141,   /**< Thermistor Sensor 2 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_3_DEF_L2                     = 142,   /**< Thermistor Sensor 3 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_4_DEF_L2                     = 143,   /**< Thermistor Sensor 4 Defined Level 2              */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_A_10K_ADV_L1                 = 144,   /**< Thermistor Type A 10kOhm Sensor Advanced Level 1 */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_B_10K_ADV_L1                 = 145,   /**< Thermistor Type B 10kOhm Sensor Advanced Level 1 */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_1_ADV_L2                     = 156,   /**< Thermistor Sensor 1 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_2_ADV_L2                     = 157,   /**< Thermistor Sensor 2 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_3_ADV_L2                     = 158,   /**< Thermistor Sensor 3 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_4_ADV_L2                     = 159,   /**< Thermistor Sensor 4 Advanced Level 2             */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_1_DEF_L2                      = 160,   /**< Bridge 4 Wire Sensor 1 Defined Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_2_DEF_L2                      = 161,   /**< Bridge 4 Wire Sensor 2 Defined Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_3_DEF_L2                      = 162,   /**< Bridge 4 Wire Sensor 3 Defined Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_4_DEF_L2                      = 163,   /**< Bridge 4 Wire Sensor 4 Defined Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_1_ADV_L2                      = 176,   /**< Bridge 4 Wire Sensor 1 Advanced Level 2          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_2_ADV_L2                      = 177,   /**< Bridge 4 Wire Sensor 2 Advanced Level 2          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_3_ADV_L2                      = 178,   /**< Bridge 4 Wire Sensor 2 Advanced Level 2          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_4_ADV_L2                      = 179,   /**< Bridge 4 Wire Sensor 2 Advanced Level 2          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_1_DEF_L2                      = 192,   /**< Bridge 6 Wire Sensor 1 Defined Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_2_DEF_L2                      = 193,   /**< Bridge 6 Wire Sensor 2 Defined Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_3_DEF_L2                      = 194,   /**< Bridge 6 Wire Sensor 3 Defined Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_4_DEF_L2                      = 195,   /**< Bridge 6 Wire Sensor 4 Defined Level 2           */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_1_ADV_L2                      = 208,   /**< Bridge 6 Wire Sensor 1 Advanced Level 2          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_2_ADV_L2                      = 209,   /**< Bridge 6 Wire Sensor 2 Advanced Level 2          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_3_ADV_L2                      = 210,   /**< Bridge 6 Wire Sensor 3 Advanced Level 2          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_4_ADV_L2                      = 211,   /**< Bridge 6 Wire Sensor 4 Advanced Level 2          */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE                                 = 256,   /**< Voltage Input                                    */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_HONEYWELL_TRUSTABILITY = 272,   /**< Voltage Output Pressure Sensor 1                 */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_AMPHENOL_NPA300X       = 273,   /**< Voltage Output Pressure Sensor 2                 */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_3_DEF                  = 274,   /**< Voltage Output Pressure Sensor 3                 */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT                                 = 384,   /**< Current Input                                    */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_HONEYWELL_PX2          = 385,   /**< Current Output Pressure Sensor 1                 */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_2                      = 386,   /**< Current Output Pressure Sensor 2                 */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_1                          = 2048,  /**< I2C Pressure Sensor 1                            */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_HONEYWELL_HUMIDICON        = 2112,  /**< I2C Humidity Sensor 1                            */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_SENSIRION_SHT3X            = 2113,  /**< I2C Humidity Sensor 2                            */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_HONEYWELL_TRUSTABILITY     = 3072,  /**< SPI Pressure Sensor 1                            */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_1                          = 3136,  /**< SPI Humidity Sensor Type 1                       */
-  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_1                     = 3200   /**< SPI Accelerometer Sensor Type 1 3-Axis           */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_T_DEF_L1      = 0,     /**< Thermocouple T-Type Sensor Defined Level 1             */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_J_DEF_L1      = 1,     /**< Thermocouple J-Type Sensor Defined Level 1             */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_K_DEF_L1      = 2,     /**< Thermocouple K-Type Sensor Defined Level 1             */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_1_DEF_L2      = 8,     /**< Thermocouple Sensor 1 Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_2_DEF_L2      = 9,     /**< Thermocouple Sensor 2 Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_3_DEF_L2      = 10,    /**< Thermocouple Sensor 3 Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_4_DEF_L2      = 11,    /**< Thermocouple Sensor 4 Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_T_ADV_L1      = 16,    /**< Thermocouple T-Type Sensor Advanced Level 1            */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_J_ADV_L1      = 17,    /**< Thermocouple J-Type Sensor Advanced Level 1            */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_K_ADV_L1      = 18,    /**< Thermocouple K-Type Sensor Advanced Level 1            */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_1_ADV_L2      = 24,    /**< Thermocouple Sensor 1 Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_2_ADV_L2      = 25,    /**< Thermocouple Sensor 2 Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_3_ADV_L2      = 26,    /**< Thermocouple Sensor 3 Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMOCOUPLE_4_ADV_L2      = 27,    /**< Thermocouple Sensor 4 Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT100_DEF_L1        = 32,    /**< RTD 2 Wire PT100 Sensor Defined Level 1                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT1000_DEF_L1       = 33,    /**< RTD 2 Wire PT1000 Sensor Defined Level 1               */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_1_DEF_L2            = 40,    /**< RTD 2 Wire Sensor 1 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_2_DEF_L2            = 41,    /**< RTD 2 Wire Sensor 2 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_3_DEF_L2            = 42,    /**< RTD 2 Wire Sensor 3 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_4_DEF_L2            = 43,    /**< RTD 2 Wire Sensor 4 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT100_ADV_L1        = 48,    /**< RTD 2 Wire PT100 Sensor Advanced Level 1               */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_PT1000_ADV_L1       = 49,    /**< RTD 2 Wire PT1000 Sensor Advanced Level 1              */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_1_ADV_L2            = 56,    /**< RTD 2 Wire Sensor 1 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_2_ADV_L2            = 57,    /**< RTD 2 Wire Sensor 2 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_3_ADV_L2            = 58,    /**< RTD 2 Wire Sensor 3 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_2W_4_ADV_L2            = 59,    /**< RTD 2 Wire Sensor 4 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT100_DEF_L1        = 64,    /**< RTD 3 Wire PT100 Sensor Defined Level 1                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT1000_DEF_L1       = 65,    /**< RTD 3 Wire PT1000 Sensor Defined Level 1               */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_1_DEF_L2            = 72,    /**< RTD 3 Wire Sensor 1 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_2_DEF_L2            = 73,    /**< RTD 3 Wire Sensor 2 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_3_DEF_L2            = 74,    /**< RTD 3 Wire Sensor 3 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_4_DEF_L2            = 75,    /**< RTD 3 Wire Sensor 4 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT100_ADV_L1        = 80,    /**< RTD 3 Wire PT100 Sensor Advanced Level 1               */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_PT1000_ADV_L1       = 81,    /**< RTD 3 Wire PT1000 Sensor Advanced Level 1              */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_1_ADV_L2            = 88,    /**< RTD 3 Wire Sensor 1 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_2_ADV_L2            = 89,    /**< RTD 3 Wire Sensor 2 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_3_ADV_L2            = 90,    /**< RTD 3 Wire Sensor 3 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_3W_4_ADV_L2            = 91,    /**< RTD 3 Wire Sensor 4 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT100_DEF_L1        = 96,    /**< RTD 4 Wire PT100 Sensor Defined Level 1                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT1000_DEF_L1       = 97,    /**< RTD 4 Wire PT1000 Sensor Defined Level 1               */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_1_DEF_L2            = 104,   /**< RTD 4 Wire Sensor 1 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_2_DEF_L2            = 105,   /**< RTD 4 Wire Sensor 2 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_3_DEF_L2            = 106,   /**< RTD 4 Wire Sensor 3 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_4_DEF_L2            = 107,   /**< RTD 4 Wire Sensor 4 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT100_ADV_L1        = 112,   /**< RTD 4 Wire PT100 Sensor Advanced Level 1               */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_PT1000_ADV_L1       = 113,   /**< RTD 4 Wire PT1000 Sensor Advanced Level 1              */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_1_ADV_L2            = 120,   /**< RTD 4 Wire Sensor 1 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_2_ADV_L2            = 121,   /**< RTD 4 Wire Sensor 2 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_3_ADV_L2            = 122,   /**< RTD 4 Wire Sensor 3 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_RTD_4W_4_ADV_L2            = 123,   /**< RTD 4 Wire Sensor 4 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_A_10K_DEF_L1    = 128,   /**< Thermistor Type A 10kOhm Sensor Defined Level 1        */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_B_10K_DEF_L1    = 129,   /**< Thermistor Type B 10kOhm Sensor Defined Level 1        */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_1_DEF_L2        = 136,   /**< Thermistor Sensor 1 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_2_DEF_L2        = 137,   /**< Thermistor Sensor 2 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_3_DEF_L2        = 138,   /**< Thermistor Sensor 3 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_4_DEF_L2        = 139,   /**< Thermistor Sensor 4 Defined Level 2                    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_A_10K_ADV_L1    = 144,   /**< Thermistor Type A 10kOhm Sensor Advanced Level 1       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_B_10K_ADV_L1    = 145,   /**< Thermistor Type B 10kOhm Sensor Advanced Level 1       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_1_ADV_L2        = 152,   /**< Thermistor Sensor 1 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_2_ADV_L2        = 153,   /**< Thermistor Sensor 2 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_3_ADV_L2        = 154,   /**< Thermistor Sensor 3 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_THERMISTOR_4_ADV_L2        = 155,   /**< Thermistor Sensor 4 Advanced Level 2                   */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_1_DEF_L2         = 168,   /**< Bridge 4 Wire Sensor 1 Defined Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_2_DEF_L2         = 169,   /**< Bridge 4 Wire Sensor 2 Defined Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_3_DEF_L2         = 170,   /**< Bridge 4 Wire Sensor 3 Defined Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_4_DEF_L2         = 171,   /**< Bridge 4 Wire Sensor 4 Defined Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_1_ADV_L2         = 184,   /**< Bridge 4 Wire Sensor 1 Advanced Level 2                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_2_ADV_L2         = 185,   /**< Bridge 4 Wire Sensor 2 Advanced Level 2                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_3_ADV_L2         = 186,   /**< Bridge 4 Wire Sensor 2 Advanced Level 2                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_4W_4_ADV_L2         = 187,   /**< Bridge 4 Wire Sensor 2 Advanced Level 2                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_1_DEF_L2         = 200,   /**< Bridge 6 Wire Sensor 1 Defined Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_2_DEF_L2         = 201,   /**< Bridge 6 Wire Sensor 2 Defined Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_3_DEF_L2         = 202,   /**< Bridge 6 Wire Sensor 3 Defined Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_4_DEF_L2         = 203,   /**< Bridge 6 Wire Sensor 4 Defined Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_1_ADV_L2         = 216,   /**< Bridge 6 Wire Sensor 1 Advanced Level 2                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_2_ADV_L2         = 217,   /**< Bridge 6 Wire Sensor 2 Advanced Level 2                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_3_ADV_L2         = 218,   /**< Bridge 6 Wire Sensor 3 Advanced Level 2                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_BRIDGE_6W_4_ADV_L2         = 219,   /**< Bridge 6 Wire Sensor 4 Advanced Level 2                */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_2C_TYPEA_DEF_L1      = 224,   /**< Diode 2 Current Type A Sensor Defined Level 1          */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_3C_TYPEA_DEF_L1      = 225,   /**< Diode 3 Current Type A Sensor Defined Level 1          */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_2C_1_DEF_L2          = 232,   /**< Diode 2 Current Sensor 1 Defined Level 2               */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_3C_1_DEF_L2          = 233,   /**< Diode 3 Current Sensor 1 Defined Level 2               */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_2C_TYPEA_ADV_L1      = 240,   /**< Diode 2 Current Type A Sensor Advanced Level 1         */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_3C_TYPEA_ADV_L1      = 241,   /**< Diode 3 Current Type A Sensor Advanced Level 1         */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_2C_1_ADV_L2          = 248,   /**< Diode 2 Current Sensor 1 Advanced Level 2              */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_DIODE_3C_1_ADV_L2          = 249,   /**< Diode 3 Current Sensor 1 Advanced Level 2              */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_A_DEF_L1        = 256,   /**< Microphone With No External Amplifier Defined Level 1  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_B_DEF_L1        = 257,   /**< Microphone With External Amplifier Defined Level 1     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_1_DEF_L2        = 264,   /**< Microphone With No External Amplifier Defined Level 2  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_2_DEF_L2        = 265,   /**< Microphone With External Amplifier Defined Level 2     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_A_ADV_L1        = 272,   /**< Microphone With No External Amplifier Advanced Level 1 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_B_ADV_L1        = 273,   /**< Microphone With External Amplifier Advanced Level 1    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_1_ADV_L2        = 278,   /**< Microphone With No External Amplifier Advanced Level 2 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_MICROPHONE_2_ADV_L2        = 279,   /**< Microphone With External Amplifier Advanced Level 2    */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE                    = 512,   /**< Voltage Input                                          */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_A_DEF_L1  = 544,   /**< Voltage Output Pressure Sensor A Defined Level 1       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_B_DEF_L1  = 545,   /**< Voltage Output Pressure Sensor B Defined Level 1       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_1_DEF_L2  = 552,   /**< Voltage Output Pressure Sensor 1 Defined Level 2       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_2_DEF_L2  = 553,   /**< Voltage Output Pressure Sensor 2 Defined Level 2       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_A_ADV_L1  = 560,   /**< Voltage Output Pressure Sensor A Advanced Level 1      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_B_ADV_L1  = 561,   /**< Voltage Output Pressure Sensor B Advanced Level 1      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_1_ADV_L2  = 568,   /**< Voltage Output Pressure Sensor 1 Advanced Level 2      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_VOLTAGE_PRESSURE_2_ADV_L2  = 569,   /**< Voltage Output Pressure Sensor 2 Advanced Level 2      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT                    = 768,   /**< Current Input                                          */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_A_DEF_L1  = 800,   /**< Current Output Pressure Sensor A Defined Level 1       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_1_DEF_L2  = 808,   /**< Current Output Pressure Sensor 1 Defined Level 2       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_2_DEF_L2  = 809,   /**< Current Output Pressure Sensor 2 Defined Level 2       */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_A_ADV_L1  = 816,   /**< Current Output Pressure Sensor A Advanced Level 1      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_1_ADV_L2  = 824,   /**< Current Output Pressure Sensor 1 Advanced Level 2      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_CURRENT_PRESSURE_2_ADV_L2  = 825,   /**< Current Output Pressure Sensor 2 Advanced Level 2      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_A_DEF_L1      = 2048,  /**< I2C Pressure Sensor A Defined Level 1                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_B_DEF_L1      = 2049,  /**< I2C Pressure Sensor B Defined Level 1                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_A_DEF_L2      = 2056,  /**< I2C Pressure Sensor A Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_B_DEF_L2      = 2057,  /**< I2C Pressure Sensor B Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_A_ADV_L1      = 2064,  /**< I2C Pressure Sensor A Advanced Level 1                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_B_ADV_L1      = 2065,  /**< I2C Pressure Sensor B Advanced Level 1                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_A_ADV_L2      = 2072,  /**< I2C Pressure Sensor A Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_PRESSURE_B_ADV_L2      = 2073,  /**< I2C Pressure Sensor B Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_A_DEF_L1      = 2112,  /**< I2C Humidity Sensor A Defined Level 1                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_B_DEF_L1      = 2113,  /**< I2C Humidity Sensor B Defined Level 1                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_A_DEF_L2      = 2120,  /**< I2C Humidity Sensor A Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_B_DEF_L2      = 2121,  /**< I2C Humidity Sensor B Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_A_ADV_L1      = 2128,  /**< I2C Humidity Sensor A Advanced Level 1                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_B_ADV_L1      = 2129,  /**< I2C Humidity Sensor B Advanced Level 1                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_A_ADV_L2      = 2136,  /**< I2C Humidity Sensor A Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_HUMIDITY_B_ADV_L2      = 2137,  /**< I2C Humidity Sensor B Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_AMBIENTLIGHT_A_DEF_L1  = 2176,  /**< I2C Ambient Light Sensor A Defined Level 1             */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_AMBIENTLIGHT_A_DEF_L2  = 2184,  /**< I2C Ambient Light Sensor A Defined Level 2             */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_AMBIENTLIGHT_A_ADV_L1  = 2192,  /**< I2C Ambient Light Sensor A Advanced Level 1            */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_I2C_AMBIENTLIGHT_A_ADV_L2  = 2200,  /**< I2C Ambient Light Sensor A Advanced Level 2            */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_A_DEF_L1      = 3072,  /**< SPI Pressure Sensor A Defined Level 1                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_A_DEF_L2      = 3080,  /**< SPI Pressure Sensor A Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_A_ADV_L1      = 3088,  /**< SPI Pressure Sensor A Advanced Level 1                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_PRESSURE_A_ADV_L2      = 3096,  /**< SPI Pressure Sensor A Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_A_DEF_L1      = 3136,  /**< SPI Humidity Sensor A Defined Level 1                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_B_DEF_L1      = 3137,  /**< SPI Humidity Sensor B Defined Level 1                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_A_DEF_L2      = 3144,  /**< SPI Humidity Sensor A Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_B_DEF_L2      = 3145,  /**< SPI Humidity Sensor B Defined Level 2                  */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_A_ADV_L1      = 3152,  /**< SPI Humidity Sensor A Advanced Level 1                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_B_ADV_L1      = 3153,  /**< SPI Humidity Sensor B Advanced Level 1                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_A_ADV_L2      = 3160,  /**< SPI Humidity Sensor A Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_HUMIDITY_B_ADV_L2      = 3161,  /**< SPI Humidity Sensor B Advanced Level 2                 */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_DEF_L1 = 3200,  /**< SPI Accelerometer Sensor A 3-Axis Defined Level 1      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_DEF_L1 = 3201,  /**< SPI Accelerometer Sensor B 3-Axis Defined Level 1      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_DEF_L2 = 3208,  /**< SPI Accelerometer Sensor A 3-Axis Defined Level 2      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_DEF_L2 = 3209,  /**< SPI Accelerometer Sensor B 3-Axis Defined Level 2      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_ADV_L1 = 3216,  /**< SPI Accelerometer Sensor A 3-Axis Advanced Level 1     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_ADV_L1 = 3217,  /**< SPI Accelerometer Sensor B 3-Axis Advanced Level 1     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_A_ADV_L2 = 3224,  /**< SPI Accelerometer Sensor A 3-Axis Advanced Level 2     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_SPI_ACCELEROMETER_B_ADV_L2 = 3225,  /**< SPI Accelerometer Sensor B 3-Axis Advanced Level 2     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_A_DEF_L1          = 3584,  /**< UART CO2 Sensor A Defined Level 1                      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_B_DEF_L1          = 3585,  /**< UART CO2 Sensor B Defined Level 1                      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_A_DEF_L2          = 3592,  /**< UART CO2 Sensor A Defined Level 2                      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_B_DEF_L2          = 3593,  /**< UART CO2 Sensor B Defined Level 2                      */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_A_ADV_L1          = 3600,  /**< UART CO2 Sensor A Advanced Level 1                     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_B_ADV_L1          = 3601,  /**< UART CO2 Sensor B Advanced Level 1                     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_A_ADV_L2          = 3608,  /**< UART CO2 Sensor A Advanced Level 2                     */
+  ADISENSE_CORE_SENSOR_TYPE_SENSOR_UART_CO2_B_ADV_L2          = 3609   /**< UART CO2 Sensor B Advanced Level 2                     */
 } ADI_ADISENSE_CORE_Sensor_Type_Sensor_Type;
 
 
@@ -1171,8 +1478,10 @@
  *  ========================================================================= */
 typedef enum
 {
-  ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGC = 0,  /**< Degrees C */
-  ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGF = 1   /**< Degrees F */
+  ADISENSE_CORE_SENSOR_DETAILS_UNITS_UNSPECIFIED = 0,  /**< Not Specified */
+  ADISENSE_CORE_SENSOR_DETAILS_UNITS_RESERVED    = 1,  /**< Reserved      */
+  ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGC        = 2,  /**< Degrees C     */
+  ADISENSE_CORE_SENSOR_DETAILS_UNITS_DEGF        = 3   /**< Degrees F     */
 } ADI_ADISENSE_CORE_Sensor_Details_Measurement_Units;
 
 
@@ -1220,13 +1529,16 @@
     struct {
       uint32_t Measurement_Units :  4;  /**< Units of Sensor Measurement */
       uint32_t Compensation_Channel :  4;  /**< Indicates Which Channel is Used to Compensate Sensor Result */
-      uint32_t reserved8            :  9;
+      uint32_t reserved8            :  8;
+      uint32_t Unity_LUT_Select     :  1;  /**< Selects Unity Transfer Function Instead of Sensor Default */
       uint32_t Do_Not_Publish       :  1;  /**< Do Not Publish Channel Result */
       uint32_t Reference_Buffer_Disable :  1;  /**< Enable or Disable ADC Reference Buffer */
       uint32_t Vbias                    :  1;  /**< Controls ADC Vbias Output */
       uint32_t Reference_Select         :  4;  /**< Reference Selection */
       uint32_t PGA_Gain                 :  3;  /**< PGA Gain */
-      uint32_t reserved27               :  5;
+      uint32_t reserved27               :  1;
+      uint32_t Averaging                :  3;  /**< Number of ADC Results to Average */
+      uint32_t Compensation_Disable     :  1;  /**< Indicates Compensation Data Should Not Be Used */
     };
     uint32_t VALUE32;
   };
@@ -1255,6 +1567,17 @@
 } ADI_ADISENSE_CORE_Channel_Excitation_IOUT_Excitation_Current;
 
 
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Channel_Excitation_IOUT_Diode_Ratio
+ *! \brief  Modify Current Ratios Used for Diode Sensor (IOUT_Diode_Ratio) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_DIODE_DEFAULT = 0,  /**< Default Excitation Current Ratios */
+  ADISENSE_CORE_CHANNEL_EXCITATION_IOUT_DIODE_MAX     = 1   /**< Higher Excitation Current Ratios  */
+} ADI_ADISENSE_CORE_Channel_Excitation_IOUT_Diode_Ratio;
+
+
 /* ==========================================================================
  *! \struct ADI_ADISENSE_CORE_Channel_Excitation_Struct
  *! \brief  Excitation Current Register bit field structure
@@ -1263,7 +1586,10 @@
   union {
     struct {
       uint8_t IOUT_Excitation_Current :  3;  /**< Current Source Value */
-      uint8_t reserved3               :  5;
+      uint8_t reserved3               :  2;
+      uint8_t IOUT_Diode_Ratio        :  1;  /**< Modify Current Ratios Used for Diode Sensor */
+      uint8_t reserved6               :  1;
+      uint8_t IOUT_Dont_Swap_3Wire    :  1;  /**< Indicates 3-Wire Excitation Currents Should Not Be Swapped */
     };
     uint8_t VALUE8;
   };
@@ -1276,6 +1602,18 @@
  *  @{
  */
 
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Settling_Time_Settling_Time_Units
+ *! \brief  Units for Settling Time (Settling_Time_Units) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_SETTLING_TIME_MICROSECONDS = 0,  /**< Micro-Seconds */
+  ADISENSE_CORE_SETTLING_TIME_MILLISECONDS = 1,  /**< Milli-Seconds */
+  ADISENSE_CORE_SETTLING_TIME_SECONDS      = 2   /**< Seconds       */
+} ADI_ADISENSE_CORE_Settling_Time_Settling_Time_Units;
+
+
 /* ==========================================================================
  *! \struct ADI_ADISENSE_CORE_Settling_Time_Struct
  *! \brief  Settling Time Register bit field structure
@@ -1283,7 +1621,8 @@
 typedef struct _ADI_ADISENSE_CORE_Settling_Time_t {
   union {
     struct {
-      uint16_t Settling_Time : 16;  /**< Settling Time to Allow When Switching to Channel */
+      uint16_t Settling_Time : 14;  /**< Settling Time to Allow When Switching to Channel */
+      uint16_t Settling_Time_Units :  2;  /**< Units for Settling Time */
     };
     uint16_t VALUE16;
   };
@@ -1426,6 +1765,69 @@
 
 /*@}*/
 
+/** @defgroup Channel_Skip Indicates If Channel Will Skip Some Measurement Cycles (Channel_Skip) Register
+ *  Indicates If Channel Will Skip Some Measurement Cycles (Channel_Skip) Register.
+ *  @{
+ */
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Channel_Skip_Struct
+ *! \brief  Indicates If Channel Will Skip Some Measurement Cycles Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Channel_Skip_t {
+  union {
+    struct {
+      uint16_t Channel_Skip :  8;  /**< Indicates If Channel Will Skip Some Measurement Cycles */
+      uint16_t reserved8    :  8;
+    };
+    uint16_t VALUE16;
+  };
+} ADI_ADISENSE_CORE_Channel_Skip_t;
+
+/*@}*/
+
+/** @defgroup Sensor_Parameter Sensor Parameter Adjustment (Sensor_Parameter) Register
+ *  Sensor Parameter Adjustment (Sensor_Parameter) Register.
+ *  @{
+ */
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Sensor_Parameter_Struct
+ *! \brief  Sensor Parameter Adjustment Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Sensor_Parameter_t {
+  union {
+    struct {
+      float Sensor_Parameter;  /**< Sensor Parameter Adjustment */
+    };
+    float VALUE32;
+  };
+} ADI_ADISENSE_CORE_Sensor_Parameter_t;
+
+/*@}*/
+
+/** @defgroup Calibration_Parameter Calibration Parameter Value (Calibration_Parameter) Register
+ *  Calibration Parameter Value (Calibration_Parameter) Register.
+ *  @{
+ */
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Calibration_Parameter_Struct
+ *! \brief  Calibration Parameter Value Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Calibration_Parameter_t {
+  union {
+    struct {
+      uint32_t Calibration_Parameter : 24;  /**< Calibration Parameter Value */
+      uint32_t Calibration_Parameter_Enable :  1;  /**< Enables Use of Calibration_Parameter */
+      uint32_t reserved25                   :  7;
+    };
+    uint32_t VALUE32;
+  };
+} ADI_ADISENSE_CORE_Calibration_Parameter_t;
+
+/*@}*/
+
 /** @defgroup Digital_Sensor_Config Digital Sensor Data Coding (Digital_Sensor_Config) Register
  *  Digital Sensor Data Coding (Digital_Sensor_Config) Register.
  *  @{
@@ -1507,6 +1909,128 @@
 
 /*@}*/
 
+/** @defgroup Digital_Sensor_Comms Digital Sensor Communication Clock Configuration (Digital_Sensor_Comms) Register
+ *  Digital Sensor Communication Clock Configuration (Digital_Sensor_Comms) Register.
+ *  @{
+ */
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Digital_Sensor_Comms_Digital_Sensor_Comms_En
+ *! \brief  Enable Digital Sensor Comms Register Parameters (Digital_Sensor_Comms_En) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_DIGITAL_COMMS_DEFAULT = 0,  /**< Default Parameters Used for Digital Sensor Communications       */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_DIGITAL_COMMS_USER    = 1   /**< User Supplied Parameters Used for Digital Sensor Communications */
+} ADI_ADISENSE_CORE_Digital_Sensor_Comms_Digital_Sensor_Comms_En;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Digital_Sensor_Comms_SPI_Clock
+ *! \brief  Controls Clock Frequency for SPI Sensors (SPI_Clock) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_13MHZ    = 0,   /**< 13 MHz    */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_6_5MHZ   = 1,   /**< 6.5 MHz   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_3_25MHZ  = 2,   /**< 3.25 MHz  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_1_625MHZ = 3,   /**< 1.625 MHz */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_812KHZ   = 4,   /**< 812.5kHz  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_406KHZ   = 5,   /**< 406.2kHz  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_203KHZ   = 6,   /**< 203.1kHz  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_101KHZ   = 7,   /**< 101.5kHz  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_50KHZ    = 8,   /**< 50.8kHz   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_25KHZ    = 9,   /**< 25.4kHz   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_12KHZ    = 10,  /**< 12.7kHz   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_6KHZ     = 11,  /**< 6.3kHz    */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_3KHZ     = 12,  /**< 3.2kHz    */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_1_5KHZ   = 13,  /**< 1.58kHz   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_793HZ    = 14,  /**< 793Hz     */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_396HZ    = 15   /**< 396Hz     */
+} ADI_ADISENSE_CORE_Digital_Sensor_Comms_SPI_Clock;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Digital_Sensor_Comms_I2C_Clock
+ *! \brief  Controls SCLK Frequency for I2C Sensors (I2C_Clock) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_100K      = 0,  /**< 100kHz SCL */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_400K      = 1,  /**< 400kHz SCL */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_RESERVED1 = 2,  /**< Reserved   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_I2C_RESERVED2 = 3   /**< Reserved   */
+} ADI_ADISENSE_CORE_Digital_Sensor_Comms_I2C_Clock;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Digital_Sensor_Comms_Uart_Baud
+ *! \brief  Controls Baud Rate for UART Sensors (Uart_Baud) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_115200 = 0,  /**< 115200 bps */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_57600  = 1,  /**< 57600 bps  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_38400  = 2,  /**< 38400 bps  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_19200  = 3,  /**< 19200 bps  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_9600   = 4,  /**< 9600 bps   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_4800   = 5,  /**< 4800 bps   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_2400   = 6,  /**< 2400 bps   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_UART_1200   = 7   /**< 1200 bps   */
+} ADI_ADISENSE_CORE_Digital_Sensor_Comms_Uart_Baud;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Digital_Sensor_Comms_SPI_Mode
+ *! \brief  Configuration for Sensor SPI Protocol (SPI_Mode) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_0 = 0,  /**< Clock Polarity = 0 Clock Phase = 0 */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_1 = 1,  /**< Clock Polarity = 0 Clock Phase = 1 */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_2 = 2,  /**< Clock Polarity = 1 Clock Phase = 0 */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_SPI_MODE_3 = 3   /**< Clock Polarity = 1 Clock Phase = 1 */
+} ADI_ADISENSE_CORE_Digital_Sensor_Comms_SPI_Mode;
+
+
+/*  =========================================================================
+ *! \enum   ADI_ADISENSE_CORE_Digital_Sensor_Comms_Uart_Mode
+ *! \brief  Configuration for Sensor UART Protocol (Uart_Mode) Enumerations
+ *  ========================================================================= */
+typedef enum
+{
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N1 = 0,   /**< 8 Data Bits No Parity 1 Stop Bit    */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N2 = 1,   /**< 8 Data Bits No Parity 2 Stop Bits   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8N3 = 2,   /**< 8 Data Bits No Parity 3 Stop Bits   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E1 = 4,   /**< 8 Data Bits Even Parity 1 Stop Bit  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E2 = 5,   /**< 8 Data Bits Even Parity 2 Stop Bits */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8E3 = 6,   /**< 8 Data Bits Even Parity 3 Stop Bits */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O1 = 8,   /**< 8 Data Bits Odd Parity 1 Stop Bit   */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O2 = 9,   /**< 8 Data Bits Odd Parity 2 Stop Bits  */
+  ADISENSE_CORE_DIGITAL_SENSOR_COMMS_LINECONTROL_8O3 = 10   /**< 8 Data Bits Odd Parity 3 Stop Bits  */
+} ADI_ADISENSE_CORE_Digital_Sensor_Comms_Uart_Mode;
+
+
+/* ==========================================================================
+ *! \struct ADI_ADISENSE_CORE_Digital_Sensor_Comms_Struct
+ *! \brief  Digital Sensor Communication Clock Configuration Register bit field structure
+ * ========================================================================== */
+typedef struct _ADI_ADISENSE_CORE_Digital_Sensor_Comms_t {
+  union {
+    struct {
+      uint16_t Digital_Sensor_Comms_En :  1;  /**< Enable Digital Sensor Comms Register Parameters */
+      uint16_t SPI_Clock               :  4;  /**< Controls Clock Frequency for SPI Sensors */
+      uint16_t I2C_Clock               :  2;  /**< Controls SCLK Frequency for I2C Sensors */
+      uint16_t Uart_Baud               :  3;  /**< Controls Baud Rate for UART Sensors */
+      uint16_t SPI_Mode                :  2;  /**< Configuration for Sensor SPI Protocol */
+      uint16_t Uart_Mode               :  4;  /**< Configuration for Sensor UART Protocol */
+    };
+    uint16_t VALUE16;
+  };
+} ADI_ADISENSE_CORE_Digital_Sensor_Comms_t;
+
+/*@}*/
+
 /** @defgroup Digital_Sensor_Command1 Sensor Configuration Command1 (Digital_Sensor_Command1) Register
  *  Sensor Configuration Command1 (Digital_Sensor_Command1) Register.
  *  @{
@@ -1793,4 +2317,3 @@
 #endif 
 
 #endif
-
--- a/src/crc16.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/crc16.c	Thu May 17 10:34:45 2018 +0100
@@ -64,7 +64,7 @@
 	0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
 };
   
-unsigned short crc16_ccitt(const void *buf, int len)
+unsigned short adi_sense_crc16_ccitt(const void *buf, int len)
 {
 	register int counter;
 	register unsigned short crc = 0;
@@ -73,4 +73,3 @@
 		crc = (crc<<8) ^ crc16tab[((crc>>8) ^ *(char *)pBuf++)&0x00FF];
 	return crc;
 }
-
--- a/src/crc16.h	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/crc16.h	Thu May 17 10:34:45 2018 +0100
@@ -28,7 +28,6 @@
 #ifndef _CRC16_H_
 #define _CRC16_H_
 
-unsigned short crc16_ccitt(const void *buf, int len);
+unsigned short adi_sense_crc16_ccitt(const void *buf, int len);
 
 #endif /* _CRC16_H_ */
-
--- a/src/mbed/adi_sense_gpio.cpp	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/mbed/adi_sense_gpio.cpp	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_gpio.cpp
- * @brief:  ADISENSE OS-dependent wrapper layer for GPIO interface
- *-----------------------------------------------------------------------------
- */
-
 /******************************************************************************
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -41,6 +34,13 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:  ADISENSE OS-dependent wrapper layer for GPIO interface
+ *-----------------------------------------------------------------------------
+ */
+
 #include <mbed.h>
 
 #include "inc/adi_sense_gpio.h"
@@ -287,4 +287,3 @@
 #ifdef __cplusplus
 }
 #endif
-
--- a/src/mbed/adi_sense_log.cpp	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/mbed/adi_sense_log.cpp	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_log.cpp
- * @brief:  ADISENSE OS-dependent wrapper layer for log functions
- *-----------------------------------------------------------------------------
- */
-
 /******************************************************************************
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -41,19 +34,19 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:  ADISENSE OS-dependent wrapper layer for log functions
+ *-----------------------------------------------------------------------------
+ */
+
 #include <mbed.h>
 #include "inc/adi_sense_log.h"
 
-#define ADI_SENSE_LOG_UART_BAUDRATE (115200)
+static Serial *gpUartDevice;
 
-#ifdef TARGET_STM32F411xE
-#define ADI_SENSE_LOG_UART_TX_PIN   (PA_11)
-#define ADI_SENSE_LOG_UART_RX_PIN   (PA_12)
-#else
-#error "unsupported target platform"
-#endif
-
-static Serial *gpUartDevice;
+static ADI_SENSE_LOG_LEVEL gLogLevel = ADI_SENSE_LOG_LEVEL_DEBUG;
 
 #ifdef __cplusplus
 extern "C" {
@@ -62,11 +55,15 @@
 /*
  * Open the Log interface and allocate resources
  */
-ADI_SENSE_RESULT adi_sense_LogOpen(void)
+ADI_SENSE_RESULT adi_sense_LogOpen(
+    ADI_SENSE_PLATFORM_LOG_CONFIG *pConfig)
 {
-    gpUartDevice = new Serial(ADI_SENSE_LOG_UART_TX_PIN,
-                              ADI_SENSE_LOG_UART_RX_PIN,
-                              ADI_SENSE_LOG_UART_BAUDRATE);
+    if (pConfig->disableLogs)
+        return ADI_SENSE_SUCCESS;
+
+    gpUartDevice = new Serial((PinName)pConfig->txPin,
+                              (PinName)pConfig->rxPin,
+                               pConfig->baudRate);
     if (!gpUartDevice)
     {
         ADI_SENSE_LOG_ERROR("Failed to allocate memory for Log UART context");
@@ -89,6 +86,14 @@
 }
 
 /*
+ * Set the log level for uart communication
+ */
+void adi_sense_LogLevel(ADI_SENSE_LOG_LEVEL maxLevel)
+{
+    gLogLevel = maxLevel;
+}
+
+/*
  * Print a log message to the platform log interface
  */
 void adi_sense_Log(ADI_SENSE_LOG_LEVEL level, const char* format, ...)
@@ -99,6 +104,9 @@
     if (!gpUartDevice)
         return;
 
+    if (level > gLogLevel)
+        return;
+
     va_start(va_args, format);
     vsnprintf(buffer, sizeof(buffer), format, va_args);
     va_end(va_args);
@@ -109,4 +117,3 @@
 #ifdef __cplusplus
 }
 #endif
-
--- a/src/mbed/adi_sense_spi.cpp	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/mbed/adi_sense_spi.cpp	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_spi.cpp
- * @brief:  ADISENSE OS-dependent wrapper layer for SPI interface
- *-----------------------------------------------------------------------------
- */
-
 /******************************************************************************
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -41,6 +34,13 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:  ADISENSE OS-dependent wrapper layer for SPI interface
+ *-----------------------------------------------------------------------------
+ */
+
 #include <mbed.h>
 
 #include "inc/adi_sense_spi.h"
@@ -132,7 +132,7 @@
     {
         _cs = 1;
         return rc;
-    }   
+    }
 
     rc = _waitForCallback();
     if ((rc < 0) || !bCsHold)
@@ -207,4 +207,3 @@
 /*!
  * @}
  */
-
--- a/src/mbed/adi_sense_time.cpp	Mon Mar 26 14:50:05 2018 +0000
+++ b/src/mbed/adi_sense_time.cpp	Thu May 17 10:34:45 2018 +0100
@@ -1,10 +1,3 @@
-/*!
- ******************************************************************************
- * @file:   adi_sense_time.cpp
- * @brief:  ADISENSE OS-dependent wrapper layer for time functions
- *-----------------------------------------------------------------------------
- */
-
 /******************************************************************************
 Copyright 2017 (c) Analog Devices, Inc.
 
@@ -41,6 +34,13 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:  ADISENSE OS-dependent wrapper layer for time functions
+ *-----------------------------------------------------------------------------
+ */
+
 #include <mbed.h>
 
 #include "inc/adi_sense_time.h"
@@ -61,4 +61,3 @@
 #ifdef __cplusplus
 }
 #endif
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uart_cozirCO2_config.c	Thu May 17 10:34:45 2018 +0100
@@ -0,0 +1,70 @@
+/*
+Copyright 2017 (c) Analog Devices, Inc.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  - Neither the name of Analog Devices, Inc. nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+  - The use of this software may or may not infringe the patent rights
+    of one or more patent holders. This license does not release you
+    from the requirement that you obtain separate licenses from these
+    patent holders to use this software.
+  - Use of the software either in source or binary form, must be run
+    on or directly connected to an Analog Devices Inc. component.
+
+THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *****************************************************************************/
+
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
+#include "inc/adi_sense_config_types.h"
+
+ADI_SENSE_CONFIG uart_cozirCO2_config = {
+    .versionId = { .major = 1, .minor = 4 },
+    .productId = ADI_SENSE_PRODUCT_ID_ADSNS1000,
+    .adisense1000 = {
+        .power = {
+            .powerMode = ADI_SENSE_1000_POWER_MODE_FULL,
+        },
+        .measurement = {
+            .operatingMode = ADI_SENSE_1000_OPERATING_MODE_SINGLECYCLE,
+            .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
+        },
+        .channels = {
+            [ADI_SENSE_1000_CHANNEL_ID_UART] = {
+                .enableChannel = true,
+                .disablePublishing = false,
+                .compensationChannel = ADI_SENSE_1000_CHANNEL_ID_NONE,
+                .measurementsPerCycle = 10,
+                .extraSettlingTime = 2000,
+                .sensorParameter = 32.0, /* This is a filter value configurable by the user */
+                .uartChannelConfig = {
+                    .sensor = ADI_SENSE_1000_UART_SENSOR_UART_CO2_A_DEF_L1,
+                },
+            },
+        },
+    },
+};
--- a/voltage_honeywellPressure_config.c	Mon Mar 26 14:50:05 2018 +0000
+++ b/voltage_honeywellPressure_config.c	Thu May 17 10:34:45 2018 +0100
@@ -1,9 +1,4 @@
-/*!
- ******************************************************************************
- * @file:   voltage_honeywellPressure_config.cpp
- * @brief:
- *-----------------------------------------------------------------------------
- *
+/*
 Copyright 2017 (c) Analog Devices, Inc.
 
 All rights reserved.
@@ -39,6 +34,12 @@
  *
  *****************************************************************************/
 
+/*!
+ ******************************************************************************
+ * @file:
+ * @brief:
+ *-----------------------------------------------------------------------------
+ */
 #include "inc/adi_sense_config_types.h"
 
 ADI_SENSE_CONFIG voltage_honeywellPressure_config = {
@@ -53,24 +54,6 @@
             .dataReadyMode = ADI_SENSE_1000_DATAREADY_PER_CYCLE,
         },
         .channels = {
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_CJC_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_2] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SENSOR_3] = {
-                .enableChannel = false,
-            },
             [ADI_SENSE_1000_CHANNEL_ID_VOLTAGE_0] = {
                 .enableChannel = true,
                 .disablePublishing = false,
@@ -78,7 +61,7 @@
                 .measurementsPerCycle = 10,
                 .extraSettlingTime = 0,
                 .adcChannelConfig = {
-                    .sensor = ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_HONEYWELL_TRUSTABILITY,
+                    .sensor = ADI_SENSE_1000_ADC_SENSOR_VOLTAGE_PRESSURE_A_DEF_L1,
                     .gain = ADI_SENSE_1000_ADC_GAIN_2X,
                     .filter = {
                         .type = ADI_SENSE_1000_ADC_FILTER_FIR_25SPS,
@@ -90,25 +73,6 @@
                     .enableVbias = false,
                 },
             },
-            [ADI_SENSE_1000_CHANNEL_ID_CURRENT_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_I2C_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_0] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_1] = {
-                .enableChannel = false,
-            },
-            [ADI_SENSE_1000_CHANNEL_ID_SPI_2] = {
-                .enableChannel = false,
-            },
         },
     },
 };
-