<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dh-electronics.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rgoellner</id>
	<title>Wiki-DB - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dh-electronics.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rgoellner"/>
	<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=Special:Contributions/Rgoellner"/>
	<updated>2026-04-27T16:34:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=2279</id>
		<title>XLON</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=2279"/>
		<updated>2018-09-26T13:56:42Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* Windows Drivers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000; border-spacing: 2px; border: 1px solid darkgray;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:XLON Logo in Schwarz von SD Kopie.jpg|400px|XLON]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:LOGO_DH_electronics.jpg|180px|DH electronics]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
== XLON products ==&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:XLON U10.png|100px|XLON U10|link=]]&lt;br /&gt;
|&lt;br /&gt;
*&#039;&#039;&#039;[[XLON U10]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware Development ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Development ==&lt;br /&gt;
The XLON Uxx LonWorks interfaces come with two different flavours of configuration:&lt;br /&gt;
# Vendor mode - does not appear as a serial port in the system.&lt;br /&gt;
# CDC/ACM mode - appears as a (virtual) serial port in the system.&lt;br /&gt;
This configuration can be replaced using xlon-util tool.&lt;br /&gt;
&lt;br /&gt;
=== XLON Tools ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!Windows, CPU x64&lt;br /&gt;
!Debian Linux, CPU x64&lt;br /&gt;
!Debian Linux armhf, CPU iMX6/AM33&lt;br /&gt;
|-&lt;br /&gt;
!Tool packages&lt;br /&gt;
|[[File:Xlon-u10-0.1.1-win64.zip]]&lt;br /&gt;
|[[File:Xlon-u10-x64-0v9.zip]]&lt;br /&gt;
|[[File:Xlon-u10-armhf-0v9.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Library packages&lt;br /&gt;
|&lt;br /&gt;
|[[File:Dhcom-hal-x64-0v3.zip]]&lt;br /&gt;
|[[File:Dhcom-hal-armhf-0v3.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Windows Drivers ===&lt;br /&gt;
Drivers for various 32- and 64-Bit versions of Windows operating system:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Vendor mode Drivers&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!CPU x86&lt;br /&gt;
!CPU x64:&lt;br /&gt;
|-&lt;br /&gt;
!Windows 7&lt;br /&gt;
|[[File:XLON-2G-Win7-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win7-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[File:XLON-2G-Win8-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[File:XLON-2G-Win10-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win10-x64.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+CDC/ACM mode Drivers&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!CPU x86&lt;br /&gt;
!CPU x64:&lt;br /&gt;
|-&lt;br /&gt;
!Windows 7&lt;br /&gt;
|[[File:XLON-2G-Win7-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win7-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[File:XLON-2G-Win8-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[File:XLON-2G-Win10-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win10-x64-cdc-acm.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[FAQ_General |&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;FAQ&amp;lt;/span&amp;gt;]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Series Manufacturing ==&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=2278</id>
		<title>XLON</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=2278"/>
		<updated>2018-09-26T13:51:59Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* Software Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000; border-spacing: 2px; border: 1px solid darkgray;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:XLON Logo in Schwarz von SD Kopie.jpg|400px|XLON]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:LOGO_DH_electronics.jpg|180px|DH electronics]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
== XLON products ==&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:XLON U10.png|100px|XLON U10|link=]]&lt;br /&gt;
|&lt;br /&gt;
*&#039;&#039;&#039;[[XLON U10]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware Development ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Development ==&lt;br /&gt;
The XLON Uxx LonWorks interfaces come with two different flavours of configuration:&lt;br /&gt;
# Vendor mode - does not appear as a serial port in the system.&lt;br /&gt;
# CDC/ACM mode - appears as a (virtual) serial port in the system.&lt;br /&gt;
This configuration can be replaced using xlon-util tool.&lt;br /&gt;
&lt;br /&gt;
=== XLON Tools ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!Windows, CPU x64&lt;br /&gt;
!Debian Linux, CPU x64&lt;br /&gt;
!Debian Linux armhf, CPU iMX6/AM33&lt;br /&gt;
|-&lt;br /&gt;
!Tool packages&lt;br /&gt;
|[[File:Xlon-u10-0.1.1-win64.zip]]&lt;br /&gt;
|[[File:Xlon-u10-x64-0v9.zip]]&lt;br /&gt;
|[[File:Xlon-u10-armhf-0v9.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Library packages&lt;br /&gt;
|&lt;br /&gt;
|[[File:Dhcom-hal-x64-0v3.zip]]&lt;br /&gt;
|[[File:Dhcom-hal-armhf-0v3.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Windows Drivers ===&lt;br /&gt;
Drivers for various versions of OS Windows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Vendor mode Drivers&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!CPU x86&lt;br /&gt;
!CPU x64:&lt;br /&gt;
|-&lt;br /&gt;
!Windows 7&lt;br /&gt;
|[[File:XLON-2G-Win7-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win7-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[File:XLON-2G-Win8-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[File:XLON-2G-Win10-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win10-x64.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+CDC/ACM mode Drivers&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!CPU x86&lt;br /&gt;
!CPU x64:&lt;br /&gt;
|-&lt;br /&gt;
!Windows 7&lt;br /&gt;
|[[File:XLON-2G-Win7-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win7-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[File:XLON-2G-Win8-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[File:XLON-2G-Win10-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win10-x64-cdc-acm.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[FAQ_General |&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;FAQ&amp;lt;/span&amp;gt;]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Series Manufacturing ==&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=2277</id>
		<title>XLON</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=2277"/>
		<updated>2018-09-26T13:50:57Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000; border-spacing: 2px; border: 1px solid darkgray;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:XLON Logo in Schwarz von SD Kopie.jpg|400px|XLON]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:LOGO_DH_electronics.jpg|180px|DH electronics]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;| &lt;br /&gt;
&lt;br /&gt;
== XLON products ==&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:XLON U10.png|100px|XLON U10|link=]]&lt;br /&gt;
|&lt;br /&gt;
*&#039;&#039;&#039;[[XLON U10]]&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware Development ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Development ==&lt;br /&gt;
The XLON_Uxx LonWorks interfaces come with two different flavours of configuration:&lt;br /&gt;
# Vendor image - does not appear as a serial port in the system.&lt;br /&gt;
# CDC/ACM Image - appears as a (virtual) serial port in the system.&lt;br /&gt;
This configuration image can be replaced using xlon-util tool.&lt;br /&gt;
&lt;br /&gt;
=== XLON Tools ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!Windows, CPU x64&lt;br /&gt;
!Debian Linux, CPU x64&lt;br /&gt;
!Debian Linux armhf, CPU iMX6/AM33&lt;br /&gt;
|-&lt;br /&gt;
!Tool packages&lt;br /&gt;
|[[File:Xlon-u10-0.1.1-win64.zip]]&lt;br /&gt;
|[[File:Xlon-u10-x64-0v9.zip]]&lt;br /&gt;
|[[File:Xlon-u10-armhf-0v9.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Library packages&lt;br /&gt;
|&lt;br /&gt;
|[[File:Dhcom-hal-x64-0v3.zip]]&lt;br /&gt;
|[[File:Dhcom-hal-armhf-0v3.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Windows Drivers ===&lt;br /&gt;
Drivers for various versions of OS Windows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Vendor mode Drivers&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!CPU x86&lt;br /&gt;
!CPU x64:&lt;br /&gt;
|-&lt;br /&gt;
!Windows 7&lt;br /&gt;
|[[File:XLON-2G-Win7-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win7-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[File:XLON-2G-Win8-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[File:XLON-2G-Win10-x86.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win10-x64.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+CDC/ACM mode Drivers&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!CPU x86&lt;br /&gt;
!CPU x64:&lt;br /&gt;
|-&lt;br /&gt;
!Windows 7&lt;br /&gt;
|[[File:XLON-2G-Win7-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win7-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[File:XLON-2G-Win8-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win8.1-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[File:XLON-2G-Win10-x86-cdc-acm.zip]]&lt;br /&gt;
|[[File:XLON-2G-Win10-x64-cdc-acm.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[FAQ_General |&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;FAQ&amp;lt;/span&amp;gt;]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Series Manufacturing ==&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=Main_Page&amp;diff=2276</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=Main_Page&amp;diff=2276"/>
		<updated>2018-09-26T13:47:10Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* 120px|DH electronics XLON|link=XLON */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000; border-spacing: 2px; border: 1px solid darkgray;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:Welcome.jpg|200px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:LOGO_DH_electronics.jpg|200px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:Mediawiki.jpg|183px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Welcome to DH electronics new MediaWiki. This Wiki has the aim to provide our customers technical support for DH electronics products.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000; border-collapse:collapse; border: darkgray; border-style: solid; border-width: 1px 0 1px 0&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|style=&amp;quot;padding:10px;&amp;quot;|&lt;br /&gt;
=== [[DHCOM|&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;DHCOM&amp;lt;/span&amp;gt;]] ===&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;Computer On Module&#039;&#039;&#039; (COM) is a powerful embedded computer on a compact circuit board.&lt;br /&gt;
&lt;br /&gt;
Our DHCOM modules offer high performance coupled with extensive features and interfaces, low power consumption&amp;lt;br&amp;gt;as well as compact size.Possible applications for our modules are in visualization, multimedia, automation and communication devices&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;[[DHCOM|here]]&#039;&#039;&#039; to get support information for our &#039;&#039;&#039;[[DHCOM]]&#039;&#039;&#039; products.&lt;br /&gt;
| style=&amp;quot;text-align: right;&amp;quot; |[[Image:IM6Modul.png|center|300px|COM iMX6-D2|link=COM iMX6-D2]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border: darkgray; border-style: solid; border-width: 1px 0 0 0;&amp;quot;|&lt;br /&gt;
|style=&amp;quot;padding:10px; border: darkgray; border-style: solid; border-width: 1px 0 0 0;&amp;quot;|&lt;br /&gt;
=== [[Image:XLON Logo in Schwarz von SD Kopie.jpg|120px|DH electronics XLON|link=XLON]] ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;XLON&#039;&#039;&#039; products are network interfaces and infrastructure components for LonWorks technology.&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;[[XLON|here]]&#039;&#039;&#039; to get support information for our &#039;&#039;&#039;[[XLON]]&#039;&#039;&#039; products.&lt;br /&gt;
| style=&amp;quot;text-align: right; border: darkgray; border-style: solid; border-width: 1px 0 0 0;&amp;quot; |[[Image:XLON U10.png|center|275px|XLON U10|link=COM iMX6-D2]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=Main_Page&amp;diff=2234</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=Main_Page&amp;diff=2234"/>
		<updated>2018-08-02T09:12:26Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000; border-spacing: 2px; border: 1px solid darkgray;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:Welcome.jpg|200px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:LOGO_DH_electronics.jpg|200px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:Mediawiki.jpg|183px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Welcome to DH electronics new MediaWiki. This Wiki has the aim to provide our customers technical support for DH electronics products.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=1; style=&amp;quot;width: 100%; color: #000000; border-collapse:collapse&amp;quot;&lt;br /&gt;
| [[Image:DHCM-120pix-ws.jpg|center|DH Computer on Module|link=DHCOM]]&lt;br /&gt;
|style=&amp;quot;padding:10px;&amp;quot;|&lt;br /&gt;
=== [[DHCOM|&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;DHCOM&amp;lt;/span&amp;gt;]] ===&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;Computer On Module&#039;&#039;&#039; (COM) is a powerful embedded computer on a compact circuit board.&lt;br /&gt;
&lt;br /&gt;
Our DHCOM modules offer high performance coupled with extensive features and interfaces, low power consumption&amp;lt;br&amp;gt;as well as compact size.Possible applications for our modules are in visualization, multimedia, automation and communication devices&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;[[DHCOM|here]]&#039;&#039;&#039; to get support information for our &#039;&#039;&#039;[[DHCOM]]&#039;&#039;&#039; products.&lt;br /&gt;
| style=&amp;quot;text-align: right;&amp;quot; |[[Image:IM6Modul.png|center|300px|COM iMX6-D2|link=COM iMX6-D2]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:XLON Logo in Schwarz von SD Kopie.jpg|center|120px|DH electronics XLON|link=DHCOM]]&lt;br /&gt;
|style=&amp;quot;padding:10px;&amp;quot;|&lt;br /&gt;
=== [[XLON|&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;XLON&amp;lt;/span&amp;gt;]] ===&lt;br /&gt;
&lt;br /&gt;
Our &#039;&#039;&#039;XLON&#039;&#039;&#039; products are network interfaces for LonWorks-Technology.&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;[[XLON|here]]&#039;&#039;&#039; to get support information for our &#039;&#039;&#039;[[XLON]]&#039;&#039;&#039; products.&lt;br /&gt;
| style=&amp;quot;text-align: right;&amp;quot; |[[Image:XLON U10.png|center|275px|XLON U10|link=COM iMX6-D2]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=Main_Page&amp;diff=2233</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=Main_Page&amp;diff=2233"/>
		<updated>2018-08-02T09:08:40Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000; border-spacing: 2px; border: 1px solid darkgray;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:Welcome.jpg|200px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:LOGO_DH_electronics.jpg|200px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:Mediawiki.jpg|183px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Welcome to DH electronics new MediaWiki. This Wiki has the aim to provide our customers technical support for DH electronics products.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=1; style=&amp;quot;width: 100%; color: #000000; border-collapse:collapse&amp;quot;&lt;br /&gt;
| [[Image:DHCM-120pix-ws.jpg|center|DH Computer on Module|link=DHCOM]]&lt;br /&gt;
|style=&amp;quot;padding:10px;&amp;quot;|&lt;br /&gt;
=== [[DHCOM|&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;DHCOM&amp;lt;/span&amp;gt;]] ===&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;Computer On Module&#039;&#039;&#039; (COM) is a powerful embedded computer on a compact circuit board.&lt;br /&gt;
&lt;br /&gt;
Our DHCOM modules offer high performance coupled with extensive features and interfaces, low power consumption&amp;lt;br&amp;gt;as well as compact size.Possible applications for our modules are in visualization, multimedia, automation and communication devices&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;[[DHCOM|here]]&#039;&#039;&#039; to get support information for our &#039;&#039;&#039;[[DHCOM]]&#039;&#039;&#039; products.&lt;br /&gt;
| style=&amp;quot;text-align: right;&amp;quot; |[[Image:IM6Modul.png|center|300px|COM iMX6-D2|link=COM iMX6-D2]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:XLON Logo in Schwarz von SD Kopie.jpg|center|120px|DH electronics XLON|link=DHCOM]]&lt;br /&gt;
|style=&amp;quot;padding:10px;&amp;quot;|&lt;br /&gt;
=== [[XLON|&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;XLON&amp;lt;/span&amp;gt;]] ===&lt;br /&gt;
&lt;br /&gt;
Our &#039;&#039;&#039;XLON&#039;&#039;&#039; products are network interfaces for LonWorks-Technology.&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;[[XLON|here]]&#039;&#039;&#039; to get support information for our &#039;&#039;&#039;[[XLON]]&#039;&#039;&#039; products.&lt;br /&gt;
| style=&amp;quot;text-align: right;&amp;quot; |[[Image:XLON U10.png|center|275px|XLON U10|link=COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=Main_Page&amp;diff=2232</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=Main_Page&amp;diff=2232"/>
		<updated>2018-08-02T08:50:22Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: Problem, dass die Tabellenspalten der Produkte unterschiedlich breit waren gelöst.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| style=&amp;quot;width: 100%; color: #000000; border-spacing: 2px; border: 1px solid darkgray;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 50%; text-align: center;&amp;quot; |&lt;br /&gt;
| style=&amp;quot;width: 25%; text-align: center;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:Welcome.jpg|200px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:LOGO_DH_electronics.jpg|250px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
| style=&amp;quot;text-align: center;&amp;quot; | [[Image:Mediawiki.jpg|183px|Welcome to DH electronics MediaWiki]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Welcome to DH electronics new MediaWiki. This Wiki has the aim to provide our customers technical support for DH electronics products.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=1; style=&amp;quot;width: 100%; color: #000000; border-collapse:collapse&amp;quot;&lt;br /&gt;
| [[Image:DHCM-120pix-ws.jpg|center|DH Computer on Module|link=DHCOM]]&lt;br /&gt;
|style=&amp;quot;padding:10px;&amp;quot;|&lt;br /&gt;
=== [[DHCOM|&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;DHCOM&amp;lt;/span&amp;gt;]] ===&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;Computer On Module&#039;&#039;&#039; (COM) is a powerful embedded computer on a compact circuit board.&lt;br /&gt;
&lt;br /&gt;
Our DHCOM modules offer high performance coupled with extensive features and interfaces, low power consumption&amp;lt;br&amp;gt;as well as compact size.Possible applications for our modules are in visualization, multimedia, automation and communication devices&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;[[DHCOM|here]]&#039;&#039;&#039; to get support information for our &#039;&#039;&#039;[[DHCOM]]&#039;&#039;&#039; products.&lt;br /&gt;
| style=&amp;quot;text-align: right;&amp;quot; |[[Image:IM6Modul.png|center|300px|COM iMX6-D2|link=COM iMX6-D2]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:XLON Logo in Schwarz von SD Kopie.jpg|center|120px|DH electronics XLON|link=DHCOM]]&lt;br /&gt;
|style=&amp;quot;padding:10px;&amp;quot;|&lt;br /&gt;
=== [[XLON|&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;XLON&amp;lt;/span&amp;gt;]] ===&lt;br /&gt;
&lt;br /&gt;
Our &#039;&#039;&#039;XLON&#039;&#039;&#039; products are network interfaces for LonWorks-Technology.&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;&#039;[[XLON|here]]&#039;&#039;&#039; to get support information for our &#039;&#039;&#039;[[XLON]]&#039;&#039;&#039; products.&lt;br /&gt;
| style=&amp;quot;text-align: right;&amp;quot; |[[Image:XLON U10.png|center|275px|XLON U10|link=COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2045</id>
		<title>COM iMX6 WinCE</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2045"/>
		<updated>2017-08-08T09:28:04Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* SPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;WEC7 Tools ==&lt;br /&gt;
=== CE Remote Display Application ===&lt;br /&gt;
: The Remote Display allows to operate the target device&#039;s Win CE desktop from a Windows PC. It requires a USB ActiveSync connection.&lt;br /&gt;
: [[media:ASRDisp.zip|Download X86 remote display application (over ActiveSync connection)]]&lt;br /&gt;
: Usage&lt;br /&gt;
: 1. Extract the zip file on your PC.&lt;br /&gt;
: 2. Wait for the ActiveSync connection to be ready.&lt;br /&gt;
: 3. Start ASRDisp.exe.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;Binary BSP user guide ==&lt;br /&gt;
: 1. Download binary BSP (Please have a look at the [[COM_iMX6-D2#Downloads | iMX6 Downloads]] section.).&lt;br /&gt;
: 2. Unzip the files to any folder on your PC.&lt;br /&gt;
: 3. Call &amp;lt;code&amp;gt;link-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\, to generate symbolic links in the \WINCE700\ folder.&lt;br /&gt;
: 4. Start Visual Studio 2008 with WEC7 platform builder.&lt;br /&gt;
: 5. Open platform builder project &amp;lt;code&amp;gt;DHCOM_iMX6.pbxml&amp;lt;/code&amp;gt; at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\.&lt;br /&gt;
: 6. Select retail build. &lt;br /&gt;
:: [[Image:WEC7_retail_build.JPG|500px]]&lt;br /&gt;
: 7. Call build --&amp;gt; rebuild solution to build the WEC7 image.&lt;br /&gt;
: 8. After the image build has completed successfully, the &amp;lt;code&amp;gt;nk.nb0&amp;lt;/code&amp;gt; image is stored at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\RelDir\_1_Retail_DHCOM_iMX6_ARMV7\.&lt;br /&gt;
: 9. Copy the new nk.nb0 to your mircoSD card and restart the system.&lt;br /&gt;
: &#039;&#039;&#039;Note:&#039;&#039;&#039; To delete the symbolic links (see 3.) please call &amp;lt;code&amp;gt;unlink-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC7 / WEC2013 DHHalLib (function library) ==&lt;br /&gt;
The DHHalLib provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_GPIOEnum;&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   }*pDHCOM_GPIOISRType;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, HANDLE *hEvent, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;HANDLE *hEvent&amp;lt;/code&amp;gt; = external EventHandle Pointer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_I2CEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   }*pDHCOM_I2CFREQMode;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pInBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; The following SPI Devices can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_SPIEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; Byte order in first array-element is always &amp;quot;little endian&amp;quot;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; First bit transferred is at bit-position &amp;quot;0&amp;quot; of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is always located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 5:&#039;&#039;&#039; If data length &amp;gt; 32 bits, all bit positions of required array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) are always utilized.&lt;br /&gt;
:&#039;&#039;&#039;Note 6:&#039;&#039;&#039; Byte order in array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) is always &amp;quot;big endian&amp;quot;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 7:&#039;&#039;&#039; First bit transferred in array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) is at bit-position &amp;quot;31&amp;quot;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&lt;br /&gt;
 | ---- If remainder of above modulo is &amp;gt; 0 then bit(s) shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;       | ---- All bit positions of required array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) are always utilized     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Examples less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                                                     | &amp;lt;--8 bit(s)--&amp;gt;| Example:  8 bit(s)&lt;br /&gt;
 |                                            | &amp;lt;---- 17 bit(s) to send/receive  ---&amp;gt;  | Example: 17 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Examples greater 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | Example: 33 bit(s) to send/receive                                                |         &amp;lt;---- first bit located at bit-position &amp;quot;0&amp;quot; of array-element &amp;quot;0&amp;quot; ---&amp;gt;         |&lt;br /&gt;
 | Example: 34 bit(s) to send/receive                                              |        &amp;lt;---- first bit located at bit-position &amp;quot;1&amp;quot; of array-element &amp;quot;0&amp;quot; ---&amp;gt;            |&lt;br /&gt;
 | Example: 41 bit(s) to send/receive                                |            &amp;lt;---- first bit located at bit-position &amp;quot;9&amp;quot; of array-element &amp;quot;0&amp;quot; ---&amp;gt;                      | &lt;br /&gt;
 | Example: 64 bit(s) to send/receive           &amp;lt;---- first bit located at position &amp;quot;31&amp;quot; of array-element &amp;quot;0&amp;quot; (data length multiple of 32) ---&amp;gt;                              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, unsigned int iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned int iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI clock (e.g. 1MHz = 1000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, unsigned long *pOutBuffer, unsigned long *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Data length (bit(s) count) to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   }*pDHCOM_UARTEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    }*pDHCOM_UARTModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    }*pDHCOM_UARTParityEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    }*pDHCOM_UARTStopBitEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    }*pDHCOM_UARTByteSizeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    }*pDHCOM_UARTWEvent;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, unsigned long lReadIntervalTimeout, unsigned long lReadTotalTimeoutConstant, unsigned long lReadTotalTimeoutMultiplier, unsigned long ulWriteTotalTimeoutConstant, unsigned long ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, unsigned char *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_CANEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    }*pDHCOM_CANModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    }*pDHCOM_CANFrameEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, unsigned long lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local priority (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, unsigned long lPrescaler, unsigned char cPropSeg, unsigned char cPhase1Seg, unsigned char cPhase2Seg, unsigned char RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, unsigned char cCANMsgPrio, unsigned long lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. 1000 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, int *iCANMsgID, int *iCANMsgLength, int *iCANFrame, unsigned char *cCANMsgPrio, unsigned long *lCANMsgTimeout, int *iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, unsigned char *pInBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, unsigned char *pOutBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    }*pDHCOM_PHYEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;(WEC7) / WEC2013 DHHalLib C# Wrapper (function wrapper) ==&lt;br /&gt;
The DHHalLib C# wrapper provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, ulong ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pOutBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These SPI Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                   Array[0]                                          |                                   Array[1]                                          |&lt;br /&gt;
 | ---- If data length less than 32 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               | &amp;lt;&amp;lt;&amp;lt;&amp;lt;---- If data length greater than 32 bit(s) data shift to left ----              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | ---- If data length less than 64 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               |                                                                                     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                         |   &amp;lt;---- 18 bit(s) to send/receive  ---&amp;gt;   | Example: 18 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example greater 32 bit(s) and less or equal than 64 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                             &amp;lt;---- first bit(s) of first data shift 1 to left ---&amp;lt; | | Example: 33 bit(s) to send/receive                                                  |&lt;br /&gt;
 |              &amp;lt;------   first bit(s) of first data shift 2 to left    -----&amp;lt;     |   | Example: 34 bit(s) to send/receive                                                  |&lt;br /&gt;
 |   &amp;lt;------  first bit(s) of first data shift 10 to left   -----&amp;lt; |                   | Example: 42 bit(s) to send/receive                                                  |&lt;br /&gt;
 |            &amp;lt;------  data bits eqal data, no data shift is need ------&amp;gt;              | Example: 64 bit(s) to send/receive                                                  |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq, bool useDMA) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, ulong[] pOutBuffer, ulong[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pOutBuffer&amp;lt;/code&amp;gt; = Array to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pInBuffer&amp;lt;/code&amp;gt; = Array to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(only available for C/C++ applications) &lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, ulong lReadIntervalTimeout, ulong lReadTotalTimeoutConstant, ulong lReadTotalTimeoutMultiplier, ulong ulWriteTotalTimeoutConstant, ulong ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, byte[] pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, UInt32 lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local prio (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, UInt32 lPrescaler, byte cPropSeg, byte cPhase1Seg, byte cPhase2Seg, byte RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, byte cCANMsgPrio, UInt32 lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. hex value: fa0 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, ref int iCANMsgID, ref int iCANMsgLength, ref int iCANFrame, ref byte cCANMsgPrio, ref UInt32 lCANMsgTimeout, ref int iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, byte[] pInBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, byte[] pOutBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Debugging ==&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now the debug session can be started from visual studio.&lt;br /&gt;
:: [[Image:WEC2013_debug.JPG|500px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 VNC Connection==&lt;br /&gt;
With WEC2013 efonVNC is used for remote desktop connection. For more information and license click [https://sourceforge.net/projects/efonvnc/?source=directory here].&lt;br /&gt;
: 1. vncconfig.exe can be used to configure password and connection details (stored in folder \apps\wec2013\ at testimage).&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
::* Configuration is stored in registry at path [HKEY_CURRENT_USER\Software\RealVNC\WinVNC4]&lt;br /&gt;
:: [[Image:VNC server 1.jpg|350px]]&lt;br /&gt;
:: [[Image:VNC server 2.jpg|350px]]&lt;br /&gt;
: 2. winvnc.exe (stored in folder \apps\wec2013\ at testimage) must be started. This is done atomatically at startup with the testimage. Otherwise the application can be started via telnet.&lt;br /&gt;
: 3. Download VNC viewer provided by RealVNC for PC/Laptop from [https://www.realvnc.com/download/viewer/ here]. For more information and license click [https://manage.realvnc.com/purchase/vnc here].&lt;br /&gt;
: 4. Run VNC viewer application and connect the device by using IP address and port number. &lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default IP address: 192.168.1.110&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
:: [[Image:VNC Viewer.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Remote Tools==&lt;br /&gt;
Before remote tools can be used, it is necessary to sstart some applications on WEC2013 Device.&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now it is possible to use remote tools from Visual Studio&lt;br /&gt;
:: [[Image:Remote_Tools.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Test Tools==&lt;br /&gt;
=== TEST_APP_CANTEST ===&lt;br /&gt;
: The app can be used to test DHCOM CAN Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:test_app_cantest.zip|Download CAN Demo source code ]] &lt;br /&gt;
: &#039;&#039;&#039;CAN WRITE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --write --len 8 --id 0x12 --idlen 11 --val 0x55 --remote 0 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* --len: Send 8 Bytes&lt;br /&gt;
::* --id: Message ID is 0x12&lt;br /&gt;
::* --idlen: 11 = Standard ID; 29 can be used fpr extended ID&lt;br /&gt;
::* --val: Data starts with 0x55, then 0x56, ...&lt;br /&gt;
::* --remote: 0 = no remote frame&lt;br /&gt;
: &#039;&#039;&#039;CAN READ:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --read --timeout 10000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application waits for 10 seconds to receive data.&lt;br /&gt;
: &#039;&#039;&#039;CAN GET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --getbitrate &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application shows the current used bitrate.&lt;br /&gt;
: &#039;&#039;&#039;CAN SET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --setbitrate --bitrate 250000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application sets bitrate to 250kbps.&lt;br /&gt;
&lt;br /&gt;
=== UART_Test===&lt;br /&gt;
: The app can be used to test DHCOM UART 2 Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:UART_Test.zip|Download UART Demo source code ]] &lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UART_Test &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application cyclic sends &amp;lt;code&amp;gt; &amp;quot;Hello World&amp;quot; &amp;lt;/code&amp;gt; and receives data.&lt;br /&gt;
::* The baudrate 115200 is used for the demo.&lt;br /&gt;
::* &amp;lt;code&amp;gt; q &amp;lt;/code&amp;gt; must be send to exit the demo.&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2044</id>
		<title>COM iMX6 WinCE</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2044"/>
		<updated>2017-08-08T09:23:36Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* SPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;WEC7 Tools ==&lt;br /&gt;
=== CE Remote Display Application ===&lt;br /&gt;
: The Remote Display allows to operate the target device&#039;s Win CE desktop from a Windows PC. It requires a USB ActiveSync connection.&lt;br /&gt;
: [[media:ASRDisp.zip|Download X86 remote display application (over ActiveSync connection)]]&lt;br /&gt;
: Usage&lt;br /&gt;
: 1. Extract the zip file on your PC.&lt;br /&gt;
: 2. Wait for the ActiveSync connection to be ready.&lt;br /&gt;
: 3. Start ASRDisp.exe.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;Binary BSP user guide ==&lt;br /&gt;
: 1. Download binary BSP (Please have a look at the [[COM_iMX6-D2#Downloads | iMX6 Downloads]] section.).&lt;br /&gt;
: 2. Unzip the files to any folder on your PC.&lt;br /&gt;
: 3. Call &amp;lt;code&amp;gt;link-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\, to generate symbolic links in the \WINCE700\ folder.&lt;br /&gt;
: 4. Start Visual Studio 2008 with WEC7 platform builder.&lt;br /&gt;
: 5. Open platform builder project &amp;lt;code&amp;gt;DHCOM_iMX6.pbxml&amp;lt;/code&amp;gt; at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\.&lt;br /&gt;
: 6. Select retail build. &lt;br /&gt;
:: [[Image:WEC7_retail_build.JPG|500px]]&lt;br /&gt;
: 7. Call build --&amp;gt; rebuild solution to build the WEC7 image.&lt;br /&gt;
: 8. After the image build has completed successfully, the &amp;lt;code&amp;gt;nk.nb0&amp;lt;/code&amp;gt; image is stored at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\RelDir\_1_Retail_DHCOM_iMX6_ARMV7\.&lt;br /&gt;
: 9. Copy the new nk.nb0 to your mircoSD card and restart the system.&lt;br /&gt;
: &#039;&#039;&#039;Note:&#039;&#039;&#039; To delete the symbolic links (see 3.) please call &amp;lt;code&amp;gt;unlink-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC7 / WEC2013 DHHalLib (function library) ==&lt;br /&gt;
The DHHalLib provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_GPIOEnum;&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   }*pDHCOM_GPIOISRType;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, HANDLE *hEvent, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;HANDLE *hEvent&amp;lt;/code&amp;gt; = external EventHandle Pointer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_I2CEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   }*pDHCOM_I2CFREQMode;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pInBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; The following SPI Devices can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_SPIEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; Byte order in first array-element is always &amp;quot;little endian&amp;quot;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; First bit transferred is at bit-position &amp;quot;0&amp;quot; of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is always located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 5:&#039;&#039;&#039; If data length &amp;gt; 32 bits, all bit positions of required array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) are always utilized.&lt;br /&gt;
:&#039;&#039;&#039;Note 6:&#039;&#039;&#039; Byte order in array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) is always &amp;quot;big endian&amp;quot;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 7:&#039;&#039;&#039; First bit transferred in array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) is at bit-position &amp;quot;31&amp;quot;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&lt;br /&gt;
 | ---- If remainder of above modulo is &amp;gt; 0 then bit(s) shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;       | ---- All bit positions of required array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) are always utilized     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Examples less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                                                     | &amp;lt;--8 bit(s)--&amp;gt;| Example:  8 bit(s)&lt;br /&gt;
 |                                            | &amp;lt;---- 17 bit(s) to send/receive  ---&amp;gt;  | Example: 17 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Examples greater 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | Example: 33 bit(s) to send/receive                                                |         &amp;lt;---- first bit located at bit-position &amp;quot;0&amp;quot; of array-element &amp;quot;0&amp;quot; ---&amp;gt;         |&lt;br /&gt;
 | Example: 34 bit(s) to send/receive                                              |        &amp;lt;---- first bit located at bit-position &amp;quot;1&amp;quot; of array-element &amp;quot;0&amp;quot; ---&amp;gt;            |&lt;br /&gt;
 | Example: 41 bit(s) to send/receive                                |            &amp;lt;---- first bit located at bit-position &amp;quot;9&amp;quot; of array-element &amp;quot;0&amp;quot; ---&amp;gt;                      | &lt;br /&gt;
 | Example: 64 bit(s) to send/receive           &amp;lt;---- first bit located at position &amp;quot;31&amp;quot; of array-element &amp;quot;0&amp;quot; (data length multiple of 32) ---&amp;gt;                              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, unsigned int iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned int iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, unsigned long *pOutBuffer, unsigned long *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   }*pDHCOM_UARTEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    }*pDHCOM_UARTModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    }*pDHCOM_UARTParityEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    }*pDHCOM_UARTStopBitEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    }*pDHCOM_UARTByteSizeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    }*pDHCOM_UARTWEvent;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, unsigned long lReadIntervalTimeout, unsigned long lReadTotalTimeoutConstant, unsigned long lReadTotalTimeoutMultiplier, unsigned long ulWriteTotalTimeoutConstant, unsigned long ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, unsigned char *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_CANEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    }*pDHCOM_CANModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    }*pDHCOM_CANFrameEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, unsigned long lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local priority (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, unsigned long lPrescaler, unsigned char cPropSeg, unsigned char cPhase1Seg, unsigned char cPhase2Seg, unsigned char RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, unsigned char cCANMsgPrio, unsigned long lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. 1000 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, int *iCANMsgID, int *iCANMsgLength, int *iCANFrame, unsigned char *cCANMsgPrio, unsigned long *lCANMsgTimeout, int *iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, unsigned char *pInBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, unsigned char *pOutBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    }*pDHCOM_PHYEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;(WEC7) / WEC2013 DHHalLib C# Wrapper (function wrapper) ==&lt;br /&gt;
The DHHalLib C# wrapper provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, ulong ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pOutBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These SPI Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                   Array[0]                                          |                                   Array[1]                                          |&lt;br /&gt;
 | ---- If data length less than 32 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               | &amp;lt;&amp;lt;&amp;lt;&amp;lt;---- If data length greater than 32 bit(s) data shift to left ----              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | ---- If data length less than 64 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               |                                                                                     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                         |   &amp;lt;---- 18 bit(s) to send/receive  ---&amp;gt;   | Example: 18 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example greater 32 bit(s) and less or equal than 64 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                             &amp;lt;---- first bit(s) of first data shift 1 to left ---&amp;lt; | | Example: 33 bit(s) to send/receive                                                  |&lt;br /&gt;
 |              &amp;lt;------   first bit(s) of first data shift 2 to left    -----&amp;lt;     |   | Example: 34 bit(s) to send/receive                                                  |&lt;br /&gt;
 |   &amp;lt;------  first bit(s) of first data shift 10 to left   -----&amp;lt; |                   | Example: 42 bit(s) to send/receive                                                  |&lt;br /&gt;
 |            &amp;lt;------  data bits eqal data, no data shift is need ------&amp;gt;              | Example: 64 bit(s) to send/receive                                                  |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq, bool useDMA) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, ulong[] pOutBuffer, ulong[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pOutBuffer&amp;lt;/code&amp;gt; = Array to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pInBuffer&amp;lt;/code&amp;gt; = Array to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(only available for C/C++ applications) &lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, ulong lReadIntervalTimeout, ulong lReadTotalTimeoutConstant, ulong lReadTotalTimeoutMultiplier, ulong ulWriteTotalTimeoutConstant, ulong ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, byte[] pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, UInt32 lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local prio (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, UInt32 lPrescaler, byte cPropSeg, byte cPhase1Seg, byte cPhase2Seg, byte RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, byte cCANMsgPrio, UInt32 lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. hex value: fa0 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, ref int iCANMsgID, ref int iCANMsgLength, ref int iCANFrame, ref byte cCANMsgPrio, ref UInt32 lCANMsgTimeout, ref int iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, byte[] pInBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, byte[] pOutBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Debugging ==&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now the debug session can be started from visual studio.&lt;br /&gt;
:: [[Image:WEC2013_debug.JPG|500px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 VNC Connection==&lt;br /&gt;
With WEC2013 efonVNC is used for remote desktop connection. For more information and license click [https://sourceforge.net/projects/efonvnc/?source=directory here].&lt;br /&gt;
: 1. vncconfig.exe can be used to configure password and connection details (stored in folder \apps\wec2013\ at testimage).&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
::* Configuration is stored in registry at path [HKEY_CURRENT_USER\Software\RealVNC\WinVNC4]&lt;br /&gt;
:: [[Image:VNC server 1.jpg|350px]]&lt;br /&gt;
:: [[Image:VNC server 2.jpg|350px]]&lt;br /&gt;
: 2. winvnc.exe (stored in folder \apps\wec2013\ at testimage) must be started. This is done atomatically at startup with the testimage. Otherwise the application can be started via telnet.&lt;br /&gt;
: 3. Download VNC viewer provided by RealVNC for PC/Laptop from [https://www.realvnc.com/download/viewer/ here]. For more information and license click [https://manage.realvnc.com/purchase/vnc here].&lt;br /&gt;
: 4. Run VNC viewer application and connect the device by using IP address and port number. &lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default IP address: 192.168.1.110&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
:: [[Image:VNC Viewer.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Remote Tools==&lt;br /&gt;
Before remote tools can be used, it is necessary to sstart some applications on WEC2013 Device.&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now it is possible to use remote tools from Visual Studio&lt;br /&gt;
:: [[Image:Remote_Tools.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Test Tools==&lt;br /&gt;
=== TEST_APP_CANTEST ===&lt;br /&gt;
: The app can be used to test DHCOM CAN Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:test_app_cantest.zip|Download CAN Demo source code ]] &lt;br /&gt;
: &#039;&#039;&#039;CAN WRITE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --write --len 8 --id 0x12 --idlen 11 --val 0x55 --remote 0 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* --len: Send 8 Bytes&lt;br /&gt;
::* --id: Message ID is 0x12&lt;br /&gt;
::* --idlen: 11 = Standard ID; 29 can be used fpr extended ID&lt;br /&gt;
::* --val: Data starts with 0x55, then 0x56, ...&lt;br /&gt;
::* --remote: 0 = no remote frame&lt;br /&gt;
: &#039;&#039;&#039;CAN READ:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --read --timeout 10000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application waits for 10 seconds to receive data.&lt;br /&gt;
: &#039;&#039;&#039;CAN GET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --getbitrate &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application shows the current used bitrate.&lt;br /&gt;
: &#039;&#039;&#039;CAN SET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --setbitrate --bitrate 250000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application sets bitrate to 250kbps.&lt;br /&gt;
&lt;br /&gt;
=== UART_Test===&lt;br /&gt;
: The app can be used to test DHCOM UART 2 Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:UART_Test.zip|Download UART Demo source code ]] &lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UART_Test &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application cyclic sends &amp;lt;code&amp;gt; &amp;quot;Hello World&amp;quot; &amp;lt;/code&amp;gt; and receives data.&lt;br /&gt;
::* The baudrate 115200 is used for the demo.&lt;br /&gt;
::* &amp;lt;code&amp;gt; q &amp;lt;/code&amp;gt; must be send to exit the demo.&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2043</id>
		<title>COM iMX6 WinCE</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2043"/>
		<updated>2017-08-08T09:07:16Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* SPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;WEC7 Tools ==&lt;br /&gt;
=== CE Remote Display Application ===&lt;br /&gt;
: The Remote Display allows to operate the target device&#039;s Win CE desktop from a Windows PC. It requires a USB ActiveSync connection.&lt;br /&gt;
: [[media:ASRDisp.zip|Download X86 remote display application (over ActiveSync connection)]]&lt;br /&gt;
: Usage&lt;br /&gt;
: 1. Extract the zip file on your PC.&lt;br /&gt;
: 2. Wait for the ActiveSync connection to be ready.&lt;br /&gt;
: 3. Start ASRDisp.exe.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;Binary BSP user guide ==&lt;br /&gt;
: 1. Download binary BSP (Please have a look at the [[COM_iMX6-D2#Downloads | iMX6 Downloads]] section.).&lt;br /&gt;
: 2. Unzip the files to any folder on your PC.&lt;br /&gt;
: 3. Call &amp;lt;code&amp;gt;link-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\, to generate symbolic links in the \WINCE700\ folder.&lt;br /&gt;
: 4. Start Visual Studio 2008 with WEC7 platform builder.&lt;br /&gt;
: 5. Open platform builder project &amp;lt;code&amp;gt;DHCOM_iMX6.pbxml&amp;lt;/code&amp;gt; at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\.&lt;br /&gt;
: 6. Select retail build. &lt;br /&gt;
:: [[Image:WEC7_retail_build.JPG|500px]]&lt;br /&gt;
: 7. Call build --&amp;gt; rebuild solution to build the WEC7 image.&lt;br /&gt;
: 8. After the image build has completed successfully, the &amp;lt;code&amp;gt;nk.nb0&amp;lt;/code&amp;gt; image is stored at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\RelDir\_1_Retail_DHCOM_iMX6_ARMV7\.&lt;br /&gt;
: 9. Copy the new nk.nb0 to your mircoSD card and restart the system.&lt;br /&gt;
: &#039;&#039;&#039;Note:&#039;&#039;&#039; To delete the symbolic links (see 3.) please call &amp;lt;code&amp;gt;unlink-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC7 / WEC2013 DHHalLib (function library) ==&lt;br /&gt;
The DHHalLib provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_GPIOEnum;&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   }*pDHCOM_GPIOISRType;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, HANDLE *hEvent, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;HANDLE *hEvent&amp;lt;/code&amp;gt; = external EventHandle Pointer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_I2CEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   }*pDHCOM_I2CFREQMode;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pInBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; The following SPI Devices can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_SPIEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; Byte order in first array-element is always &amp;quot;little endian&amp;quot;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; First bit transferred is at bit-position &amp;quot;0&amp;quot; of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is always located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 5:&#039;&#039;&#039; If data length &amp;gt; 32 bits, all bit positions of required array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) are always utilized.&lt;br /&gt;
:&#039;&#039;&#039;Note 6:&#039;&#039;&#039; Byte order in array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) is always &amp;quot;big endian&amp;quot;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 7:&#039;&#039;&#039; First bit transferred in array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) is at bit-position &amp;quot;31&amp;quot;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&lt;br /&gt;
 | ---- If remainder of above modulo is &amp;gt; 0 then bit(s) shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;       | ---- All bit positions of required array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) are always utilized     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                         |   &amp;lt;---- 18 bit(s) to send/receive  ---&amp;gt;   | Example: 18 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example greater 32 bit(s) and less or equal than 64 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                             &amp;lt;---- first bit(s) of first data shift 1 to left ---&amp;lt; | | Example: 33 bit(s) to send/receive                                                  |&lt;br /&gt;
 |              &amp;lt;------   first bit(s) of first data shift 2 to left    -----&amp;lt;     |   | Example: 34 bit(s) to send/receive                                                  |&lt;br /&gt;
 |   &amp;lt;------  first bit(s) of first data shift 10 to left   -----&amp;lt; |                   | Example: 42 bit(s) to send/receive                                                  |&lt;br /&gt;
 |            &amp;lt;------  data bits eqal data, no data shift is need ------&amp;gt;              | Example: 64 bit(s) to send/receive                                                  |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, unsigned int iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned int iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, unsigned long *pOutBuffer, unsigned long *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   }*pDHCOM_UARTEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    }*pDHCOM_UARTModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    }*pDHCOM_UARTParityEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    }*pDHCOM_UARTStopBitEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    }*pDHCOM_UARTByteSizeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    }*pDHCOM_UARTWEvent;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, unsigned long lReadIntervalTimeout, unsigned long lReadTotalTimeoutConstant, unsigned long lReadTotalTimeoutMultiplier, unsigned long ulWriteTotalTimeoutConstant, unsigned long ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, unsigned char *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_CANEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    }*pDHCOM_CANModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    }*pDHCOM_CANFrameEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, unsigned long lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local priority (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, unsigned long lPrescaler, unsigned char cPropSeg, unsigned char cPhase1Seg, unsigned char cPhase2Seg, unsigned char RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, unsigned char cCANMsgPrio, unsigned long lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. 1000 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, int *iCANMsgID, int *iCANMsgLength, int *iCANFrame, unsigned char *cCANMsgPrio, unsigned long *lCANMsgTimeout, int *iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, unsigned char *pInBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, unsigned char *pOutBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    }*pDHCOM_PHYEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;(WEC7) / WEC2013 DHHalLib C# Wrapper (function wrapper) ==&lt;br /&gt;
The DHHalLib C# wrapper provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, ulong ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pOutBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These SPI Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                   Array[0]                                          |                                   Array[1]                                          |&lt;br /&gt;
 | ---- If data length less than 32 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               | &amp;lt;&amp;lt;&amp;lt;&amp;lt;---- If data length greater than 32 bit(s) data shift to left ----              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | ---- If data length less than 64 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               |                                                                                     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                         |   &amp;lt;---- 18 bit(s) to send/receive  ---&amp;gt;   | Example: 18 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example greater 32 bit(s) and less or equal than 64 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                             &amp;lt;---- first bit(s) of first data shift 1 to left ---&amp;lt; | | Example: 33 bit(s) to send/receive                                                  |&lt;br /&gt;
 |              &amp;lt;------   first bit(s) of first data shift 2 to left    -----&amp;lt;     |   | Example: 34 bit(s) to send/receive                                                  |&lt;br /&gt;
 |   &amp;lt;------  first bit(s) of first data shift 10 to left   -----&amp;lt; |                   | Example: 42 bit(s) to send/receive                                                  |&lt;br /&gt;
 |            &amp;lt;------  data bits eqal data, no data shift is need ------&amp;gt;              | Example: 64 bit(s) to send/receive                                                  |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq, bool useDMA) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, ulong[] pOutBuffer, ulong[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pOutBuffer&amp;lt;/code&amp;gt; = Array to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pInBuffer&amp;lt;/code&amp;gt; = Array to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(only available for C/C++ applications) &lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, ulong lReadIntervalTimeout, ulong lReadTotalTimeoutConstant, ulong lReadTotalTimeoutMultiplier, ulong ulWriteTotalTimeoutConstant, ulong ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, byte[] pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, UInt32 lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local prio (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, UInt32 lPrescaler, byte cPropSeg, byte cPhase1Seg, byte cPhase2Seg, byte RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, byte cCANMsgPrio, UInt32 lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. hex value: fa0 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, ref int iCANMsgID, ref int iCANMsgLength, ref int iCANFrame, ref byte cCANMsgPrio, ref UInt32 lCANMsgTimeout, ref int iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, byte[] pInBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, byte[] pOutBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Debugging ==&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now the debug session can be started from visual studio.&lt;br /&gt;
:: [[Image:WEC2013_debug.JPG|500px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 VNC Connection==&lt;br /&gt;
With WEC2013 efonVNC is used for remote desktop connection. For more information and license click [https://sourceforge.net/projects/efonvnc/?source=directory here].&lt;br /&gt;
: 1. vncconfig.exe can be used to configure password and connection details (stored in folder \apps\wec2013\ at testimage).&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
::* Configuration is stored in registry at path [HKEY_CURRENT_USER\Software\RealVNC\WinVNC4]&lt;br /&gt;
:: [[Image:VNC server 1.jpg|350px]]&lt;br /&gt;
:: [[Image:VNC server 2.jpg|350px]]&lt;br /&gt;
: 2. winvnc.exe (stored in folder \apps\wec2013\ at testimage) must be started. This is done atomatically at startup with the testimage. Otherwise the application can be started via telnet.&lt;br /&gt;
: 3. Download VNC viewer provided by RealVNC for PC/Laptop from [https://www.realvnc.com/download/viewer/ here]. For more information and license click [https://manage.realvnc.com/purchase/vnc here].&lt;br /&gt;
: 4. Run VNC viewer application and connect the device by using IP address and port number. &lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default IP address: 192.168.1.110&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
:: [[Image:VNC Viewer.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Remote Tools==&lt;br /&gt;
Before remote tools can be used, it is necessary to sstart some applications on WEC2013 Device.&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now it is possible to use remote tools from Visual Studio&lt;br /&gt;
:: [[Image:Remote_Tools.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Test Tools==&lt;br /&gt;
=== TEST_APP_CANTEST ===&lt;br /&gt;
: The app can be used to test DHCOM CAN Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:test_app_cantest.zip|Download CAN Demo source code ]] &lt;br /&gt;
: &#039;&#039;&#039;CAN WRITE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --write --len 8 --id 0x12 --idlen 11 --val 0x55 --remote 0 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* --len: Send 8 Bytes&lt;br /&gt;
::* --id: Message ID is 0x12&lt;br /&gt;
::* --idlen: 11 = Standard ID; 29 can be used fpr extended ID&lt;br /&gt;
::* --val: Data starts with 0x55, then 0x56, ...&lt;br /&gt;
::* --remote: 0 = no remote frame&lt;br /&gt;
: &#039;&#039;&#039;CAN READ:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --read --timeout 10000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application waits for 10 seconds to receive data.&lt;br /&gt;
: &#039;&#039;&#039;CAN GET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --getbitrate &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application shows the current used bitrate.&lt;br /&gt;
: &#039;&#039;&#039;CAN SET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --setbitrate --bitrate 250000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application sets bitrate to 250kbps.&lt;br /&gt;
&lt;br /&gt;
=== UART_Test===&lt;br /&gt;
: The app can be used to test DHCOM UART 2 Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:UART_Test.zip|Download UART Demo source code ]] &lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UART_Test &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application cyclic sends &amp;lt;code&amp;gt; &amp;quot;Hello World&amp;quot; &amp;lt;/code&amp;gt; and receives data.&lt;br /&gt;
::* The baudrate 115200 is used for the demo.&lt;br /&gt;
::* &amp;lt;code&amp;gt; q &amp;lt;/code&amp;gt; must be send to exit the demo.&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2042</id>
		<title>COM iMX6 WinCE</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2042"/>
		<updated>2017-08-08T08:57:40Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* SPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;WEC7 Tools ==&lt;br /&gt;
=== CE Remote Display Application ===&lt;br /&gt;
: The Remote Display allows to operate the target device&#039;s Win CE desktop from a Windows PC. It requires a USB ActiveSync connection.&lt;br /&gt;
: [[media:ASRDisp.zip|Download X86 remote display application (over ActiveSync connection)]]&lt;br /&gt;
: Usage&lt;br /&gt;
: 1. Extract the zip file on your PC.&lt;br /&gt;
: 2. Wait for the ActiveSync connection to be ready.&lt;br /&gt;
: 3. Start ASRDisp.exe.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;Binary BSP user guide ==&lt;br /&gt;
: 1. Download binary BSP (Please have a look at the [[COM_iMX6-D2#Downloads | iMX6 Downloads]] section.).&lt;br /&gt;
: 2. Unzip the files to any folder on your PC.&lt;br /&gt;
: 3. Call &amp;lt;code&amp;gt;link-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\, to generate symbolic links in the \WINCE700\ folder.&lt;br /&gt;
: 4. Start Visual Studio 2008 with WEC7 platform builder.&lt;br /&gt;
: 5. Open platform builder project &amp;lt;code&amp;gt;DHCOM_iMX6.pbxml&amp;lt;/code&amp;gt; at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\.&lt;br /&gt;
: 6. Select retail build. &lt;br /&gt;
:: [[Image:WEC7_retail_build.JPG|500px]]&lt;br /&gt;
: 7. Call build --&amp;gt; rebuild solution to build the WEC7 image.&lt;br /&gt;
: 8. After the image build has completed successfully, the &amp;lt;code&amp;gt;nk.nb0&amp;lt;/code&amp;gt; image is stored at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\RelDir\_1_Retail_DHCOM_iMX6_ARMV7\.&lt;br /&gt;
: 9. Copy the new nk.nb0 to your mircoSD card and restart the system.&lt;br /&gt;
: &#039;&#039;&#039;Note:&#039;&#039;&#039; To delete the symbolic links (see 3.) please call &amp;lt;code&amp;gt;unlink-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC7 / WEC2013 DHHalLib (function library) ==&lt;br /&gt;
The DHHalLib provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_GPIOEnum;&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   }*pDHCOM_GPIOISRType;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, HANDLE *hEvent, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;HANDLE *hEvent&amp;lt;/code&amp;gt; = external EventHandle Pointer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_I2CEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   }*pDHCOM_I2CFREQMode;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pInBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; The following SPI Devices can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_SPIEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; Byte order in first array-element is always &amp;quot;little endian&amp;quot;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; First bit transferred is at bit-position &amp;quot;0&amp;quot; of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is always located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 5:&#039;&#039;&#039; Byte order in array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) is always &amp;quot;big endian&amp;quot;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 6:&#039;&#039;&#039; First bit transferred in array-elements &amp;quot;n&amp;quot; (n&amp;gt;0) is at bit-position &amp;quot;31&amp;quot;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&lt;br /&gt;
 | ---- If data length less than 32 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               | &amp;lt;&amp;lt;&amp;lt;&amp;lt;---- If data length greater than 32 bit(s) data shift to left ----              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | ---- If data length less than 64 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               |                                                                                     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                         |   &amp;lt;---- 18 bit(s) to send/receive  ---&amp;gt;   | Example: 18 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example greater 32 bit(s) and less or equal than 64 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                             &amp;lt;---- first bit(s) of first data shift 1 to left ---&amp;lt; | | Example: 33 bit(s) to send/receive                                                  |&lt;br /&gt;
 |              &amp;lt;------   first bit(s) of first data shift 2 to left    -----&amp;lt;     |   | Example: 34 bit(s) to send/receive                                                  |&lt;br /&gt;
 |   &amp;lt;------  first bit(s) of first data shift 10 to left   -----&amp;lt; |                   | Example: 42 bit(s) to send/receive                                                  |&lt;br /&gt;
 |            &amp;lt;------  data bits eqal data, no data shift is need ------&amp;gt;              | Example: 64 bit(s) to send/receive                                                  |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, unsigned int iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned int iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, unsigned long *pOutBuffer, unsigned long *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   }*pDHCOM_UARTEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    }*pDHCOM_UARTModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    }*pDHCOM_UARTParityEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    }*pDHCOM_UARTStopBitEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    }*pDHCOM_UARTByteSizeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    }*pDHCOM_UARTWEvent;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, unsigned long lReadIntervalTimeout, unsigned long lReadTotalTimeoutConstant, unsigned long lReadTotalTimeoutMultiplier, unsigned long ulWriteTotalTimeoutConstant, unsigned long ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, unsigned char *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_CANEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    }*pDHCOM_CANModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    }*pDHCOM_CANFrameEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, unsigned long lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local priority (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, unsigned long lPrescaler, unsigned char cPropSeg, unsigned char cPhase1Seg, unsigned char cPhase2Seg, unsigned char RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, unsigned char cCANMsgPrio, unsigned long lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. 1000 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, int *iCANMsgID, int *iCANMsgLength, int *iCANFrame, unsigned char *cCANMsgPrio, unsigned long *lCANMsgTimeout, int *iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, unsigned char *pInBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, unsigned char *pOutBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    }*pDHCOM_PHYEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;(WEC7) / WEC2013 DHHalLib C# Wrapper (function wrapper) ==&lt;br /&gt;
The DHHalLib C# wrapper provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, ulong ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pOutBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These SPI Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                   Array[0]                                          |                                   Array[1]                                          |&lt;br /&gt;
 | ---- If data length less than 32 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               | &amp;lt;&amp;lt;&amp;lt;&amp;lt;---- If data length greater than 32 bit(s) data shift to left ----              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | ---- If data length less than 64 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               |                                                                                     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                         |   &amp;lt;---- 18 bit(s) to send/receive  ---&amp;gt;   | Example: 18 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example greater 32 bit(s) and less or equal than 64 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                             &amp;lt;---- first bit(s) of first data shift 1 to left ---&amp;lt; | | Example: 33 bit(s) to send/receive                                                  |&lt;br /&gt;
 |              &amp;lt;------   first bit(s) of first data shift 2 to left    -----&amp;lt;     |   | Example: 34 bit(s) to send/receive                                                  |&lt;br /&gt;
 |   &amp;lt;------  first bit(s) of first data shift 10 to left   -----&amp;lt; |                   | Example: 42 bit(s) to send/receive                                                  |&lt;br /&gt;
 |            &amp;lt;------  data bits eqal data, no data shift is need ------&amp;gt;              | Example: 64 bit(s) to send/receive                                                  |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq, bool useDMA) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, ulong[] pOutBuffer, ulong[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pOutBuffer&amp;lt;/code&amp;gt; = Array to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pInBuffer&amp;lt;/code&amp;gt; = Array to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(only available for C/C++ applications) &lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, ulong lReadIntervalTimeout, ulong lReadTotalTimeoutConstant, ulong lReadTotalTimeoutMultiplier, ulong ulWriteTotalTimeoutConstant, ulong ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, byte[] pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, UInt32 lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local prio (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, UInt32 lPrescaler, byte cPropSeg, byte cPhase1Seg, byte cPhase2Seg, byte RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, byte cCANMsgPrio, UInt32 lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. hex value: fa0 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, ref int iCANMsgID, ref int iCANMsgLength, ref int iCANFrame, ref byte cCANMsgPrio, ref UInt32 lCANMsgTimeout, ref int iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, byte[] pInBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, byte[] pOutBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Debugging ==&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now the debug session can be started from visual studio.&lt;br /&gt;
:: [[Image:WEC2013_debug.JPG|500px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 VNC Connection==&lt;br /&gt;
With WEC2013 efonVNC is used for remote desktop connection. For more information and license click [https://sourceforge.net/projects/efonvnc/?source=directory here].&lt;br /&gt;
: 1. vncconfig.exe can be used to configure password and connection details (stored in folder \apps\wec2013\ at testimage).&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
::* Configuration is stored in registry at path [HKEY_CURRENT_USER\Software\RealVNC\WinVNC4]&lt;br /&gt;
:: [[Image:VNC server 1.jpg|350px]]&lt;br /&gt;
:: [[Image:VNC server 2.jpg|350px]]&lt;br /&gt;
: 2. winvnc.exe (stored in folder \apps\wec2013\ at testimage) must be started. This is done atomatically at startup with the testimage. Otherwise the application can be started via telnet.&lt;br /&gt;
: 3. Download VNC viewer provided by RealVNC for PC/Laptop from [https://www.realvnc.com/download/viewer/ here]. For more information and license click [https://manage.realvnc.com/purchase/vnc here].&lt;br /&gt;
: 4. Run VNC viewer application and connect the device by using IP address and port number. &lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default IP address: 192.168.1.110&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
:: [[Image:VNC Viewer.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Remote Tools==&lt;br /&gt;
Before remote tools can be used, it is necessary to sstart some applications on WEC2013 Device.&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now it is possible to use remote tools from Visual Studio&lt;br /&gt;
:: [[Image:Remote_Tools.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Test Tools==&lt;br /&gt;
=== TEST_APP_CANTEST ===&lt;br /&gt;
: The app can be used to test DHCOM CAN Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:test_app_cantest.zip|Download CAN Demo source code ]] &lt;br /&gt;
: &#039;&#039;&#039;CAN WRITE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --write --len 8 --id 0x12 --idlen 11 --val 0x55 --remote 0 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* --len: Send 8 Bytes&lt;br /&gt;
::* --id: Message ID is 0x12&lt;br /&gt;
::* --idlen: 11 = Standard ID; 29 can be used fpr extended ID&lt;br /&gt;
::* --val: Data starts with 0x55, then 0x56, ...&lt;br /&gt;
::* --remote: 0 = no remote frame&lt;br /&gt;
: &#039;&#039;&#039;CAN READ:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --read --timeout 10000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application waits for 10 seconds to receive data.&lt;br /&gt;
: &#039;&#039;&#039;CAN GET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --getbitrate &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application shows the current used bitrate.&lt;br /&gt;
: &#039;&#039;&#039;CAN SET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --setbitrate --bitrate 250000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application sets bitrate to 250kbps.&lt;br /&gt;
&lt;br /&gt;
=== UART_Test===&lt;br /&gt;
: The app can be used to test DHCOM UART 2 Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:UART_Test.zip|Download UART Demo source code ]] &lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UART_Test &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application cyclic sends &amp;lt;code&amp;gt; &amp;quot;Hello World&amp;quot; &amp;lt;/code&amp;gt; and receives data.&lt;br /&gt;
::* The baudrate 115200 is used for the demo.&lt;br /&gt;
::* &amp;lt;code&amp;gt; q &amp;lt;/code&amp;gt; must be send to exit the demo.&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2041</id>
		<title>COM iMX6 WinCE</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=2041"/>
		<updated>2017-08-08T08:42:20Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* SPI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;WEC7 Tools ==&lt;br /&gt;
=== CE Remote Display Application ===&lt;br /&gt;
: The Remote Display allows to operate the target device&#039;s Win CE desktop from a Windows PC. It requires a USB ActiveSync connection.&lt;br /&gt;
: [[media:ASRDisp.zip|Download X86 remote display application (over ActiveSync connection)]]&lt;br /&gt;
: Usage&lt;br /&gt;
: 1. Extract the zip file on your PC.&lt;br /&gt;
: 2. Wait for the ActiveSync connection to be ready.&lt;br /&gt;
: 3. Start ASRDisp.exe.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;Binary BSP user guide ==&lt;br /&gt;
: 1. Download binary BSP (Please have a look at the [[COM_iMX6-D2#Downloads | iMX6 Downloads]] section.).&lt;br /&gt;
: 2. Unzip the files to any folder on your PC.&lt;br /&gt;
: 3. Call &amp;lt;code&amp;gt;link-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\, to generate symbolic links in the \WINCE700\ folder.&lt;br /&gt;
: 4. Start Visual Studio 2008 with WEC7 platform builder.&lt;br /&gt;
: 5. Open platform builder project &amp;lt;code&amp;gt;DHCOM_iMX6.pbxml&amp;lt;/code&amp;gt; at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\.&lt;br /&gt;
: 6. Select retail build. &lt;br /&gt;
:: [[Image:WEC7_retail_build.JPG|500px]]&lt;br /&gt;
: 7. Call build --&amp;gt; rebuild solution to build the WEC7 image.&lt;br /&gt;
: 8. After the image build has completed successfully, the &amp;lt;code&amp;gt;nk.nb0&amp;lt;/code&amp;gt; image is stored at location C:\WINCE700\OSDesigns\DHCOM_iMX6_WEC7\RelDir\_1_Retail_DHCOM_iMX6_ARMV7\.&lt;br /&gt;
: 9. Copy the new nk.nb0 to your mircoSD card and restart the system.&lt;br /&gt;
: &#039;&#039;&#039;Note:&#039;&#039;&#039; To delete the symbolic links (see 3.) please call &amp;lt;code&amp;gt;unlink-DHCOM_iMX6_BIN_GEN.bat&amp;lt;/code&amp;gt; file in the folder ...\DHCOM_iMX6_BSP_BIN\&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC7 / WEC2013 DHHalLib (function library) ==&lt;br /&gt;
The DHHalLib provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; unsigned long WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;unsigned long&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_GPIOEnum;&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   }*pDHCOM_GPIOISRType;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, HANDLE *hEvent, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;HANDLE *hEvent&amp;lt;/code&amp;gt; = external EventHandle Pointer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, unsigned long ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_I2CEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   }*pDHCOM_I2CFREQMode;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, unsigned char cDevId, unsigned char cI2CReg, unsigned char cBytes, unsigned char *pInBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; The following SPI Devices can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_SPIEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Byte order of data is always &amp;quot;little endian&amp;quot;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                   Array[0]                                          |                                   Array[1]                                          |&lt;br /&gt;
 | ---- If data length less than 32 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               | &amp;lt;&amp;lt;&amp;lt;&amp;lt;---- If data length greater than 32 bit(s) data shift to left ----              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | ---- If data length less than 64 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               |                                                                                     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                         |   &amp;lt;---- 18 bit(s) to send/receive  ---&amp;gt;   | Example: 18 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example greater 32 bit(s) and less or equal than 64 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                             &amp;lt;---- first bit(s) of first data shift 1 to left ---&amp;lt; | | Example: 33 bit(s) to send/receive                                                  |&lt;br /&gt;
 |              &amp;lt;------   first bit(s) of first data shift 2 to left    -----&amp;lt;     |   | Example: 34 bit(s) to send/receive                                                  |&lt;br /&gt;
 |   &amp;lt;------  first bit(s) of first data shift 10 to left   -----&amp;lt; |                   | Example: 42 bit(s) to send/receive                                                  |&lt;br /&gt;
 |            &amp;lt;------  data bits eqal data, no data shift is need ------&amp;gt;              | Example: 64 bit(s) to send/receive                                                  |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, unsigned int iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned int iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, unsigned long *pOutBuffer, unsigned long *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   }*pDHCOM_UARTEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    }*pDHCOM_UARTModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    }*pDHCOM_UARTParityEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    }*pDHCOM_UARTStopBitEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    }*pDHCOM_UARTByteSizeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    }*pDHCOM_UARTWEvent;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, unsigned long lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, unsigned long lReadIntervalTimeout, unsigned long lReadTotalTimeoutConstant, unsigned long lReadTotalTimeoutMultiplier, unsigned long ulWriteTotalTimeoutConstant, unsigned long ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt; unsigned long ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, unsigned char *pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, unsigned char *pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   typedef enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_CANEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    }*pDHCOM_CANModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    }*pDHCOM_CANFrameEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, unsigned long lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local priority (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, unsigned long lPrescaler, unsigned char cPropSeg, unsigned char cPhase1Seg, unsigned char cPhase2Seg, unsigned char RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, unsigned char cCANMsgPrio, unsigned long lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for can write&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. 1000 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, int *iCANMsgID, int *iCANMsgLength, int *iCANFrame, unsigned char *cCANMsgPrio, unsigned long *lCANMsgTimeout, int *iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long *lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, unsigned char *pInBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, unsigned char *pOutBuffer, int iDataLength, int *iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char *pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;int *iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    typedef enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    }*pDHCOM_PHYEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, unsigned long ulPhyAddr, unsigned char cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned long ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;unsigned char cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;(WEC7) / WEC2013 DHHalLib C# Wrapper (function wrapper) ==&lt;br /&gt;
The DHHalLib C# wrapper provides hardware related functions for Windows Embedded CE 6, Windows Embedded Compact 7 and Windows Embedded Compact 2013. All the functionality is available from the user mode.&lt;br /&gt;
&lt;br /&gt;
=== Version numbers ===&lt;br /&gt;
:&#039;&#039;&#039;Read DHHalLib version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 DHHalLibGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;BSP version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 BSPGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
:Note: The version number information is stored in the following registry key: &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\Ident] dword:&amp;quot;BSPVersionNumber&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read image version&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UInt32 WinCEImageGetVersion() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;UInt32&amp;lt;/code&amp;gt; --&amp;gt; version number (e.g. 0x01040001 for version 1.4.0.1)&lt;br /&gt;
&lt;br /&gt;
=== GPIO ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These functions can only access the DHCOM standard GPIOs. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOEnum&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_A,&lt;br /&gt;
     DHCOM_GPIO_B,&lt;br /&gt;
     DHCOM_GPIO_C,&lt;br /&gt;
     DHCOM_GPIO_D,&lt;br /&gt;
     DHCOM_GPIO_E,&lt;br /&gt;
     DHCOM_GPIO_F,&lt;br /&gt;
     DHCOM_GPIO_G,&lt;br /&gt;
     DHCOM_GPIO_H,&lt;br /&gt;
     DHCOM_GPIO_I,&lt;br /&gt;
     DHCOM_GPIO_J,&lt;br /&gt;
     DHCOM_GPIO_K,&lt;br /&gt;
     DHCOM_GPIO_L,&lt;br /&gt;
     DHCOM_GPIO_M,&lt;br /&gt;
     DHCOM_GPIO_N,&lt;br /&gt;
     DHCOM_GPIO_O,&lt;br /&gt;
     DHCOM_GPIO_P,&lt;br /&gt;
     DHCOM_GPIO_Q,&lt;br /&gt;
     DHCOM_GPIO_R,&lt;br /&gt;
     DHCOM_GPIO_S,&lt;br /&gt;
     DHCOM_GPIO_T,&lt;br /&gt;
     DHCOM_GPIO_U,&lt;br /&gt;
     DHCOM_GPIO_V,&lt;br /&gt;
     DHCOM_GPIO_W,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_GPIOISRType&lt;br /&gt;
   {&lt;br /&gt;
     DHCOM_GPIO_INTR_LOW_LEV=0,&lt;br /&gt;
     DHCOM_GPIO_INTR_HIGH_LEV,&lt;br /&gt;
     DHCOM_GPIO_INTR_RISE_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_FALL_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_BOTH_EDGE,&lt;br /&gt;
     DHCOM_GPIO_INTR_NONE&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Direction&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetDirection( DHCOM_GPIOEnum eGpio, bool bInOut, bool bDefaultState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio &amp;lt;/code&amp;gt;= DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bInOut&amp;lt;/code&amp;gt; = GPIO direction (1 = input / 0 = output)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bDefaultState &amp;lt;/code&amp;gt;= Default state (0 = low / 1 = high)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void GPIOSetPin(DHCOM_GPIOEnum eGpio, bool bState) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = pin state ( 0 = low / 1 = high)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read state&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOGetPin(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; 0 = low; 1 = high&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Set Single Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOSetSingleInterrupt(DHCOM_GPIOEnum eGpio, DHCOM_GPIOISRType eISRType, ulong ulTimeout) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOISRType eISRType&amp;lt;/code&amp;gt; = DHCOM GPIO interrupt trigger level&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulTimeout&amp;lt;/code&amp;gt; = Interrupt timeout (0 = infinite)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bState&amp;lt;/code&amp;gt; = GPIO Interrupt State&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear Interrupt&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool GPIOClearInterrupt(DHCOM_GPIOEnum eGpio) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: Gpio Interrupt cannot disable by Hardware.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_GPIOEnum eGpio&amp;lt;/code&amp;gt; = DHCOM GPIO pin name&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These I2C Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CEnum&lt;br /&gt;
   {&lt;br /&gt;
    DHCOM_I2C0=0,&lt;br /&gt;
    DHCOM_I2C1,&lt;br /&gt;
    DHCOM_I2C2,&lt;br /&gt;
    DHCOM_I2C3,&lt;br /&gt;
    DHCOM_I2C_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_I2CFREQMode&lt;br /&gt;
   {&lt;br /&gt;
    I2C_100K=0,&lt;br /&gt;
    I2C_400K,&lt;br /&gt;
    I2C_800K,I2C_1600K,&lt;br /&gt;
    I2C_2400K,&lt;br /&gt;
    I2C_3200K&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2COpen(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void I2CClose(DHCOM_I2CEnum eI2CPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CRead(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the read byte&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWrite(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cValue) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cValue&amp;lt;/code&amp;gt; = Value to be written&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CReadMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the read buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write multiple bytes&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool I2CWriteMultipleBytes(DHCOM_I2CEnum eI2CPort, DHCOM_I2CFREQMode eI2CFreq, byte cDevId, byte cI2CReg, byte cBytes, byte[] pOutBuffer)&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CEnum eI2CPort&amp;lt;/code&amp;gt; = DHCOM I2C port name (e.g. DHCOM_I2C0)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_I2CFREQMode eI2CFreq&amp;lt;/code&amp;gt; = DHCOM I2C port freqency name(e.g. I2C_100K)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cDevId&amp;lt;/code&amp;gt; = I2C device address (0..127)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cI2CReg&amp;lt;/code&amp;gt; = I2C device register address (0..255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cBytes&amp;lt;/code&amp;gt; = Number of bytes to be read (max. 255)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== SPI ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These SPI Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_SPIEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_SPI1=0,&lt;br /&gt;
        DHCOM_SPI2,&lt;br /&gt;
        DHCOM_SPI_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These chip selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_SPIModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        SPI_CS0=0,&lt;br /&gt;
        SPI_CS1,&lt;br /&gt;
        SPI_CS2,&lt;br /&gt;
        SPI_CS3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; Buffer fill instructions&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                   Array[0]                                          |                                   Array[1]                                          |&lt;br /&gt;
 | ---- If data length less than 32 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               | &amp;lt;&amp;lt;&amp;lt;&amp;lt;---- If data length greater than 32 bit(s) data shift to left ----              |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 | ---- If data length less than 64 bit(s) data shift to right -----&amp;gt;&amp;gt;&amp;gt;&amp;gt;               |                                                                                     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example less or equal than 32 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0| Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                                         |   &amp;lt;---- 18 bit(s) to send/receive  ---&amp;gt;   | Example: 18 bit(s)&lt;br /&gt;
 |                       |       &amp;lt;------   24 bit(s) to send/receive    -----&amp;gt;         | Example: 24 bit(s)&lt;br /&gt;
 |                    &amp;lt;------   32 bit(s) to send/receive    -----&amp;gt;                    | Example: 32 bit(s)&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Example greater 32 bit(s) and less or equal than 64 bit(s):&#039;&#039;&#039;&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |0 | 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|0|1|0|0|0|0|0|0|1|0|0 | 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 1| 1|1|1|1|0|1|0|1|0|1|0|&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |                             &amp;lt;---- first bit(s) of first data shift 1 to left ---&amp;lt; | | Example: 33 bit(s) to send/receive                                                  |&lt;br /&gt;
 |              &amp;lt;------   first bit(s) of first data shift 2 to left    -----&amp;lt;     |   | Example: 34 bit(s) to send/receive                                                  |&lt;br /&gt;
 |   &amp;lt;------  first bit(s) of first data shift 10 to left   -----&amp;lt; |                   | Example: 42 bit(s) to send/receive                                                  |&lt;br /&gt;
 |            &amp;lt;------  data bits eqal data, no data shift is need ------&amp;gt;              | Example: 64 bit(s) to send/receive                                                  |&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIOpen(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SPIClose(DHCOM_SPIEnum eSPIPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIConfigure(DHCOM_SPIEnum eSPIPort, DHCOM_SPIModeEnum eSPIMode, uint iSPIFreq, bool useDMA) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIModeEnum eSPIMode&amp;lt;/code&amp;gt; = DHCOM SPI mode name(e.g. DHCOM_CS0)&lt;br /&gt;
::&amp;lt;code&amp;gt;uint iSPIFreq&amp;lt;/code&amp;gt; = DHCOM SPI frequency (e.g. 16MHz = 16000000)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool useDMA&amp;lt;/code&amp;gt; = Enable DHCOM SPI DMA function&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Exchange&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SPIExchange(DHCOM_SPIEnum eSPIPort, int iBitCount, ulong[] pOutBuffer, ulong[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_SPIEnum eSPIPort&amp;lt;/code&amp;gt; = DHCOM SPI port name (e.g. DHCOM_SPI1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iBitCount&amp;lt;/code&amp;gt; = Count of bit(s) length to send/receive&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pOutBuffer&amp;lt;/code&amp;gt; = Array to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong[] pInBuffer&amp;lt;/code&amp;gt; = Array to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== UART ===&lt;br /&gt;
(only available for C/C++ applications) &lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These UART Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_UARTEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_UART1=1,&lt;br /&gt;
        DHCOM_UART2,&lt;br /&gt;
        DHCOM_UART3&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_HSHAKE_OFF=1,&lt;br /&gt;
        DHCOM_HSHAKE_SOFTWARE,&lt;br /&gt;
        DHCOM_HSHAKE_HARDWARE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These parity selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTParityEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_NOPARITY=0,&lt;br /&gt;
        DHCOM_ODDPARITY,&lt;br /&gt;
        DHCOM_EVENPARITY,&lt;br /&gt;
        DHCOM_MARKPARITY,&lt;br /&gt;
        DHCOM_SPACEPARITY&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These stopbit selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTStopBitEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_ONESTOPBIT=0,&lt;br /&gt;
        DHCOM_ONE5STOPBITS,&lt;br /&gt;
        DHCOM_TWOSTOPBITS&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These byte size selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTByteSizeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_5BIT=5,&lt;br /&gt;
        DHCOM_6BIT,&lt;br /&gt;
        DHCOM_7BIT,&lt;br /&gt;
        DHCOM_8BIT&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These event selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_UARTWEvent&lt;br /&gt;
    {&lt;br /&gt;
        SIG_RX_CHAR_DETECT_Flag=1,&lt;br /&gt;
        SIG_RX_EVENT_DETECT_Flag=2,&lt;br /&gt;
        SIG_TX_BUFFER_EMPTY_Flag=4,&lt;br /&gt;
        SIG_CTS_CHANGED_Flag=8,&lt;br /&gt;
        SIG_DSR_CHANGED_Flag=16,&lt;br /&gt;
        SIG_RLSD_CHANGED_Flag=32,&lt;br /&gt;
        SIG_BREAK_DETECT_Error=64,&lt;br /&gt;
        SIG_LINE_STATUS_Error=128,&lt;br /&gt;
        SIG_RING_DETECT_Error=512&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTOpen(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void UARTClose(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigure(DHCOM_UARTEnum eUARTPort, DHCOM_UARTModeEnum eUARTMode, DHCOM_UARTParityEnum eUARTParity, DHCOM_UARTStopBitEnum eUARTStopBit, DHCOM_UARTByteSizeEnum eUARTByteSize, ulong lUARTFreq) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTModeEnum eUARTMode&amp;lt;/code&amp;gt; = DHCOM UART mode name(e.g. DHCOM_HSHAKE_OFF)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTParityEnum eUARTParity&amp;lt;/code&amp;gt; = DHCOM UART parity name (e.g. DHCOM_NOPARITY)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTStopBitEnum eUARTStopBit&amp;lt;/code&amp;gt; = DHCOM UART stop bit name (e.g. DHCOM_ONESTOPBIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTByteSizeEnum eUARTByteSize&amp;lt;/code&amp;gt; = DHCOM UART byte size name (e.g. DHCOM_8BIT)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lUARTFreq&amp;lt;/code&amp;gt; = DHCOM UART frequency (e.g. 115200 bit/s = 115200)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTConfigureTimeout(DHCOM_UARTEnum eUARTPort, ulong lReadIntervalTimeout, ulong lReadTotalTimeoutConstant, ulong lReadTotalTimeoutMultiplier, ulong ulWriteTotalTimeoutConstant, ulong ulWriteTotalTimeoutMultiplier) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadIntervalTimeout&amp;lt;/code&amp;gt; = Read interval timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutConstant&amp;lt;/code&amp;gt; = Read total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong lReadTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Read total timeout multiplier&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutConstant&amp;lt;/code&amp;gt; = Write total timeout&lt;br /&gt;
::&amp;lt;code&amp;gt;ulong ulWriteTotalTimeoutMultiplier&amp;lt;/code&amp;gt; = Write total timeout multiplier&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear buffer&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTClearBuffer(DHCOM_UARTEnum eUARTPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTRead(DHCOM_UARTEnum eUARTPort, int iDataLength, byte[] pInBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool UARTWrite(DHCOM_UARTEnum eUARTPort, byte[] pOutBuffer) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_UARTEnum eUARTPort&amp;lt;/code&amp;gt; = DHCOM UART port name (e.g. DHCOM_UART1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== CAN ===&lt;br /&gt;
(Note: Currently available for WEC 2013)&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These CAN Devices can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
   public enum DHCOM_CANEnum&lt;br /&gt;
   {&lt;br /&gt;
        DHCOM_CAN1=1,&lt;br /&gt;
        DHCOM_CAN_NOT_DEFINED&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These mode selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANModeEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_STANDARD=0,&lt;br /&gt;
        DHCOM_CAN_EXTENDED&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These frame selects can be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_CANFrameEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_CAN_DATA=0,&lt;br /&gt;
        DHCOM_CAN_REMOTE&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Open&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANOpen(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN mode name(e.g. DHCOM_CAN_STANDARD)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Close&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void CANClose(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMode(DHCOM_CANEnum eCANPort, DHCOM_CANModeEnum eCANMode, UInt32 lCANBitrate = 0, bool bCANTLPrio = false, bool bCANLoopback = false) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANModeEnum eCANMode&amp;lt;/code&amp;gt; = DHCOM CAN id type (e.g. DHCOM_CAN_STANDARD | DHCOM_CAN_EXTENDED)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANBitrate&amp;lt;/code&amp;gt; = DHCOM UART bitrate (e.g. 500000 bit/s = 500kbit)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANTLPrio&amp;lt;/code&amp;gt; = DHCOM CAN transmit local prio (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bCANLoopback&amp;lt;/code&amp;gt; = DHCOM CAN loopback mode (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Timing&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureTiming(DHCOM_CANEnum eCANPort, UInt32 lPrescaler, byte cPropSeg, byte cPhase1Seg, byte cPhase2Seg, byte RJW) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lPrescaler&amp;lt;/code&amp;gt; = Prescaler value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPropSeg&amp;lt;/code&amp;gt; = Property segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase1Seg&amp;lt;/code&amp;gt; = Phase 1 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cPhase2Seg&amp;lt;/code&amp;gt; = Phase 2 segmentation time value&lt;br /&gt;
::&amp;lt;code&amp;gt;byte RJW&amp;lt;/code&amp;gt; = Request jump time value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureFilter(DHCOM_CANEnum eCANPort, int iFilterID, int iFilterIDMask, bool bFilterFormat, bool bFilterRemote) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN port name (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterID&amp;lt;/code&amp;gt; = Filter ID value&lt;br /&gt;
::&amp;lt;code&amp;gt;int iFilterIDMask&amp;lt;/code&amp;gt; = Filter ID Mask value&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterFormat&amp;lt;/code&amp;gt; = Filter format (e.g. false = disabled)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bFilterRemote&amp;lt;/code&amp;gt; = Filter remote frame (e.g. false = disabled)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remove Filter&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANResetFilter(DHCOM_CANEnum eCANPort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Configure Message&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANConfigureMessage(DHCOM_CANEnum eCANPort, DHCOM_CANFrameEnum eCANFrame, int iCANMsgID, byte cCANMsgPrio, UInt32 lCANMsgTimeout, bool bReadWrite) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANFrameEnum eCANFrame&amp;lt;/code&amp;gt; = DHCOM CAN frame type (e.g. DHCOM_CAN_DATA | DHCOM_CAN_REMOTE)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iCANMsgID&amp;lt;/code&amp;gt; = CAN Message identification number (e.g. 0x2) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cCANMsgPrio&amp;lt;/code&amp;gt; = CAN Message priority (e.g. 1) - only for write&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = CAN Message timeout (e.g. hex value: fa0 = 1 sec)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadWrite&amp;lt;/code&amp;gt; = (Read = false, Write = true)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Get Message Header&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANGetMessageParameter(DHCOM_CANEnum eCANPort, ref int iCANMsgID, ref int iCANMsgLength, ref int iCANFrame, ref byte cCANMsgPrio, ref UInt32 lCANMsgTimeout, ref int iTXAbort) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgID&amp;lt;/code&amp;gt; = Pointer to Message identification value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANMsgLength&amp;lt;/code&amp;gt; = Pointer to Message length value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iCANFrame&amp;lt;/code&amp;gt; = Pointer to Message frame value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref byte cCANMsgPrio&amp;lt;/code&amp;gt; = Pointer to Message priority value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref UInt32 lCANMsgTimeout&amp;lt;/code&amp;gt; = Pointer to Message timeout value&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iTXAbort&amp;lt;/code&amp;gt; = Pointer to Message TX abort value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANRead(DHCOM_CANEnum eCANPort, byte[] pInBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;Attention:&#039;&#039;&#039; CANConfigureFilter() might be call before you can read data.&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pInBuffer&amp;lt;/code&amp;gt; = Pointer to the input buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Read data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CANWrite(DHCOM_CANEnum eCANPort, byte[] pOutBuffer, int iDataLength, ref int iResult) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_CANEnum eCANPort&amp;lt;/code&amp;gt; = DHCOM CAN interface (e.g. DHCOM_CAN1)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte[] pOutBuffer&amp;lt;/code&amp;gt; = Pointer to the output buffer&lt;br /&gt;
::&amp;lt;code&amp;gt;int iDataLength&amp;lt;/code&amp;gt; = Write data length&lt;br /&gt;
::&amp;lt;code&amp;gt;ref int iResult&amp;lt;/code&amp;gt; = Pointer to the Result Value&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Physical Memory ===&lt;br /&gt;
:&#039;&#039;&#039;Note:&#039;&#039;&#039; These freqencies can only be set. The mapping is done with the following enum.&lt;br /&gt;
&lt;br /&gt;
    public enum DHCOM_PHYEnum&lt;br /&gt;
    {&lt;br /&gt;
        DHCOM_PHY1=1,&lt;br /&gt;
        DHCOM_PHY2,&lt;br /&gt;
        DHCOM_PHY3,&lt;br /&gt;
        DHCOM_PHY4,&lt;br /&gt;
        DHCOM_PHY5,&lt;br /&gt;
        DHCOM_PHY6,&lt;br /&gt;
        DHCOM_PHY7,&lt;br /&gt;
        DHCOM_PHY8,&lt;br /&gt;
        DHCOM_PHY9&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Write Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int WritePhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize, int iValue, bool bReadBack) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
::&amp;lt;code&amp;gt;int iValue&amp;lt;/code&amp;gt; = Value for Physical Address to write&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bReadBack&amp;lt;/code&amp;gt; = Enable/Disable Readback function (enable = true -&amp;gt; disable = false)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the written value from the specified Physical Address&lt;br /&gt;
:                    if bReadBack == TRUE, else 0x0 will be returned&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Read Physical Address&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; int ReadPhysicalAddress(DHCOM_PHYEnum PHYDev, UInt32 ulPhyAddr, byte cRegSize) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;DHCOM_PHYEnum PHYDev&amp;lt;/code&amp;gt; = DHCOM PHY Device name (e.g. DHCOM_PHY1)&lt;br /&gt;
::&amp;lt;code&amp;gt;UInt32 ulPhyAddr&amp;lt;/code&amp;gt; = Physical Address to write (e.g. GPIO1_MASK_REG = 0x209c014)&lt;br /&gt;
::&amp;lt;code&amp;gt;byte cRegSize&amp;lt;/code&amp;gt; = Register Size (8 = 8bit, 16 = 16bit, 32 = 32bit)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; --&amp;gt; returns the value from the specified Physical Address&lt;br /&gt;
&lt;br /&gt;
=== KITL ===&lt;br /&gt;
:&#039;&#039;&#039;Restart&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestartPowerKITL() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Control&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ControlPowerKITL(bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable KITL Connection&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Backlight ===&lt;br /&gt;
:&#039;&#039;&#039;Backlight Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightLevel(int Level) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 only Backlight Enable/Disable available. (Value 0 = Disable, Value 1 to 255 = Enable)&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Level&amp;lt;/code&amp;gt; = Backlight Level (0 ... 255)&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Backlight Timeout&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SetBacklightSuspend(int Timeout, bool bEnable) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;Note: In DHHalLib Version 1.0.0.0 not available.&#039;&#039;&lt;br /&gt;
:Input values: &lt;br /&gt;
::&amp;lt;code&amp;gt;int Timeout&amp;lt;/code&amp;gt; = Timeout for Backlight (seconds)&lt;br /&gt;
::&amp;lt;code&amp;gt;bool bEnable&amp;lt;/code&amp;gt; = Enable/Disable Timeout Backlight --&amp;gt; true = On; false = Off&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Touch screen===&lt;br /&gt;
:&#039;&#039;&#039;Calibrate touch&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CalibrateTouch() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Clear calibration data&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool ClearTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function delete the registry entry &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH] dword:&amp;quot;TouchCalibrationDone&amp;quot; &amp;lt;/code&amp;gt;. For saving the value permanent please call &amp;lt;code&amp;gt;SaveRegistry() &amp;lt;/code&amp;gt;afterwards.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
:&#039;&#039;&#039;Save HIVE registry&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool SaveRegistry() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Create backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool CreateRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function generates the files ave_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. These files can be used at a later time to restore the registry.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Restore backup&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; bool RestoreRegistryBackup() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function restores the registry from the files Save_HKLM_Reg.srg and Save_HKLCU_Reg.srg in the folder \Storage Card\. Afterwards a restart is carried out automatically. If the backup files are not present, then the function returns the return value flase.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = this never happens because a soft reset is performed; false = failed&lt;br /&gt;
&lt;br /&gt;
=== Watchdog &amp;amp; Reset ===&lt;br /&gt;
:&#039;&#039;&#039;Soft reset&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SoftReset() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Debugging ==&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now the debug session can be started from visual studio.&lt;br /&gt;
:: [[Image:WEC2013_debug.JPG|500px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 VNC Connection==&lt;br /&gt;
With WEC2013 efonVNC is used for remote desktop connection. For more information and license click [https://sourceforge.net/projects/efonvnc/?source=directory here].&lt;br /&gt;
: 1. vncconfig.exe can be used to configure password and connection details (stored in folder \apps\wec2013\ at testimage).&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
::* Configuration is stored in registry at path [HKEY_CURRENT_USER\Software\RealVNC\WinVNC4]&lt;br /&gt;
:: [[Image:VNC server 1.jpg|350px]]&lt;br /&gt;
:: [[Image:VNC server 2.jpg|350px]]&lt;br /&gt;
: 2. winvnc.exe (stored in folder \apps\wec2013\ at testimage) must be started. This is done atomatically at startup with the testimage. Otherwise the application can be started via telnet.&lt;br /&gt;
: 3. Download VNC viewer provided by RealVNC for PC/Laptop from [https://www.realvnc.com/download/viewer/ here]. For more information and license click [https://manage.realvnc.com/purchase/vnc here].&lt;br /&gt;
: 4. Run VNC viewer application and connect the device by using IP address and port number. &lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* default IP address: 192.168.1.110&lt;br /&gt;
::* default port number: 5900&lt;br /&gt;
:: [[Image:VNC Viewer.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Remote Tools==&lt;br /&gt;
Before remote tools can be used, it is necessary to sstart some applications on WEC2013 Device.&lt;br /&gt;
: 1. Enable connection to WEC2013 device via Telnet. DH electronics recommends PuTTY for Telnet connection.&lt;br /&gt;
::    Notes: PuTTY can be downloaded from [https://www.heise.de www.heise.de]. Default IP address is 192.168.1.110. No Login is used with the testsystem.&lt;br /&gt;
:: [[Image:PuTTY.JPG|500px]]&lt;br /&gt;
: 2. Before the Remote Debug session can be started it is necessary to start two applications via the telnet connection, by using the following commands:&lt;br /&gt;
::* START conmanclient3.exe &lt;br /&gt;
::* START cmaccept3.exe&lt;br /&gt;
:: NOTE: If you boot up the device, you have to start the service conmanclient3.exe once. The service cmaccept3.exe needs to be start before you will deploy or debug your application. The service cmaccept3.exe is closed automatically after 3 minutes. Be sure to connect your application with the device during this time period. Otherwise you have to start the cmaccept3.exe again. The files are stored in folder \windows\ at testimage.&lt;br /&gt;
: 3. Now it is possible to use remote tools from Visual Studio&lt;br /&gt;
:: [[Image:Remote_Tools.JPG|700px]]&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 Test Tools==&lt;br /&gt;
=== TEST_APP_CANTEST ===&lt;br /&gt;
: The app can be used to test DHCOM CAN Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:test_app_cantest.zip|Download CAN Demo source code ]] &lt;br /&gt;
: &#039;&#039;&#039;CAN WRITE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --write --len 8 --id 0x12 --idlen 11 --val 0x55 --remote 0 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* --len: Send 8 Bytes&lt;br /&gt;
::* --id: Message ID is 0x12&lt;br /&gt;
::* --idlen: 11 = Standard ID; 29 can be used fpr extended ID&lt;br /&gt;
::* --val: Data starts with 0x55, then 0x56, ...&lt;br /&gt;
::* --remote: 0 = no remote frame&lt;br /&gt;
: &#039;&#039;&#039;CAN READ:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --read --timeout 10000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application waits for 10 seconds to receive data.&lt;br /&gt;
: &#039;&#039;&#039;CAN GET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --getbitrate &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application shows the current used bitrate.&lt;br /&gt;
: &#039;&#039;&#039;CAN SET BITRATE:&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; TEST_APP_CANTEST --setbitrate --bitrate 250000 &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application sets bitrate to 250kbps.&lt;br /&gt;
&lt;br /&gt;
=== UART_Test===&lt;br /&gt;
: The app can be used to test DHCOM UART 2 Port. The application is stored at folder \apps\wec2013\.&lt;br /&gt;
: [[media:UART_Test.zip|Download UART Demo source code ]] &lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; UART_Test &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:: Description of the example:&lt;br /&gt;
::* The application cyclic sends &amp;lt;code&amp;gt; &amp;quot;Hello World&amp;quot; &amp;lt;/code&amp;gt; and receives data.&lt;br /&gt;
::* The baudrate 115200 is used for the demo.&lt;br /&gt;
::* &amp;lt;code&amp;gt; q &amp;lt;/code&amp;gt; must be send to exit the demo.&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=FAQ_Get_Started&amp;diff=1288</id>
		<title>FAQ Get Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=FAQ_Get_Started&amp;diff=1288"/>
		<updated>2015-07-16T08:11:56Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;br/&amp;gt;FAQ =&lt;br /&gt;
&lt;br /&gt;
==Premium Developer Kit (PDK)==&lt;br /&gt;
=== Input state of one of the 4 buttons does not change ===&lt;br /&gt;
Answer:&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_Premium_Developer_Kit&amp;diff=1287</id>
		<title>DHCOM Premium Developer Kit</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_Premium_Developer_Kit&amp;diff=1287"/>
		<updated>2015-07-16T08:10:48Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Information==&lt;br /&gt;
* SODIMM-200 socket for DHCOM Standard &lt;br /&gt;
* Flexible display interface, DHDIB Standard&lt;br /&gt;
* 2x Ethernet 10/100 Mbit &lt;br /&gt;
* 2x USB 2.0 Host &lt;br /&gt;
* USB 2.0 OTG&lt;br /&gt;
* RS232 SUBD, 2x UART via pin header&lt;br /&gt;
* 2x I²C via pin header&lt;br /&gt;
* 2x SPI via pin header&lt;br /&gt;
* Camera interface via pin header&lt;br /&gt;
* Wireless modules on expansion board for Bluetooth, ZigBee, M-Bus&lt;br /&gt;
* CAN interface&lt;br /&gt;
* Audio: stereo line-In, stereo headphone, &lt;br /&gt;
* mono microphone&lt;br /&gt;
* SD/MMC card socket&lt;br /&gt;
* 4 buttons and 4 LEDs&lt;br /&gt;
* Debugging via 20 Pin JTAG-Port&lt;br /&gt;
----&lt;br /&gt;
==First Steps==&lt;br /&gt;
[[Quick Start]]&lt;br /&gt;
&lt;br /&gt;
[[Connection with SSH]]&lt;br /&gt;
----&lt;br /&gt;
==FAQ==&lt;br /&gt;
*&#039;&#039;&#039;[[FAQ_Get Started | Get Started]]&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
==Hardware versions==&lt;br /&gt;
  &#039;&#039;&#039;[[DHeva01 428-100 &amp;amp; 428-200]]&#039;&#039;&#039;&lt;br /&gt;
  [[Image:DHeva01.png|300px|DHeva01-V1]]&lt;br /&gt;
  &lt;br /&gt;
  === Note ===&lt;br /&gt;
  *  On DHeva01 428-100 and 428-200: USB is not available on the Display-Connector. This feature has been added to version 428-500 of the DHCOM Premium Developer Kit.&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;[[DHeva01 428-500]]&#039;&#039;&#039;&lt;br /&gt;
  [[Image:DHeva01_2.jpg|DHeva01-V3M]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=FAQ_Get_Started&amp;diff=1286</id>
		<title>FAQ Get Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=FAQ_Get_Started&amp;diff=1286"/>
		<updated>2015-07-16T08:09:00Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: Created page with &amp;quot;==&amp;lt;br/&amp;gt;FAQ ==  === Input state of one of the 4 buttons does not change === Answer:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== Input state of one of the 4 buttons does not change ===&lt;br /&gt;
Answer:&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_Premium_Developer_Kit&amp;diff=1285</id>
		<title>DHCOM Premium Developer Kit</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_Premium_Developer_Kit&amp;diff=1285"/>
		<updated>2015-07-16T08:06:09Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Information==&lt;br /&gt;
* SODIMM-200 socket for DHCOM Standard &lt;br /&gt;
* Flexible display interface, DHDIB Standard&lt;br /&gt;
* 2x Ethernet 10/100 Mbit &lt;br /&gt;
* 2x USB 2.0 Host &lt;br /&gt;
* USB 2.0 OTG&lt;br /&gt;
* RS232 SUBD, 2x UART via pin header&lt;br /&gt;
* 2x I²C via pin header&lt;br /&gt;
* 2x SPI via pin header&lt;br /&gt;
* Camera interface via pin header&lt;br /&gt;
* Wireless modules on expansion board for Bluetooth, ZigBee, M-Bus&lt;br /&gt;
* CAN interface&lt;br /&gt;
* Audio: stereo line-In, stereo headphone, &lt;br /&gt;
* mono microphone&lt;br /&gt;
* SD/MMC card socket&lt;br /&gt;
* 4 buttons and 4 LEDs&lt;br /&gt;
* Debugging via 20 Pin JTAG-Port&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==First Steps==&lt;br /&gt;
[[Quick Start]]&lt;br /&gt;
&lt;br /&gt;
[[Connection with SSH]]&lt;br /&gt;
----&lt;br /&gt;
==Hardware versions==&lt;br /&gt;
  &#039;&#039;&#039;[[DHeva01 428-100 &amp;amp; 428-200]]&#039;&#039;&#039;&lt;br /&gt;
  [[Image:DHeva01.png|300px|DHeva01-V1]]&lt;br /&gt;
  &lt;br /&gt;
  === Note ===&lt;br /&gt;
  *  On DHeva01 428-100 and 428-200: USB is not available on the Display-Connector. This feature has been added to version 428-500 of the DHCOM Premium Developer Kit.&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;[[DHeva01 428-500]]&#039;&#039;&#039;&lt;br /&gt;
  [[Image:DHeva01_2.jpg|DHeva01-V3M]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=FAQ_General&amp;diff=1167</id>
		<title>FAQ General</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=FAQ_General&amp;diff=1167"/>
		<updated>2015-03-11T16:41:47Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: Created page with &amp;quot;:&amp;#039;&amp;#039;&amp;#039;Q: Do the DHCOM modules have a serial numbers included? If yes, how is it accessible? &amp;#039;&amp;#039;&amp;#039; :&amp;#039;&amp;#039;&amp;#039;A:&amp;#039;&amp;#039;&amp;#039; The serial number of a DHCOM module is stored inside the bootloader enviro...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:&#039;&#039;&#039;Q: Do the DHCOM modules have a serial numbers included? If yes, how is it accessible? &#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;A:&#039;&#039;&#039; The serial number of a DHCOM module is stored inside the bootloader environment. It can be retrieved by u-boot commands like printenv or by Linux commands like “fw_printenv”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Q: We would like to use ubifs for rootfilesystem.&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;A:&#039;&#039;&#039; Ubifs is the standard NAND flash file system (FFS) for DHCOM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Q: We have the need for additional UBI volumens (partitions).&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;A:&#039;&#039;&#039; It shouldn&#039;t be necessary to make changes in u-boot, Linux kernel or devicetree.&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHSOM&amp;diff=1166</id>
		<title>DHSOM</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHSOM&amp;diff=1166"/>
		<updated>2015-03-11T15:31:44Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Image:DHCOM.jpg|1200px|Computer On Module - DHCOM Standard]]&lt;br /&gt;
&lt;br /&gt;
== Computer On Module ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[COM iMX6-D2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[COM AM35-D2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[COM iMX25-D2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[COM PXA270-D2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Development Kit ==&lt;br /&gt;
*&#039;&#039;&#039;[[DHCOM Premium Developer Kit]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Software Development ==&lt;br /&gt;
=== Linux ===&lt;br /&gt;
*&#039;&#039;&#039;[[Virtual Machine for Application Development]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[ELBE Overview| Embedded Linux Build Environment (ELBE)]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Yocto | Yocto]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Linux Kernel Features | Optional Linux Kernel Features ]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[UBI/UBIFS Filesystem|UBI/UBIFS Filesystem Basics]]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;!-- Inhalt hinzufügen&lt;br /&gt;
=== Windows Embedded Compact ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
*&#039;&#039;&#039;[[FAQ_General | General]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[FAQ_Get Started | Get Started]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHSOM&amp;diff=1165</id>
		<title>DHSOM</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHSOM&amp;diff=1165"/>
		<updated>2015-03-11T15:30:30Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Image:DHCOM.jpg|1200px|Computer On Module - DHCOM Standard]]&lt;br /&gt;
&lt;br /&gt;
== Computer On Module ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[COM iMX6-D2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[COM AM35-D2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[COM iMX25-D2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[[COM PXA270-D2]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Development Kit ==&lt;br /&gt;
*&#039;&#039;&#039;[[DHCOM Premium Developer Kit]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Software Development ==&lt;br /&gt;
=== Linux ===&lt;br /&gt;
*&#039;&#039;&#039;[[Virtual Machine for Application Development]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[ELBE Overview| Embedded Linux Build Environment (ELBE)]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Yocto | Yocto]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[Linux Kernel Features | Optional Linux Kernel Features ]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[UBI/UBIFS Filesystem|UBI/UBIFS Filesystem Basics]]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;!-- Inhalt hinzufügen&lt;br /&gt;
=== Windows Embedded Compact ===&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
*&#039;&#039;&#039;[[FAQ_General | General]]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[[FAQ_Get Started, Get Started]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:2012-08-10_Linux-3.2.12_DHCOM_AM35_config.zip&amp;diff=812</id>
		<title>File:2012-08-10 Linux-3.2.12 DHCOM AM35 config.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:2012-08-10_Linux-3.2.12_DHCOM_AM35_config.zip&amp;diff=812"/>
		<updated>2012-08-17T13:02:27Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:2012-08-10_Linux-3.2.12_DHCOM_AM35_patch.zip&amp;diff=811</id>
		<title>File:2012-08-10 Linux-3.2.12 DHCOM AM35 patch.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:2012-08-10_Linux-3.2.12_DHCOM_AM35_patch.zip&amp;diff=811"/>
		<updated>2012-08-17T13:01:28Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_AM35_Linux&amp;diff=810</id>
		<title>COM AM35 Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_AM35_Linux&amp;diff=810"/>
		<updated>2012-08-17T13:00:52Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* Building your own Kernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== Ethernet does not work ===&lt;br /&gt;
Check if the line &amp;quot;allow-hotplug eth0&amp;quot; in the file &amp;quot;/etc/network/interfaces&amp;quot; is activated. You can activate the ethernet interface on a running system with the command:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;ifconfig eth0 up&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;&#039;Remark:&#039;&#039;&#039; To work with a nfs-rootfilesystem you have to disable the line &amp;quot;allow-hotplug eth0&amp;quot; in the file &amp;quot;/etc/network/interfaces&amp;quot;. Maybe the system was prepared for this method for development and nobody did change it back.&lt;br /&gt;
&lt;br /&gt;
=== How to set a Linux environment variable? ===&lt;br /&gt;
This example shows you how to configure the system to use a proxy-server with a environment variable.&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;export http_proxy=http://192.168.xxx.xxx:xxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== How to schedule jobs to run periodically at certain times or dates? ===&lt;br /&gt;
You can use the cron daemon and/or anacron. To use anacron you have to copy or link your program or script into one of the the following folders:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/cron.hourly&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/cron.daily&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/cron.weekly&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/cron.monthly&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
For further information have a look at the general linux documentation.&lt;br /&gt;
&lt;br /&gt;
== Linux virtual machine for development ==&lt;br /&gt;
{{DebianVM Development}}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Building your own Kernel ==&lt;br /&gt;
&lt;br /&gt;
=== Sources for the AM35 Kernel: ===&lt;br /&gt;
&lt;br /&gt;
:* [http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.12.tar.bz2 Kernel version: 3.2.12 from www.kernel.org]&lt;br /&gt;
&lt;br /&gt;
:* [[media:2012-08-10_Linux-3.2.12_DHCOM_AM35_patch.zip|Patch to DHCOM AM35 Linux (2012-08-10)]]&lt;br /&gt;
&lt;br /&gt;
:* [[media:2012-08-10_Linux-3.2.12_DHCOM_AM35_config.zip|Kernel configuration for DHCOM AM35 Linux (2012-08-10)]]&lt;br /&gt;
&lt;br /&gt;
=== How to build a kernel: ===&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|1. Start the Console on Linux&lt;br /&gt;
|-&lt;br /&gt;
|2. Copy the above mentioned source files into our &amp;lt;code&amp;gt;work_path&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|3. &amp;lt;code&amp;gt;&#039;&#039;cd work_path&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|4. &amp;lt;code&amp;gt;&#039;&#039;tar xfjv linux-3.2.12.tar.bz2&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|5. &amp;lt;code&amp;gt;&#039;&#039;cd work_path/linux-3.2.12&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|6. &amp;lt;code&amp;gt;&#039;&#039;patch -p1 &amp;lt;xxxx-xx-xx_linux-3.2.12_DHCOM_AM35.patch&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|7. &amp;lt;code&amp;gt;&#039;&#039;cp xxxx-xx-xx_Linux-3.2.12_DHCOM_AM35.config work_path/linux-3.2.12/.config&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8. &amp;lt;code&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make uImage&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:The &amp;lt;code&amp;gt;uImage&amp;lt;/code&amp;gt; file will you find in &amp;lt;code&amp;gt;../build-linux/arch/arm/boot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Update the kernel with U-Boot ==&lt;br /&gt;
&lt;br /&gt;
:The linux kernel will be updated by the [[COM_AM35_Bootloader_U-Boot#Update|U-Boot flash update]].&lt;br /&gt;
&lt;br /&gt;
:* [[media:Linux-3.2.12_DHCOM_AM35_kernel.zip|Current built of the 3.2.12 DHCOM AM35 linux kernel (2012-08-10)]]&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|1. Copy the &amp;lt;code&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;uImage.env&#039;&#039;&#039;&amp;lt;/code&amp;gt; file onto a microSD card with a FAT file system (you can use the 1st partition on the microSD card)&lt;br /&gt;
|-&lt;br /&gt;
|2. Insert the microSD card and start the system&lt;br /&gt;
|-&lt;br /&gt;
|3. Go to the U-Boot console by pressing &#039;&#039;&#039;DEL&#039;&#039;&#039; on a RS232 terminal (during startup)&lt;br /&gt;
|-&lt;br /&gt;
|4. &amp;lt;code&amp;gt;&#039;&#039;update linux&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Debian system ==&lt;br /&gt;
&lt;br /&gt;
=== How to create a microSD-card with a rootfilesystem on it ===&lt;br /&gt;
&lt;br /&gt;
:1. Format a microSD card like following (in linux e.g. you can use palimpsest) with &#039;&#039;&#039;Master Boot Record&#039;&#039;&#039; partition scheme&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|P1 &#039;&#039;&#039;FAT&#039;&#039;&#039;  (Primary partition: 100MB)&lt;br /&gt;
|-&lt;br /&gt;
|P2 &#039;&#039;&#039;ext3&#039;&#039;&#039; (Primary partition: Residual space)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:2. Untar the root file system to the ext3 partition of the microSD card (Don&#039;t copy the tar archive directly to the microSD card)&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Start the Console on Linux&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;su&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;chmod 755 /path/of/the/microSD_card&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /path/of/the/microSD_card&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;tar xfjv path/to/RootFS/Name_of_RootFS_file.tar.bz2&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;&#039;Remark:&#039;&#039;&#039; If you got a *.tar.gz file so type &amp;lt;code&amp;gt; tar xfzv ...  &amp;lt;/code&amp;gt; to extract the rootfilesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Login/Shutdown system ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 120px&amp;quot;&lt;br /&gt;
 ||Username: ||root&lt;br /&gt;
 |-&lt;br /&gt;
 ||Password: ||foo&lt;br /&gt;
 |}&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;shutdown -h now&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the touchscreen ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;ts_calibrate&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Check the enviroment variable &amp;quot;TSLIB_TSDEVICE=/dev/input/event0&amp;quot; with &amp;lt;code&amp;gt; printenv &amp;lt;/code&amp;gt; if an error occurs.&lt;br /&gt;
&lt;br /&gt;
===Running Qt Demos ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /usr/qt/demos/demoname&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;demoname -qws&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:For the Qt-Browser change &amp;lt;code&amp;gt;demoname&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;browser&amp;lt;/code&amp;gt;&lt;br /&gt;
:If the touchscreen does not work please check the enviroment variable &amp;quot;QWS_MOUSE_PROTO=Tslib:/dev/input/event0&amp;quot; with &amp;lt;code&amp;gt; printenv&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Run Qt demos with powerVR (3d acceleration) support:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /usr/qt/demos/embedded/demoname&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;demoname -qws&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Run demos with a usb-mouse as input device:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /usr/qt/demos/demoname&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;/QWS_MOUSE_PROTO=Auto:/dev/input/mice demoname -qws&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remark:&#039;&#039;&#039; Just remember that you need to run the Qt demos with the options -qws. Omitting -qws results in the app waiting to connect to the QWS Server, which is not running.&lt;br /&gt;
&lt;br /&gt;
=== How to control the display brightness ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo &amp;lt;value&amp;gt; &amp;gt;/sys/class/backlight/omap-pwm-backlight/brightness&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:value range: 0..255&lt;br /&gt;
&lt;br /&gt;
=== How to control the GPIOs ===&lt;br /&gt;
:{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 600px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! DHCOM Name: !! alt. DHCOM Name: !! SO-DIMM Pin# !! Linux &amp;lt;GPIO#&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| GPIO A || || 154 || 116 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO B || || 156 || 117 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO C || || 162 || 118 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO D || || 163 || 119 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO E || || 164 || 125 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO F || || 165 || 140 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO G || || 167 || 141 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO H || || 173 || 155 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO I || || 175 || 152 &lt;br /&gt;
|-&lt;br /&gt;
| CIF HSYNC || GPIO J || 74 || 96 &lt;br /&gt;
|-&lt;br /&gt;
| CIF PCLK || GPIO K || 72 || 94 &lt;br /&gt;
|-&lt;br /&gt;
| CIF MCLK || GPIO L || 70 || 58 &lt;br /&gt;
|-&lt;br /&gt;
| CIF VSYNC || GPIO M || 68 || 97 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D9 || GPIO N || 66 || 98&lt;br /&gt;
|-&lt;br /&gt;
| CIF D8 || GPIO O || 64 || 95 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D7 || GPIO P || 62 || 106 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D6 || GPIO Q || 60 || 105 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D5 || GPIO R || 58 || 104 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D4 || GPIO S || 56 || 103 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D3 || GPIO T || 54 || 102 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D2 || GPIO U || 52 || 101 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D1 || GPIO V || 50 || 100 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D0 || GPIO W || 48 || 99 &lt;br /&gt;
|}&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; Depending on your board configuration some of the additional gpios shared with the camera interface are not available on your system.&lt;br /&gt;
&lt;br /&gt;
:Export&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo &amp;lt;GPIO#&amp;gt; &amp;gt;/sys/class/gpio/export&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; Have a look into &amp;lt;code&amp;gt; /sys/class/gpio/ &amp;lt;/code&amp;gt; for already configured gpios.&lt;br /&gt;
:Set direction&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo in &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/direction&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo out &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/direction&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Set state&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo 0 &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo 1 &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initialize and test CAN ===&lt;br /&gt;
:Initialize:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;ip link set can0 up type can bitrate 500000&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
:Send test message via cansend (part of can-utils):&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cansend can0 100#11.2233.44556677.88&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Receive can messages (part of can-utils):&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;candump can0&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:Linux-3.2.12_DHCOM_AM35_kernel.zip&amp;diff=809</id>
		<title>File:Linux-3.2.12 DHCOM AM35 kernel.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:Linux-3.2.12_DHCOM_AM35_kernel.zip&amp;diff=809"/>
		<updated>2012-08-14T08:46:20Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: uploaded a new version of &amp;amp;quot;File:Linux-3.2.12 DHCOM AM35 kernel.zip&amp;amp;quot;: DHUpdate.ini entfernt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kernel mit SPI aktiviert im Userspace.&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_AM35_Linux&amp;diff=808</id>
		<title>COM AM35 Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_AM35_Linux&amp;diff=808"/>
		<updated>2012-08-14T08:44:17Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== Ethernet does not work ===&lt;br /&gt;
Check if the line &amp;quot;allow-hotplug eth0&amp;quot; in the file &amp;quot;/etc/network/interfaces&amp;quot; is activated. You can activate the ethernet interface on a running system with the command:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;ifconfig eth0 up&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;&#039;Remark:&#039;&#039;&#039; To work with a nfs-rootfilesystem you have to disable the line &amp;quot;allow-hotplug eth0&amp;quot; in the file &amp;quot;/etc/network/interfaces&amp;quot;. Maybe the system was prepared for this method for development and nobody did change it back.&lt;br /&gt;
&lt;br /&gt;
=== How to set a Linux environment variable? ===&lt;br /&gt;
This example shows you how to configure the system to use a proxy-server with a environment variable.&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;export http_proxy=http://192.168.xxx.xxx:xxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== How to schedule jobs to run periodically at certain times or dates? ===&lt;br /&gt;
You can use the cron daemon and/or anacron. To use anacron you have to copy or link your program or script into one of the the following folders:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/cron.hourly&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/cron.daily&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/cron.weekly&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;/etc/cron.monthly&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
For further information have a look at the general linux documentation.&lt;br /&gt;
&lt;br /&gt;
== Linux virtual machine for development ==&lt;br /&gt;
{{DebianVM Development}}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Building your own Kernel ==&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Update the kernel with U-Boot ==&lt;br /&gt;
&lt;br /&gt;
:The linux kernel will be updated by the [[COM_AM35_Bootloader_U-Boot#Update|U-Boot flash update]].&lt;br /&gt;
&lt;br /&gt;
:* [[media:Linux-3.2.12_DHCOM_AM35_kernel.zip|Current built of the 3.2.12 DHCOM AM35 linux kernel (2012-08-10)]]&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|1. Copy the &amp;lt;code&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;uImage.env&#039;&#039;&#039;&amp;lt;/code&amp;gt; file onto a microSD card with a FAT file system (you can use the 1st partition on the microSD card)&lt;br /&gt;
|-&lt;br /&gt;
|2. Insert the microSD card and start the system&lt;br /&gt;
|-&lt;br /&gt;
|3. Go to the U-Boot console by pressing &#039;&#039;&#039;DEL&#039;&#039;&#039; on a RS232 terminal (during startup)&lt;br /&gt;
|-&lt;br /&gt;
|4. &amp;lt;code&amp;gt;&#039;&#039;update linux&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Debian system ==&lt;br /&gt;
&lt;br /&gt;
=== How to create a microSD-card with a rootfilesystem on it ===&lt;br /&gt;
&lt;br /&gt;
:1. Format a microSD card like following (in linux e.g. you can use palimpsest) with &#039;&#039;&#039;Master Boot Record&#039;&#039;&#039; partition scheme&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|P1 &#039;&#039;&#039;FAT&#039;&#039;&#039;  (Primary partition: 100MB)&lt;br /&gt;
|-&lt;br /&gt;
|P2 &#039;&#039;&#039;ext3&#039;&#039;&#039; (Primary partition: Residual space)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:2. Untar the root file system to the ext3 partition of the microSD card (Don&#039;t copy the tar archive directly to the microSD card)&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Start the Console on Linux&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;su&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;chmod 755 /path/of/the/microSD_card&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /path/of/the/microSD_card&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;tar xfjv path/to/RootFS/Name_of_RootFS_file.tar.bz2&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:&#039;&#039;&#039;Remark:&#039;&#039;&#039; If you got a *.tar.gz file so type &amp;lt;code&amp;gt; tar xfzv ...  &amp;lt;/code&amp;gt; to extract the rootfilesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Login/Shutdown system ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 120px&amp;quot;&lt;br /&gt;
 ||Username: ||root&lt;br /&gt;
 |-&lt;br /&gt;
 ||Password: ||foo&lt;br /&gt;
 |}&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;shutdown -h now&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the touchscreen ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;ts_calibrate&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Check the enviroment variable &amp;quot;TSLIB_TSDEVICE=/dev/input/event0&amp;quot; with &amp;lt;code&amp;gt; printenv &amp;lt;/code&amp;gt; if an error occurs.&lt;br /&gt;
&lt;br /&gt;
===Running Qt Demos ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /usr/qt/demos/demoname&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;demoname -qws&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:For the Qt-Browser change &amp;lt;code&amp;gt;demoname&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;browser&amp;lt;/code&amp;gt;&lt;br /&gt;
:If the touchscreen does not work please check the enviroment variable &amp;quot;QWS_MOUSE_PROTO=Tslib:/dev/input/event0&amp;quot; with &amp;lt;code&amp;gt; printenv&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Run Qt demos with powerVR (3d acceleration) support:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /usr/qt/demos/embedded/demoname&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;demoname -qws&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Run demos with a usb-mouse as input device:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /usr/qt/demos/demoname&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;/QWS_MOUSE_PROTO=Auto:/dev/input/mice demoname -qws&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remark:&#039;&#039;&#039; Just remember that you need to run the Qt demos with the options -qws. Omitting -qws results in the app waiting to connect to the QWS Server, which is not running.&lt;br /&gt;
&lt;br /&gt;
=== How to control the display brightness ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo &amp;lt;value&amp;gt; &amp;gt;/sys/class/backlight/omap-pwm-backlight/brightness&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:value range: 0..255&lt;br /&gt;
&lt;br /&gt;
=== How to control the GPIOs ===&lt;br /&gt;
:{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 600px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! DHCOM Name: !! alt. DHCOM Name: !! SO-DIMM Pin# !! Linux &amp;lt;GPIO#&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| GPIO A || || 154 || 116 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO B || || 156 || 117 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO C || || 162 || 118 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO D || || 163 || 119 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO E || || 164 || 125 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO F || || 165 || 140 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO G || || 167 || 141 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO H || || 173 || 155 &lt;br /&gt;
|-&lt;br /&gt;
| GPIO I || || 175 || 152 &lt;br /&gt;
|-&lt;br /&gt;
| CIF HSYNC || GPIO J || 74 || 96 &lt;br /&gt;
|-&lt;br /&gt;
| CIF PCLK || GPIO K || 72 || 94 &lt;br /&gt;
|-&lt;br /&gt;
| CIF MCLK || GPIO L || 70 || 58 &lt;br /&gt;
|-&lt;br /&gt;
| CIF VSYNC || GPIO M || 68 || 97 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D9 || GPIO N || 66 || 98&lt;br /&gt;
|-&lt;br /&gt;
| CIF D8 || GPIO O || 64 || 95 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D7 || GPIO P || 62 || 106 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D6 || GPIO Q || 60 || 105 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D5 || GPIO R || 58 || 104 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D4 || GPIO S || 56 || 103 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D3 || GPIO T || 54 || 102 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D2 || GPIO U || 52 || 101 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D1 || GPIO V || 50 || 100 &lt;br /&gt;
|-&lt;br /&gt;
| CIF D0 || GPIO W || 48 || 99 &lt;br /&gt;
|}&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; Depending on your board configuration some of the additional gpios shared with the camera interface are not available on your system.&lt;br /&gt;
&lt;br /&gt;
:Export&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo &amp;lt;GPIO#&amp;gt; &amp;gt;/sys/class/gpio/export&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; Have a look into &amp;lt;code&amp;gt; /sys/class/gpio/ &amp;lt;/code&amp;gt; for already configured gpios.&lt;br /&gt;
:Set direction&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo in &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/direction&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo out &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/direction&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Set state&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo 0 &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo 1 &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initialize and test CAN ===&lt;br /&gt;
:Initialize:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;ip link set can0 up type can bitrate 500000&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
:Send test message via cansend (part of can-utils):&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cansend can0 100#11.2233.44556677.88&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Receive can messages (part of can-utils):&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;candump can0&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:Linux-3.2.12_DHCOM_AM35_kernel.zip&amp;diff=807</id>
		<title>File:Linux-3.2.12 DHCOM AM35 kernel.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:Linux-3.2.12_DHCOM_AM35_kernel.zip&amp;diff=807"/>
		<updated>2012-08-14T08:40:14Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: Kernel mit SPI aktiviert im Userspace.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kernel mit SPI aktiviert im Userspace.&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX25_Linux&amp;diff=806</id>
		<title>COM iMX25 Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX25_Linux&amp;diff=806"/>
		<updated>2012-08-14T08:35:29Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* Update the kernel with U-Boot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
:What are the names of the UARTs in Linux?&lt;br /&gt;
:*FF-UART: &amp;lt;code&amp;gt;/dev/ttymxc1&amp;lt;/code&amp;gt;&lt;br /&gt;
:*BT-UART: &amp;lt;code&amp;gt;/dev/ttymxc2&amp;lt;/code&amp;gt;&lt;br /&gt;
:*STD-UART: &amp;lt;code&amp;gt;/dev/ttymxc4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Linux virtual machine for development ==&lt;br /&gt;
{{DebianVM Development}}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Building your own Kernel ==&lt;br /&gt;
&lt;br /&gt;
=== Sources for the iMX25 Kernel: ===&lt;br /&gt;
&lt;br /&gt;
:* [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2 Kernel version: 2.6.38 from www.kernel.org]&lt;br /&gt;
&lt;br /&gt;
:* [[media:Linux-2.6.38_DHCOM_iMX25_patch.zip|Patch to DHCOM iMX25 Linux (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
:* [[media:Linux-2.6.38_DHCOM_iMX25_config.zip|Kernel configuration for DHCOM iMX25 Linux (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
=== How to build a kernel: ===&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|1. Start the Console on Linux&lt;br /&gt;
|-&lt;br /&gt;
|2. Copy the above mentioned source files into our &amp;lt;code&amp;gt;work_path&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|3. &amp;lt;code&amp;gt;&#039;&#039;cd work_path&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|4. &amp;lt;code&amp;gt;&#039;&#039;tar xfjv linux-2.6.38.tar.bz2&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|5. &amp;lt;code&amp;gt;&#039;&#039;cd work_path/linux-2.6.38&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|6. &amp;lt;code&amp;gt;&#039;&#039;patch -p1 &amp;lt;linux-2.6.38_DHCOM_iMX25.patch&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|7. &amp;lt;code&amp;gt;&#039;&#039;cp .config work_path/linux-2.6.38&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8. &amp;lt;code&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make uImage&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:The &amp;lt;code&amp;gt;uImage&amp;lt;/code&amp;gt; file will you find in &amp;lt;code&amp;gt;../build-linux/arch/arm/boot&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Update the kernel with U-Boot ==&lt;br /&gt;
&lt;br /&gt;
:The linux kernel will be updated by the [[COM iMX25 Bootloader U-Boot#Update|U-Boot flash update]].&lt;br /&gt;
&lt;br /&gt;
:* [[media:Linux-2.6.38_DHCOM_iMX25_kernel.zip|Current built of the 2.6.38 DHCOM iMX25 linux kernel (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|1. Copy the &amp;lt;code&amp;gt;&#039;&#039;&#039;uImage&#039;&#039;&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;&#039;&#039;uImage.env&#039;&#039;&#039;&amp;lt;/code&amp;gt; file onto a microSD card with a FAT file system (you can use the 1st partition on the microSD card)&lt;br /&gt;
|-&lt;br /&gt;
|2. Insert the microSD card and start the system&lt;br /&gt;
|-&lt;br /&gt;
|3. Go to the U-Boot console by pressing &#039;&#039;&#039;DEL&#039;&#039;&#039; on a RS232 terminal (during startup)&lt;br /&gt;
|-&lt;br /&gt;
|4. &amp;lt;code&amp;gt;&#039;&#039;update linux&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;How to use/update our root file system ==&lt;br /&gt;
&lt;br /&gt;
:* [[media:RootFS_DN_20110805et4_HL5 (03.02.2012).tar.bz2|Current Debian root file system, based on Debian 6.0 &amp;quot;Squeeze&amp;quot; (2012-02-03)]]&lt;br /&gt;
:: [[COM iMX25 Linux#Debian system|Login data for the Debian system]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. Format a microSD card like following (in linux e.g. you can use palimpsest) with &#039;&#039;&#039;Master Boot Record&#039;&#039;&#039; partition scheme&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|P1 &#039;&#039;&#039;FAT&#039;&#039;&#039;  (Primary partition: 100MB)&lt;br /&gt;
|-&lt;br /&gt;
|P2 &#039;&#039;&#039;ext3&#039;&#039;&#039; (Primary partition: Residual space)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:2. Untar the root file system to the ext3 partition of the microSD card (Don&#039;t copy the tar archive directly to the microSD card)&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Start the Console on Linux&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;su&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;chmod 755 /path/of/the/microSD_card&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cd /path/of/the/microSD_card&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;tar xfjv path/to/RootFS/Name_of_RootFS_file.tar.bz2&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;How to control the display brightness ==&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo &amp;lt;value&amp;gt; &amp;gt;/sys/devices/platform/imx-fb.0/backlight/imxfb-bl/brightness&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:value range: 0..255&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;How to control the GPIOs ==&lt;br /&gt;
:{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 400px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! DHCOM Name: !! Port: !! Pin: !! Linux GPIO # &lt;br /&gt;
|-&lt;br /&gt;
| GPIO A || 2 || 12 || 44&lt;br /&gt;
|-&lt;br /&gt;
| GPIO B || 3 || 21 || 85&lt;br /&gt;
|-&lt;br /&gt;
| GPIO C || 2 || 4 || 36&lt;br /&gt;
|-&lt;br /&gt;
| GPIO D || 2 || 5 || 37&lt;br /&gt;
|-&lt;br /&gt;
| GPIO E || 2 || 6 || 38&lt;br /&gt;
|-&lt;br /&gt;
| GPIO F || 2 || 7 || 39&lt;br /&gt;
|-&lt;br /&gt;
| GPIO G || 2 || 8 || 40&lt;br /&gt;
|-&lt;br /&gt;
| GPIO H || 2 || 9 || 41&lt;br /&gt;
|-&lt;br /&gt;
| GPIO K || 2 || 10 || 42&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Export&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo &amp;lt;GPIO#&amp;gt; &amp;gt;/sys/class/gpio/export&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Set direction&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo in &amp;gt;/sys/class/gpio/gpioXX/direction&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo out &amp;gt;/sys/class/gpio/gpioXX/direction&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Set value&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo 0 &amp;gt;/sys/class/gpio/gpioXX/value&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo 1 &amp;gt;/sys/class/gpio/gpioXX/value&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Get value&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cat /sys/class/gpio/gpioXX/value&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:unexport&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;echo &amp;lt;GPIO#&amp;gt; &amp;gt;/sys/class/gpio/unexport&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Debian system ==&lt;br /&gt;
=== Calibrating the touchscreen ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
===Running example Qt Apps ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;QWS_MOUSE_PROTO=Tslib:/dev/input/event0 /usr/qt/demos/demoname/demoname -qws&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:For the Qt-Browser change &amp;lt;code&amp;gt;demoname&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;browser&amp;lt;/code&amp;gt;&lt;br /&gt;
=== Login/Shutdown system ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 120px&amp;quot;&lt;br /&gt;
 ||Username: ||root&lt;br /&gt;
 |-&lt;br /&gt;
 ||Password: ||foo&lt;br /&gt;
 |}&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;shutdown -h now&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initialize and test CAN ===&lt;br /&gt;
:Initialize:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;ip link set can0 up type can bitrate 500000&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
:Send test message via cansend (part of can-utils):&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;cansend can0 100#11.2233.44556677.88&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Busybox system ==&lt;br /&gt;
=== Calibrating the touchscreen ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;TSLIB_TSDEVICE=/dev/event0 ts_calibrate&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
===Running example Qt Apps ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;QWS_MOUSE_PROTO=Tslib:/dev/event0 /usr/qt/demos/demoname/demoname -qws&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:For the Qt-Browser change &amp;lt;code&amp;gt;demoname&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;browser&amp;lt;/code&amp;gt;&lt;br /&gt;
=== Login/Shutdown system ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 120px&amp;quot;&lt;br /&gt;
 ||Username: ||root&lt;br /&gt;
 |-&lt;br /&gt;
 ||Password: ||n/a&lt;br /&gt;
 |}&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;&#039;&#039;halt&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX25_Linux&amp;diff=588</id>
		<title>COM iMX25 Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX25_Linux&amp;diff=588"/>
		<updated>2012-05-22T12:41:11Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* Get the Virtual machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Linux virtual machine for development ==&lt;br /&gt;
&lt;br /&gt;
=== Get the Virtual machine ===&lt;br /&gt;
* [http://www.vmware.com/go/get-player-de Get the VMware player]&lt;br /&gt;
&lt;br /&gt;
* [[media:Debian Squeeze v1.3.zipx|(mirror 1)]]&amp;lt;br/&amp;gt;Password for devel user: &#039;&#039;&#039;devel&#039;&#039;&#039;&amp;lt;br/&amp;gt;Password for root user: &#039;&#039;&#039;root&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 History:&lt;br /&gt;
 &lt;br /&gt;
 v1.3 - Debian Squeeze v1.3.zipx    - Mono 2.10&lt;br /&gt;
                                    - mtd-utils&lt;br /&gt;
                                    - Install system updates&lt;br /&gt;
 &lt;br /&gt;
 v1.2 - Debian Squeeze v1.2.zipx    - Emdebian Toolchain gcc 4.3 / g++ 4.3&lt;br /&gt;
                                    - TortoiseHg + TortoiseHg for Nautilus&lt;br /&gt;
                                    - Add Plugin &amp;quot;REST Client&amp;quot; in Iceweasel&lt;br /&gt;
 &lt;br /&gt;
 v1.1 - Debian Squeeze v1.1.zipx    - Update Eclipse to Indigo with CDT 8.0&lt;br /&gt;
                                    - Add demo project &amp;quot;crosshelloworld&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 v1.0 - Debian Squeeze.zipx         - First release&lt;br /&gt;
&lt;br /&gt;
=== Setting up a Eclipse Cross Executable Project: ===&lt;br /&gt;
* Use Eclipse Indigo (version 3.7.1) for your project.&lt;br /&gt;
* Create a new C++ Project and choose as Executable Project type &amp;quot;Cross-Compile Project&amp;quot; and as Toolchains &amp;quot;Cross GCC&amp;quot;&lt;br /&gt;
* Click the Button &amp;quot;Next&amp;quot; and specify under &amp;quot;Tool command path&amp;quot; the Toolchain path. For Codesourcery it is the folder &amp;quot;CodeSourcery/Sourcery_G++_Lite/bin&amp;quot;. Under Prefix type &amp;quot;arm-none-linux-gnueabi-&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Building your own Kernel ==&lt;br /&gt;
&lt;br /&gt;
=== Sources for the iMX25 Kernel: ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2 Kernel version: 2.6.38 from www.kernel.org]&lt;br /&gt;
&lt;br /&gt;
* [[media:Linux-2.6.38_DHCOM_iMX25_patch.zip|Patch to DHCOM iMX25 Linux (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
* [[media:Linux-2.6.38_DHCOM_iMX25_config.zip|Kernel configuration for DHCOM iMX25 Linux (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
=== How to build a kernel: ===&lt;br /&gt;
&lt;br /&gt;
 1. Start the Console on Linux&lt;br /&gt;
 2. $ tar xfjv linux-2.6.38.tar.bz2 (in work_path)&lt;br /&gt;
 3. $ cd /work_path/linux-2.6.38&lt;br /&gt;
 4. $ patch -p1 &amp;lt;linux-2.6.38_DHCOM_iMX25.patch&lt;br /&gt;
 5. $ cp .config /work_path/linux-2.6.38&lt;br /&gt;
 6. $ ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make uImage&lt;br /&gt;
 &lt;br /&gt;
 The uImage file will you find in ../build-linux/arch/arm/boot&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Update the kernel with U-Boot ==&lt;br /&gt;
&lt;br /&gt;
You can update the linux kernel with [[COM iMX25 Bootloader U-Boot#Flash Update|U-Boot flash update]].&lt;br /&gt;
&lt;br /&gt;
* [[media:Linux-2.6.38_DHCOM_iMX25_kernel.zip|Current built of the 2.6.38 DHCOM iMX25 linux kernel (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
 1. Copy the &amp;quot;uImage&amp;quot; and &amp;quot;uImage.env&amp;quot; file onto a microSD card with a FAT file system (you can use the 1st partition on the microSD card)&lt;br /&gt;
 2. Insert the microSD card and start the system&lt;br /&gt;
 3. Go to the U-Boot console by pressing DEL on a RS232 terminal (during startup)&lt;br /&gt;
 4. $ update linux&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;How to use/update our root file system ==&lt;br /&gt;
&lt;br /&gt;
* [[media:RootFS_DN_20110805et4_HL5 (03.02.2012).tar.bz2|Current Debian root file system, based on Debian 6.0 &amp;quot;Squeeze&amp;quot; (2012-02-03)]]&lt;br /&gt;
: [[COM iMX25 Linux#Debian system|Login data for the Debian system]]&lt;br /&gt;
&lt;br /&gt;
 1. Format a microSD card like following (in linux e.g. you can use palimpsest) with &amp;quot;Master Boot Record&amp;quot; partition scheme&lt;br /&gt;
    P1 FAT  (Primary partition: 100MB)&lt;br /&gt;
    P2 ext3 (Primary partition: Residual space)&lt;br /&gt;
 2. Untar the root file system to the ext3 partition of the microSD card (Don&#039;t copy the tar archive directly to the microSD card)&lt;br /&gt;
    Start the Console on Linux&lt;br /&gt;
    $ su&lt;br /&gt;
    $ chmod 755 /path/of/the/microSD_card&lt;br /&gt;
    $ cd /path/of/the/microSD_card&lt;br /&gt;
    $ tar xfjv path/to/RootFS/Name_of_RootFS_file.tar.bz2&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;How to control the display brightness ==&lt;br /&gt;
 $ echo &amp;lt;value&amp;gt; &amp;gt;/sys/devices/platform/imx-fb.0/backlight/imxfb-bl/brightness&lt;br /&gt;
 &lt;br /&gt;
 value range: 0..255&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Debian system ==&lt;br /&gt;
=== Calibrating the touchscreen ===&lt;br /&gt;
 $ TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate&lt;br /&gt;
===Running example Qt Apps ===&lt;br /&gt;
 $ QWS_MOUSE_PROTO=Tslib:/dev/input/event0 /usr/qt/demos/demoname/demoname -qws&lt;br /&gt;
 For the Qt-Browser change demoname to browser&lt;br /&gt;
=== Login/Shutdown system ===&lt;br /&gt;
 Login:&lt;br /&gt;
   Name:     root&lt;br /&gt;
   password: foo&lt;br /&gt;
 &lt;br /&gt;
 Shutdown:&lt;br /&gt;
   $ shutdown -h now&lt;br /&gt;
=== Initialize and test CAN ===&lt;br /&gt;
 Initialize:&lt;br /&gt;
   $ ip link set can0 up type can bitrate 500000&lt;br /&gt;
 &lt;br /&gt;
 Send test message via cansend (part of can-utils):&lt;br /&gt;
   $ cansend can0 100#11.2233.44556677.88&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Busybox system ==&lt;br /&gt;
=== Calibrating the touchscreen ===&lt;br /&gt;
 $ TSLIB_TSDEVICE=/dev/event0 ts_calibrate&lt;br /&gt;
===Running example Qt Apps ===&lt;br /&gt;
 $ QWS_MOUSE_PROTO=Tslib:/dev/event0 /usr/qt/demos/demoname/demoname -qws&lt;br /&gt;
 For the Qt-Browser change demoname to browser&lt;br /&gt;
=== Login/Shutdown system ===&lt;br /&gt;
 Login:&lt;br /&gt;
   Name:     root&lt;br /&gt;
   password: n/a&lt;br /&gt;
 &lt;br /&gt;
 Shutdown:&lt;br /&gt;
   $ halt&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX25_Linux&amp;diff=434</id>
		<title>COM iMX25 Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX25_Linux&amp;diff=434"/>
		<updated>2012-02-22T16:14:18Z</updated>

		<summary type="html">&lt;p&gt;Rgoellner: /* Get the Virtual machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;br/&amp;gt;FAQ ==&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Linux virtual machine for development ==&lt;br /&gt;
&lt;br /&gt;
=== Get the Virtual machine ===&lt;br /&gt;
* [http://www.vmware.com/go/get-player-de Get the VMware player]&lt;br /&gt;
&lt;br /&gt;
* [[media:Debian Squeeze v1.2.zipx|(mirror 2)]]&amp;lt;br/&amp;gt;Password for devel user: &#039;&#039;&#039;devel&#039;&#039;&#039;&amp;lt;br/&amp;gt;Password for root user: &#039;&#039;&#039;root&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 History:&lt;br /&gt;
 &lt;br /&gt;
 v1.2 - Debian Squeeze v1.2.zipx    - Emdebian Toolchain gcc 4.3 / g++ 4.3&lt;br /&gt;
                                    - TortoiseHg + TortoiseHg for Nautilus&lt;br /&gt;
                                    - Add Plugin &amp;quot;REST Client&amp;quot; in Iceweasel&lt;br /&gt;
 &lt;br /&gt;
 v1.1 - Debian Squeeze v1.1.zipx    - Update Eclipse to Indigo with CDT 8.0&lt;br /&gt;
                                    - Add demo project &amp;quot;crosshelloworld&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 v1.0 - Debian Squeeze.zipx         - First release&lt;br /&gt;
&lt;br /&gt;
=== Setting up a Eclipse Cross Executable Project: ===&lt;br /&gt;
* Use Eclipse Indigo (version 3.7.1) for your project.&lt;br /&gt;
* Create a new C++ Project and choose as Executable Project type &amp;quot;Cross-Compile Project&amp;quot; and as Toolchains &amp;quot;Cross GCC&amp;quot;&lt;br /&gt;
* Click the Button &amp;quot;Next&amp;quot; and specify under &amp;quot;Tool command path&amp;quot; the Toolchain path. For Codesourcery it is the folder &amp;quot;CodeSourcery/Sourcery_G++_Lite/bin&amp;quot;. Under Prefix type &amp;quot;arm-none-linux-gnueabi-&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Building your own Kernel ==&lt;br /&gt;
&lt;br /&gt;
=== Sources for the iMX25 Kernel: ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2 Kernel version: 2.6.38 from www.kernel.org]&lt;br /&gt;
&lt;br /&gt;
* [[media:Linux-2.6.38_DHCOM_iMX25_patch.zip|Patch to DHCOM iMX25 Linux (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
* [[media:Linux-2.6.38_DHCOM_iMX25_config.zip|Kernel configuration for DHCOM iMX25 Linux (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
=== How to build a kernel: ===&lt;br /&gt;
&lt;br /&gt;
 1. Start the Console on Linux&lt;br /&gt;
 2. $ tar xfjv linux-2.6.38.tar.bz2 (in work_path)&lt;br /&gt;
 3. $ cd /work_path/linux-2.6.38&lt;br /&gt;
 4. $ patch -p1 &amp;lt;linux-2.6.38_DHCOM_iMX25.patch&lt;br /&gt;
 5. $ cp .config /work_path/linux-2.6.38&lt;br /&gt;
 6. $ ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make uImage&lt;br /&gt;
 &lt;br /&gt;
 The uImage file will you find in ../build-linux/arch/arm/boot&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Update the kernel with U-Boot ==&lt;br /&gt;
&lt;br /&gt;
You can update the linux kernel with [[COM iMX25 Bootloader U-Boot#Flash Update|U-Boot flash update]].&lt;br /&gt;
&lt;br /&gt;
* [[media:Linux-2.6.38_DHCOM_iMX25_kernel.zip|Current built of the 2.6.38 DHCOM iMX25 linux kernel (2012-02-02)]]&lt;br /&gt;
&lt;br /&gt;
 1. Copy the &amp;quot;uImage&amp;quot; and &amp;quot;uImage.env&amp;quot; file onto a microSD card with a FAT file system (you can use the 1st partition on the microSD card)&lt;br /&gt;
 2. Insert the microSD card and start the system&lt;br /&gt;
 3. Go to the U-Boot console by pressing DEL on a RS232 terminal (during startup)&lt;br /&gt;
 4. $ update linux&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;How to use/update our root file system ==&lt;br /&gt;
&lt;br /&gt;
* [[media:RootFS_DN_20110805et4_HL5 (03.02.2012).tar.bz2|Current Debian root file system (2012-02-03)]]&lt;br /&gt;
: [[COM iMX25 Linux#Debian system|Login data for the Debian system]]&lt;br /&gt;
&lt;br /&gt;
 1. Format a microSD card like following (in linux e.g. you can use palimpsest)&lt;br /&gt;
    MBR partition scheme&lt;br /&gt;
    P1 FAT  (Primary partition: 100MB)&lt;br /&gt;
    P2 ext3 (Primary partition: Residual space)&lt;br /&gt;
 2. Copy root file system onto the ext3 partition of the microSD card&lt;br /&gt;
    Start the Console on Linux&lt;br /&gt;
    $ su&lt;br /&gt;
    $ chmod 755 /path/of/the/microSD card&lt;br /&gt;
    $ cd /path/of/the/microSD card&lt;br /&gt;
    $ tar xfjv Name_of_RootFS_file.tar.bz2&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;How to control the display brightness ==&lt;br /&gt;
 $ echo &amp;lt;value&amp;gt; &amp;gt;/sys/devices/platform/imx-fb.0/backlight/imxfb-bl/brightness&lt;br /&gt;
 &lt;br /&gt;
 value range: 0..255&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Debian system ==&lt;br /&gt;
=== Calibrating the touchscreen ===&lt;br /&gt;
 $ TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate&lt;br /&gt;
===Running example Qt Apps ===&lt;br /&gt;
 $ QWS_MOUSE_PROTO=Tslib:/dev/input/event0 /usr/qt/demos/demoname/demoname -qws&lt;br /&gt;
 For the Qt-Browser change demoname to browser&lt;br /&gt;
=== Login/Shutdown system ===&lt;br /&gt;
 Login:&lt;br /&gt;
   Name:     root&lt;br /&gt;
   password: foo&lt;br /&gt;
 &lt;br /&gt;
 Shutdown:&lt;br /&gt;
   $ shutdown -h now&lt;br /&gt;
=== Initialize and test CAN ===&lt;br /&gt;
 Initialize:&lt;br /&gt;
   $ ip link set can0 up type can bitrate 500000&lt;br /&gt;
 &lt;br /&gt;
 Send test message via cansend (part of can-utils):&lt;br /&gt;
   $ cansend can0 100#11.2233.44556677.88&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;br/&amp;gt;Busybox system ==&lt;br /&gt;
=== Calibrating the touchscreen ===&lt;br /&gt;
 $ TSLIB_TSDEVICE=/dev/event0 ts_calibrate&lt;br /&gt;
===Running example Qt Apps ===&lt;br /&gt;
 $ QWS_MOUSE_PROTO=Tslib:/dev/event0 /usr/qt/demos/demoname/demoname -qws&lt;br /&gt;
 For the Qt-Browser change demoname to browser&lt;br /&gt;
=== Login/Shutdown system ===&lt;br /&gt;
 Login:&lt;br /&gt;
   Name:     root&lt;br /&gt;
   password: n/a&lt;br /&gt;
 &lt;br /&gt;
 Shutdown:&lt;br /&gt;
   $ halt&lt;/div&gt;</summary>
		<author><name>Rgoellner</name></author>
	</entry>
</feed>