<?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=Capfel</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=Capfel"/>
	<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=Special:Contributions/Capfel"/>
	<updated>2026-04-27T19:42:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:Test.txt&amp;diff=3827</id>
		<title>File:Test.txt</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:Test.txt&amp;diff=3827"/>
		<updated>2023-06-13T10:18:37Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_Linux&amp;diff=3815</id>
		<title>COM iMX6 Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX6_Linux&amp;diff=3815"/>
		<updated>2023-01-13T14:14:29Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* SPI Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Storage Layout ==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
::[[Image:DHCM_Boot_Storage_imx6.jpg|500px|DHCOM Boot Storage i.MX6]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:[[Image:DHCM_Storage_Layout_imx6.jpg|1000px|DHCOM Storage Layout i.MX6]]&lt;br /&gt;
&lt;br /&gt;
== Linux virtual machine for development ==&lt;br /&gt;
:* Please have a look at: &#039;&#039;&#039;[[Virtual Machine for Application Development]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel ==&lt;br /&gt;
=== Sources: Look at page [[DHCOM iMX6-D2#BSP Sources|i.MX6 BSP Sources]] ===&lt;br /&gt;
&lt;br /&gt;
=== How to build a Kernel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 98%; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
Get sources from Github&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
1. Start the Console on Linux&amp;lt;br/&amp;gt;&lt;br /&gt;
2. &amp;lt;tt&amp;gt;&#039;&#039;git clone https://github.com/dh-electronics/linux-imx6qdl.git --branch dev/4.4.60_dhcom&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
3. &amp;lt;tt&amp;gt;&#039;&#039;cd linux-imx6qdl&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Configure and build the Device Tree + Kernel&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
| &lt;br /&gt;
4. &amp;lt;tt&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make imx6_dhcom_defconfig&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
5. &amp;lt;tt&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make menuconfig&#039;&#039;&amp;lt;/tt&amp;gt; (optional: If you want to add/remove Kernel features)&amp;lt;br/&amp;gt;&lt;br /&gt;
6. &amp;lt;tt&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make dtbs&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
7. &amp;lt;tt&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make zImage&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
*The built &amp;lt;font size=5&amp;gt;&amp;lt;tt&amp;gt;imx6&amp;lt;font color=&amp;quot;#B8A71A&amp;quot;&amp;gt;x&amp;lt;/font&amp;gt;-dhcom&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;#&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#0EC3C1&amp;quot;&amp;gt;Y&amp;lt;/font&amp;gt;-&amp;lt;font color=&amp;quot;#C90646&amp;quot;&amp;gt;BOARD&amp;lt;/font&amp;gt;.dtb&amp;lt;/tt&amp;gt;&amp;lt;/font&amp;gt; devicetree files are available in &amp;lt;tt&amp;gt;arch/arm/boot/dts&amp;lt;/tt&amp;gt;&lt;br /&gt;
**&amp;lt;font color=&amp;quot;#B8A71A&amp;quot;&amp;gt;x = s, dl, d, q&amp;lt;/font&amp;gt;&lt;br /&gt;
**&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;# = 2 for HW200, 3 for HW300, 4 for HW400&amp;lt;/font&amp;gt;&lt;br /&gt;
**&amp;lt;font color=&amp;quot;#0EC3C1&amp;quot;&amp;gt;Y = B for Base, H for Hi-Speed-Interfaces&amp;lt;/font&amp;gt;&lt;br /&gt;
**&amp;lt;font color=&amp;quot;#C90646&amp;quot;&amp;gt;BOARD = pdk1, pdk2, ...&amp;lt;/font&amp;gt;&lt;br /&gt;
*The built &amp;lt;tt&amp;gt;zImage&amp;lt;/tt&amp;gt; kernel file will you find in &amp;lt;tt&amp;gt;arch/arm/boot&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Update the Kernel and Device Tree with U-Boot ===&lt;br /&gt;
:Please refere to the [[DHCOM Update Mechanism|DHCOM Update Mechanism for i.MX6]].&lt;br /&gt;
&lt;br /&gt;
=== Update Kernel and Device Tree on a running Linux ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 98%; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
| &lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Copy the kernel &#039;&#039;&#039;zImage&#039;&#039;&#039; file to the path &#039;&#039;&#039;/boot&#039;&#039;&#039; (You can rename it after the Kernel version &#039;&#039;&#039;zImage_X.Y.Z&#039;&#039;&#039;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Check &#039;&#039;&#039;zImage_file&#039;&#039;&#039; variable in &#039;&#039;&#039;/boot/uLinuxEnv.txt&#039;&#039;&#039; (e.g. &amp;lt;tt&amp;gt;&#039;&#039;&#039;zImage_file=zImage_4.4.60&#039;&#039;&#039;&amp;lt;/tt&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
==== Device Tree ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; Copy the Device Tree &#039;&#039;&#039;*.dtb&#039;&#039;&#039; file to the path &#039;&#039;&#039;/boot/dtbs_X.Y.Z&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; Check &#039;&#039;&#039;fdt_file&#039;&#039;&#039; variable in &#039;&#039;&#039;/boot/uLinuxEnv.txt&#039;&#039;&#039; (e.g. &amp;lt;tt&amp;gt;&#039;&#039;&#039;fdtfile=/dtbs_4.4.60/imx6dl-dhcom4B-pdk2.dtb&#039;&#039;&#039;&amp;lt;/tt&amp;gt;) &amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
==== Reboot System ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; Restart the system (e.g. &amp;lt;tt&amp;gt;&#039;&#039;&#039;reboot&#039;&#039;&#039;&amp;lt;/tt&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Make your own Device Tree for your board ===&lt;br /&gt;
:The recommended proceeding for making your our Device Tree should be the following:&lt;br /&gt;
&lt;br /&gt;
:1. Clone the DH Device Tree Board file and change it to fit for your board&lt;br /&gt;
::- Based on i.MX6 and PDK1 (works with i.MX6 HW200)&lt;br /&gt;
:::&amp;lt;code&amp;gt;imx6qdl-dh_pdk1.dtsi --&amp;gt; imx6qdl-COMPANY_BOARDNAME.dtsi&amp;lt;/code&amp;gt;&lt;br /&gt;
::- Based on i.MX6 and PDK2 (works with i.MX6 HW300)&lt;br /&gt;
:::&amp;lt;code&amp;gt;imx6qdl-dh_pdk2.dtsi --&amp;gt; imx6qdl-COMPANY_BOARDNAME.dtsi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2. Clone the main Device Tree file and change the included boad file to yours&lt;br /&gt;
:: E.g. based on i.MX6DL HW300 with PDK2&lt;br /&gt;
:::&amp;lt;code&amp;gt;imx6dl-dhcom3B-pdk2.dts --&amp;gt; imx6dl-dhcom3B-BOARDNAME.dts&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3. Add your new main Device Tree file to &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; (located in the same folder)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;DH Device Tree pattern (Kernel 4.4.x)&#039;&#039;&#039;:&lt;br /&gt;
:[[Image:DHCM_Device_Tree_pattern.jpg|1200px|DHCOM Device Tree pattern]]&lt;br /&gt;
&lt;br /&gt;
==Debian Rootfilesystem ==&lt;br /&gt;
&lt;br /&gt;
=== Available Rootfilesystems ===&lt;br /&gt;
:Please have a look at the [[DHCOM_iMX6-D2#Download binaries/images | iMX6 Images]] section.&lt;br /&gt;
&lt;br /&gt;
=== Login ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
dhcom login: &#039;&#039;&#039;root&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Password: &#039;&#039;&#039;foo&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reboot ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# reboot&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:or&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# shutdown -r now&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Shutdown ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# poweroff&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:or&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# shutdown -h now&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Note: If the watchdog is active, the system will be reset.&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the touchscreen (only on Debian 6.0) ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# ts_calibrate&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Check the enviroment variable &amp;quot;TSLIB_TSDEVICE=/dev/input/event0&amp;quot; with &amp;lt;tt&amp;gt; printenv &amp;lt;/tt&amp;gt; if an error occurs.&lt;br /&gt;
&lt;br /&gt;
== Kernel Userspace Interfaces to Access Hardware == &lt;br /&gt;
&lt;br /&gt;
=== Ethernet Interfaces ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM ENET 1||&amp;lt;tt&amp;gt;ethsom0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM ENET 2||&amp;lt;tt&amp;gt;ethsom1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Serial (UART) Interfaces ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM (FF) UART 1||&amp;lt;tt&amp;gt;/dev/ttymxc0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM (BT) UART 2 ||&amp;lt;tt&amp;gt;/dev/ttymxc4&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM (STD) UART 3 ||&amp;lt;tt&amp;gt;/dev/ttymxc3&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== I2C Interfaces ===&lt;br /&gt;
:Hardware revision &#039;&#039;&#039;300&#039;&#039;&#039; and &#039;&#039;&#039;newer&#039;&#039;&#039; (dhcom3.., dhcom4.., ...)&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM I2C 1||&amp;lt;tt&amp;gt;/dev/i2c-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM I2C 2 ||&amp;lt;tt&amp;gt;/dev/i2c-0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||On Module Devices ||&amp;lt;tt&amp;gt;/dev/i2c-2&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:Hardware revision &#039;&#039;&#039;100 / 200&#039;&#039;&#039; (dhcom1.. / dhcom2..)&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM I2C 1||&amp;lt;tt&amp;gt;/dev/i2c-0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM I2C 2 ||&amp;lt;tt&amp;gt;/dev/i2c-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||On Module Devices ||&amp;lt;tt&amp;gt;/dev/i2c-2&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== SPI Interfaces ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||&amp;lt;b&amp;gt;Device&amp;lt;/b&amp;gt;||&amp;lt;b&amp;gt;Kernel &amp;lt;= 5.4.xxx&amp;lt;/b&amp;gt;||&amp;lt;b&amp;gt;Kernel &amp;gt;= 5.10.xxx&amp;lt;/b&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM SPI 1||&amp;lt;tt&amp;gt;/dev/spidev0.2&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;/dev/spidev0.1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM SPI 2 ||&amp;lt;tt&amp;gt;/dev/spidev1.0&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;/dev/spidev1.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; DHCOM SPI1 interface doesn‘t work with DHCOM Premium Developer Kit (HD00013).&lt;br /&gt;
::Reason: At DHCOM Premium Developer Kit SPI 1 isn‘t connected, because otherwise i.MX6 doesn‘t boot with the current schematic.&lt;br /&gt;
&lt;br /&gt;
=== MMC/SD/eMMC Interfaces ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM SD-Interface ||&amp;lt;tt&amp;gt;/dev/mmcblk0pX&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||on module µSD Card ||&amp;lt;tt&amp;gt;/dev/mmcblk1pX&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||on module eMMC ||&amp;lt;tt&amp;gt;/dev/mmcblk2pX&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
: &#039;X&#039; has to be replaced with the partition number&lt;br /&gt;
&lt;br /&gt;
=== Control the display brightness ===&lt;br /&gt;
:Set brightness level (X = 0...10)&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;echo X &amp;gt;/sys/class/backlight/display/brightness&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Control GPIOs ===&lt;br /&gt;
:See which gpio is already used by the system&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;cat /sys/kernel/debug/gpio &amp;amp;#x007C; grep -v &amp;quot;gpio-... ( &amp;quot;&#039;&#039;&amp;lt;/tt&amp;gt; &amp;lt;br&amp;gt;or&amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;&#039;&#039;gpioinfo &amp;amp;#x007C; grep -v unnamed&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 1000px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! DHCOM Name: !! alt. DHCOM Name: !! SO-DIMM Pin# !! CPU Pad Name !! Linux &amp;lt;GPIO#&amp;gt; * !! gpiod label (deprecated): !! gpiod label:&lt;br /&gt;
|-&lt;br /&gt;
| GPIO A || || 154 || PAD_GPIO_2 || 2 || A || DHCOM-A&lt;br /&gt;
|-&lt;br /&gt;
| GPIO B || || 156 || PAD_GPIO_4 || 4 || B || DHCOM-B&lt;br /&gt;
|-&lt;br /&gt;
| GPIO C || || 162 || PAD_GPIO_5 || 5 || C || DHCOM-C&lt;br /&gt;
|-&lt;br /&gt;
| GPIO D || || 163 || PAD_CSI0_DAT17 || 163 || D || DHCOM-D&lt;br /&gt;
|-&lt;br /&gt;
| GPIO E || || 164 || PAD_GPIO_19 || 101 || E || DHCOM-E&lt;br /&gt;
|-&lt;br /&gt;
| GPIO F || || 165 || PAD_DI0_PIN4 || 116 || F || DHCOM-F&lt;br /&gt;
|-&lt;br /&gt;
| GPIO G || || 167 || PAD_EIM_D27 || 91 || G || DHCOM-G&lt;br /&gt;
|-&lt;br /&gt;
| GPIO H || || 173 || PAD_KEY_ROW0 || 103 || H || DHCOM-H&lt;br /&gt;
|-&lt;br /&gt;
| GPIO I || || 175 || PAD_KEY_COL1 || 104 || I || DHCOM-I&lt;br /&gt;
|-&lt;br /&gt;
| GPIO J || CIF HSYNC || 74 || PAD_NANDF_CS1 || 174 || J || DHCOM-J&lt;br /&gt;
|-&lt;br /&gt;
| GPIO K || CIF PCLK || 72 || PAD_NANDF_CS2 || 175 || K || DHCOM-K&lt;br /&gt;
|-&lt;br /&gt;
| GPIO L || CIF MCLK || 70 || PAD_KEY_ROW1 || 105 || L || DHCOM-L&lt;br /&gt;
|-&lt;br /&gt;
| GPIO M || CIF VSYNC || 68 || PAD_SD3_DAT5 || 192 || M || DHCOM-M&lt;br /&gt;
|-&lt;br /&gt;
| GPIO N || CIF D9 || 66 || PAD_SD3_DAT4 || 193 || N || DHCOM-N&lt;br /&gt;
|-&lt;br /&gt;
| GPIO O || CIF D8 || 64 || PAD_CSI0_VSYNC || 149 || O || DHCOM-O&lt;br /&gt;
|-&lt;br /&gt;
| GPIO P || CIF D7 || 62 || PAD_GPIO_18 || 205 || P || DHCOM-P&lt;br /&gt;
|-&lt;br /&gt;
| GPIO Q || CIF D6 || 60 || PAD_SD1_CMD || 18 || Q || DHCOM-Q&lt;br /&gt;
|-&lt;br /&gt;
| GPIO R || CIF D5 || 58 || PAD_SD1_DAT0 || 16 || R || DHCOM-R&lt;br /&gt;
|-&lt;br /&gt;
| GPIO S || CIF D4 || 56 || PAD_SD1_DAT1 || 17 || S || DHCOM-S&lt;br /&gt;
|-&lt;br /&gt;
| GPIO T || CIF D3 || 54 || PAD_SD1_DAT2 || 19 || T || DHCOM-T&lt;br /&gt;
|-&lt;br /&gt;
| GPIO U || CIF D2 || 52 || PAD_SD1_CLK || 20 || U || DHCOM-U&lt;br /&gt;
|-&lt;br /&gt;
| GPIO V || CIF D1 || 50 || PAD_CSI0_PIXCLK || 146 || V || DHCOM-V&lt;br /&gt;
|-&lt;br /&gt;
| GPIO W || CIF D0 || 48 || PAD_CSI0_MCLK || 147 || W || DHCOM-W&lt;br /&gt;
|-&lt;br /&gt;
| INT HIGHEST PRIORITY || || 151 || PAD_KEY_COL0|| 102 || INT || DHCOM-INT&lt;br /&gt;
|}&lt;br /&gt;
:: * = Valid if you didn&#039;t change the CONFIG_ARCH_NR_GPIO value in kernel config &#039;&#039;&#039;AND&#039;&#039;&#039; if your kernel doesn&#039;t probe another GPIO controller before the imx6 GPIO controller&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;
&lt;br /&gt;
:&#039;&#039;&#039;GPIO pin configuration&#039;&#039;&#039;&lt;br /&gt;
:: The default Linux Device Tree pin configurarion of the DHCOM GPIOs A - W is &amp;lt;code&amp;gt;0x400120b0&amp;lt;/code&amp;gt;&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
 Pad Mux Register (0x020E_xxxx) = 0x0000_0015&lt;br /&gt;
  SION:        1  Enabled (Force input path of pad)&lt;br /&gt;
  MUX_MODE: 0101  ALT5&lt;br /&gt;
 &lt;br /&gt;
 Pad Control Register (0x020E_xxxx) = 0x0001_20B0&lt;br /&gt;
  HYS:         1  Hysteresis enabled (Schmitt trigger input)&lt;br /&gt;
  ==============&lt;br /&gt;
  PUS:        00  100k Pull Down&lt;br /&gt;
  PUE:         1  PULL (Pull enabled)&lt;br /&gt;
  PKE:         0  Disable (Pull/Keeper disabled)&lt;br /&gt;
  ODE:         0  Disable (Output is CMOS)&lt;br /&gt;
  RESERVED:  000&lt;br /&gt;
  --------------&lt;br /&gt;
  SPEED:      10  imx6:    100MHz (medium)&lt;br /&gt;
                  imx6ull: 100MHz (medium)&lt;br /&gt;
  DSE:       110  Drive strength imx6:     40 Ohm&lt;br /&gt;
                                 imx6ull:  43 Ohm @ 3.3V&lt;br /&gt;
  RESERVED    00&lt;br /&gt;
  SRE:         0  SLOW (Slow Slew Rate)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Controlled by gpiod tools (need Kernel v4.7 or higher)&#039;&#039;&#039;&lt;br /&gt;
::Set state&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;gpioset $(gpiofind GPIO_LABEL)=0&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;gpioset $(gpiofind GPIO_LABEL)=1&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
::Get state&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;gpioget $(gpiofind GPIO_LABEL)&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;gpioget $(gpiofind GPIO_LABEL)&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; GPIO_LABEL could be DHCOM-A, DHCOM-B, DHCOM-C, ... see table above&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Controlled by sysfs (since Kernel v4.8 deprecated)&#039;&#039;&#039;&lt;br /&gt;
::Export&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;echo &amp;lt;GPIO#&amp;gt; &amp;gt;/sys/class/gpio/export&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; Have a look into &amp;lt;tt&amp;gt; /sys/class/gpio/ &amp;lt;/tt&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;tt&amp;gt;&#039;&#039;echo in &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/direction&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;echo out &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/direction&#039;&#039;&amp;lt;/tt&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;tt&amp;gt;&#039;&#039;echo 0 &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;echo 1 &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
::Get state&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;cat /sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initialize and Test CAN Interface ===&lt;br /&gt;
:Initialize:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;ip link set can0 up type can bitrate 500000&#039;&#039;&amp;lt;/tt&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;tt&amp;gt;&#039;&#039;cansend can0 100#11.2233.44556677.88&#039;&#039;&amp;lt;/tt&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;tt&amp;gt;&#039;&#039;candump can0&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Get can-utils:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;apt-get install can-utils&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Parallel Address- / Databus ===&lt;br /&gt;
&lt;br /&gt;
:To use the 16-bit address / databus from Linux userspace you can use the UIO driver interface. To enable and configure the interface it is necessary to setup the WEIM controller with the device tree. See the documentation of the device tree bindings of weim [https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/Documentation/devicetree/bindings/bus/imx-weim.txt here].&lt;br /&gt;
&lt;br /&gt;
:Here is an example code which demonstrates how to do enable and configure the WEIM interface (parallel address- / databus):&lt;br /&gt;
:{|&lt;br /&gt;
|&amp;lt;tt&amp;gt;&lt;br /&gt;
 &amp;amp;weim {&lt;br /&gt;
 	pinctrl-names = &amp;quot;default&amp;quot;;&lt;br /&gt;
 	pinctrl-0 = &amp;lt;&amp;amp;pinctrl_dhcom_weim &amp;amp;pinctrl_dhcom_weim_cs0 &amp;amp;pinctrl_dhcom_weim_cs1&amp;gt;;&lt;br /&gt;
 	#address-cells = &amp;lt;2&amp;gt;;&lt;br /&gt;
 	#size-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 	/* it is necessary to setup 2x 64MB otherwise setting gpr fails */&lt;br /&gt;
 	ranges = &amp;lt;0 0  0x08000000  0x04000000&amp;gt;,					// Chip select 0 == DHCOM CS A&lt;br /&gt;
 		 &amp;lt;1 0  0x0c000000  0x04000000&amp;gt;;					// Chip select 1 == DHCOM CS B&lt;br /&gt;
 	fsl,weim-cs-gpr = &amp;lt;&amp;amp;gpr&amp;gt;;&lt;br /&gt;
 	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 	uiomap_cs0@0,0 {&lt;br /&gt;
 		compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
 		reg = &amp;lt;0 0x00000000 0x04000000&amp;gt;;&lt;br /&gt;
 		reg-names = &amp;quot;uio_cs0&amp;quot;;&lt;br /&gt;
 		interrupt-parent = &amp;lt;&amp;amp;gpio1&amp;gt;;&lt;br /&gt;
 		interrupts = &amp;lt;2 2&amp;gt;;						// Add gpio A == interrupt&lt;br /&gt;
 		#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 		#size-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 		fsl,weim-cs-timing = &amp;lt;0x00610089 0x00001002 0x0F011061&lt;br /&gt;
 				      0x00000000 0x0F068A31 0x00000000&amp;gt;;&lt;br /&gt;
 		status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 	};&lt;br /&gt;
 &lt;br /&gt;
 	uiomap_cs1@0,1 {&lt;br /&gt;
 		compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
 		reg = &amp;lt;1 0x00000000 0x04000000&amp;gt;;&lt;br /&gt;
 		reg-names = &amp;quot;uio_cs1&amp;quot;;&lt;br /&gt;
 		interrupt-parent = &amp;lt;&amp;amp;gpio1&amp;gt;;&lt;br /&gt;
 		interrupts = &amp;lt;4 2&amp;gt;;						// Add gpio B == interrupt&lt;br /&gt;
 		#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 		#size-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 		fsl,weim-cs-timing = &amp;lt;0x00610089 0x00001002 0x0F011061&lt;br /&gt;
 				      0x00000000 0x0F068A31 0x00000000&amp;gt;;&lt;br /&gt;
 		status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
 	};&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
: We have already written some demo code at [https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6qdl-dhcom_cfg-weim.dtsi /arch/arm/boot/dts/imx6qdl-dhcom_cfg-weim.dtsi]. It is easy to enable in the matching device-tree file:&lt;br /&gt;
::*[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6s-dhcom3B-pdk2.dts /arch/arm/boot/dts/imx6s-dhcom3B-pdk2.dts]&lt;br /&gt;
::*[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6dl-dhcom3B-pdk2.dts /arch/arm/boot/dts/imx6dl-dhcom3B-pdk2.dts]&lt;br /&gt;
::*[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6d-dhcom3B-pdk2.dts /arch/arm/boot/dts/imx6d-dhcom3B-pdk2.dts]&lt;br /&gt;
::*[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6q-dhcom3B-pdk2.dts /arch/arm/boot/dts/imx6q-dhcom3B-pdk2.dts]&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;#FF1010&amp;quot;&amp;gt;- // #include &amp;quot;imx6qdl-dhcom_cfg-weim.dtsi&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;#00FF10&amp;quot;&amp;gt;+ #include &amp;quot;imx6qdl-dhcom_cfg-weim.dtsi &amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:To use the generic uio driver it has to be enabled in the kernel configuration (&amp;lt;code&amp;gt;[[#Linux Kernel|make menuconfig]]&amp;lt;/code&amp;gt;)&lt;br /&gt;
::*Device Drivers -&amp;gt; Userspace I/O Drivers -&amp;gt; Userspace I/O platform driver with generic IRQ handling&lt;br /&gt;
: The device-tree of_id of the uio driver has to be set via kernel command line&lt;br /&gt;
::*Add &amp;quot;optargs=&#039;uio_pdrv_genirq.of_id=generic-uio&#039;&amp;quot; to uLinuxEnv.txt&lt;br /&gt;
&lt;br /&gt;
:Example for a UIO userspace driver:&lt;br /&gt;
:* [[media:uio_access.zip| uio_access.cpp]]&lt;br /&gt;
:* for further information have a look at the paper [https://www.osadl.org/fileadmin/dam/rtlws/12/Koch.pdf Userspace I/O drivers in a realtime context]&lt;br /&gt;
&lt;br /&gt;
=== Configure your own display ===&lt;br /&gt;
&lt;br /&gt;
:To configure your own display you have to do the following steps:&lt;br /&gt;
&lt;br /&gt;
:1. Configure your display and build a settings file by our tool DHCOMSettingsGenerator ([[media:DHCOMSettingsGeneratorV2_V2.0.0.2.zip|Download v2.0.0.2]])&lt;br /&gt;
&lt;br /&gt;
:2. Place generated file into the first partition (label: &amp;quot;boot&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:3. Create a symbolic link to the file settings.bin ($ ln -s YourSettingsFile.bin settings.bin)&lt;br /&gt;
&lt;br /&gt;
:Remake: It is still possible to config the display via Device Tree e.g. &amp;lt;code&amp;gt;[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6qdl-dh_pdk2.dtsi dev/4.4.60_dhcom/arch/arm/boot/dts/imx6qdl-dh_pdk2.dtsi]&amp;lt;/code&amp;gt; (not recommended by DH)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;The following picture showing the sequence and priorities:&#039;&#039;&#039;&lt;br /&gt;
:[[Image:DHCM_Display_Settings.jpg|1300px|DHCOM Display Settings]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For detailed description of the &#039;&#039;&#039;display boot args&#039;&#039;&#039; please have a look at [[DHCOM iMX6 Bootloader U-Boot#Display and Hardware settings|Display and Hardware settings]] of the iMX6 Bootloader.&lt;br /&gt;
&lt;br /&gt;
== Additional Information ==&lt;br /&gt;
:*[[Linux Kernel Features | Linux Kernel Features ]]&lt;br /&gt;
:*[[ELBE Overview| Embedded Linux Build Environment (ELBE)]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_Linux&amp;diff=3814</id>
		<title>COM iMX6 Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=COM_iMX6_Linux&amp;diff=3814"/>
		<updated>2023-01-13T13:51:58Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* SPI Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Storage Layout ==&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
::[[Image:DHCM_Boot_Storage_imx6.jpg|500px|DHCOM Boot Storage i.MX6]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:[[Image:DHCM_Storage_Layout_imx6.jpg|1000px|DHCOM Storage Layout i.MX6]]&lt;br /&gt;
&lt;br /&gt;
== Linux virtual machine for development ==&lt;br /&gt;
:* Please have a look at: &#039;&#039;&#039;[[Virtual Machine for Application Development]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel ==&lt;br /&gt;
=== Sources: Look at page [[DHCOM iMX6-D2#BSP Sources|i.MX6 BSP Sources]] ===&lt;br /&gt;
&lt;br /&gt;
=== How to build a Kernel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 98%; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
Get sources from Github&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
1. Start the Console on Linux&amp;lt;br/&amp;gt;&lt;br /&gt;
2. &amp;lt;tt&amp;gt;&#039;&#039;git clone https://github.com/dh-electronics/linux-imx6qdl.git --branch dev/4.4.60_dhcom&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
3. &amp;lt;tt&amp;gt;&#039;&#039;cd linux-imx6qdl&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Configure and build the Device Tree + Kernel&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
| &lt;br /&gt;
4. &amp;lt;tt&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make imx6_dhcom_defconfig&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
5. &amp;lt;tt&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make menuconfig&#039;&#039;&amp;lt;/tt&amp;gt; (optional: If you want to add/remove Kernel features)&amp;lt;br/&amp;gt;&lt;br /&gt;
6. &amp;lt;tt&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make dtbs&#039;&#039;&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
7. &amp;lt;tt&amp;gt;&#039;&#039;ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- make zImage&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
*The built &amp;lt;font size=5&amp;gt;&amp;lt;tt&amp;gt;imx6&amp;lt;font color=&amp;quot;#B8A71A&amp;quot;&amp;gt;x&amp;lt;/font&amp;gt;-dhcom&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;#&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;#0EC3C1&amp;quot;&amp;gt;Y&amp;lt;/font&amp;gt;-&amp;lt;font color=&amp;quot;#C90646&amp;quot;&amp;gt;BOARD&amp;lt;/font&amp;gt;.dtb&amp;lt;/tt&amp;gt;&amp;lt;/font&amp;gt; devicetree files are available in &amp;lt;tt&amp;gt;arch/arm/boot/dts&amp;lt;/tt&amp;gt;&lt;br /&gt;
**&amp;lt;font color=&amp;quot;#B8A71A&amp;quot;&amp;gt;x = s, dl, d, q&amp;lt;/font&amp;gt;&lt;br /&gt;
**&amp;lt;font color=&amp;quot;#0000FF&amp;quot;&amp;gt;# = 2 for HW200, 3 for HW300, 4 for HW400&amp;lt;/font&amp;gt;&lt;br /&gt;
**&amp;lt;font color=&amp;quot;#0EC3C1&amp;quot;&amp;gt;Y = B for Base, H for Hi-Speed-Interfaces&amp;lt;/font&amp;gt;&lt;br /&gt;
**&amp;lt;font color=&amp;quot;#C90646&amp;quot;&amp;gt;BOARD = pdk1, pdk2, ...&amp;lt;/font&amp;gt;&lt;br /&gt;
*The built &amp;lt;tt&amp;gt;zImage&amp;lt;/tt&amp;gt; kernel file will you find in &amp;lt;tt&amp;gt;arch/arm/boot&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Update the Kernel and Device Tree with U-Boot ===&lt;br /&gt;
:Please refere to the [[DHCOM Update Mechanism|DHCOM Update Mechanism for i.MX6]].&lt;br /&gt;
&lt;br /&gt;
=== Update Kernel and Device Tree on a running Linux ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 98%; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
| &lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Copy the kernel &#039;&#039;&#039;zImage&#039;&#039;&#039; file to the path &#039;&#039;&#039;/boot&#039;&#039;&#039; (You can rename it after the Kernel version &#039;&#039;&#039;zImage_X.Y.Z&#039;&#039;&#039;)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Check &#039;&#039;&#039;zImage_file&#039;&#039;&#039; variable in &#039;&#039;&#039;/boot/uLinuxEnv.txt&#039;&#039;&#039; (e.g. &amp;lt;tt&amp;gt;&#039;&#039;&#039;zImage_file=zImage_4.4.60&#039;&#039;&#039;&amp;lt;/tt&amp;gt;)&amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
==== Device Tree ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; Copy the Device Tree &#039;&#039;&#039;*.dtb&#039;&#039;&#039; file to the path &#039;&#039;&#039;/boot/dtbs_X.Y.Z&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; Check &#039;&#039;&#039;fdt_file&#039;&#039;&#039; variable in &#039;&#039;&#039;/boot/uLinuxEnv.txt&#039;&#039;&#039; (e.g. &amp;lt;tt&amp;gt;&#039;&#039;&#039;fdtfile=/dtbs_4.4.60/imx6dl-dhcom4B-pdk2.dtb&#039;&#039;&#039;&amp;lt;/tt&amp;gt;) &amp;lt;br/&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
==== Reboot System ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; color: #000000; background: #ffffff;&amp;quot; |&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; Restart the system (e.g. &amp;lt;tt&amp;gt;&#039;&#039;&#039;reboot&#039;&#039;&#039;&amp;lt;/tt&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Make your own Device Tree for your board ===&lt;br /&gt;
:The recommended proceeding for making your our Device Tree should be the following:&lt;br /&gt;
&lt;br /&gt;
:1. Clone the DH Device Tree Board file and change it to fit for your board&lt;br /&gt;
::- Based on i.MX6 and PDK1 (works with i.MX6 HW200)&lt;br /&gt;
:::&amp;lt;code&amp;gt;imx6qdl-dh_pdk1.dtsi --&amp;gt; imx6qdl-COMPANY_BOARDNAME.dtsi&amp;lt;/code&amp;gt;&lt;br /&gt;
::- Based on i.MX6 and PDK2 (works with i.MX6 HW300)&lt;br /&gt;
:::&amp;lt;code&amp;gt;imx6qdl-dh_pdk2.dtsi --&amp;gt; imx6qdl-COMPANY_BOARDNAME.dtsi&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:2. Clone the main Device Tree file and change the included boad file to yours&lt;br /&gt;
:: E.g. based on i.MX6DL HW300 with PDK2&lt;br /&gt;
:::&amp;lt;code&amp;gt;imx6dl-dhcom3B-pdk2.dts --&amp;gt; imx6dl-dhcom3B-BOARDNAME.dts&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:3. Add your new main Device Tree file to &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; (located in the same folder)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;DH Device Tree pattern (Kernel 4.4.x)&#039;&#039;&#039;:&lt;br /&gt;
:[[Image:DHCM_Device_Tree_pattern.jpg|1200px|DHCOM Device Tree pattern]]&lt;br /&gt;
&lt;br /&gt;
==Debian Rootfilesystem ==&lt;br /&gt;
&lt;br /&gt;
=== Available Rootfilesystems ===&lt;br /&gt;
:Please have a look at the [[DHCOM_iMX6-D2#Download binaries/images | iMX6 Images]] section.&lt;br /&gt;
&lt;br /&gt;
=== Login ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
dhcom login: &#039;&#039;&#039;root&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
Password: &#039;&#039;&#039;foo&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reboot ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# reboot&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:or&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# shutdown -r now&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Shutdown ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# poweroff&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:or&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# shutdown -h now&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Note: If the watchdog is active, the system will be reset.&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the touchscreen (only on Debian 6.0) ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 400px; color: #000000; background: #FFFFFF;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|&amp;lt;tt&amp;gt;# ts_calibrate&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:Check the enviroment variable &amp;quot;TSLIB_TSDEVICE=/dev/input/event0&amp;quot; with &amp;lt;tt&amp;gt; printenv &amp;lt;/tt&amp;gt; if an error occurs.&lt;br /&gt;
&lt;br /&gt;
== Kernel Userspace Interfaces to Access Hardware == &lt;br /&gt;
&lt;br /&gt;
=== Ethernet Interfaces ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM ENET 1||&amp;lt;tt&amp;gt;ethsom0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM ENET 2||&amp;lt;tt&amp;gt;ethsom1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Serial (UART) Interfaces ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM (FF) UART 1||&amp;lt;tt&amp;gt;/dev/ttymxc0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM (BT) UART 2 ||&amp;lt;tt&amp;gt;/dev/ttymxc4&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM (STD) UART 3 ||&amp;lt;tt&amp;gt;/dev/ttymxc3&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== I2C Interfaces ===&lt;br /&gt;
:Hardware revision &#039;&#039;&#039;300&#039;&#039;&#039; and &#039;&#039;&#039;newer&#039;&#039;&#039; (dhcom3.., dhcom4.., ...)&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM I2C 1||&amp;lt;tt&amp;gt;/dev/i2c-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM I2C 2 ||&amp;lt;tt&amp;gt;/dev/i2c-0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||On Module Devices ||&amp;lt;tt&amp;gt;/dev/i2c-2&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:Hardware revision &#039;&#039;&#039;100 / 200&#039;&#039;&#039; (dhcom1.. / dhcom2..)&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM I2C 1||&amp;lt;tt&amp;gt;/dev/i2c-0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM I2C 2 ||&amp;lt;tt&amp;gt;/dev/i2c-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||On Module Devices ||&amp;lt;tt&amp;gt;/dev/i2c-2&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== SPI Interfaces ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||&amp;lt;b&amp;gt;Device&amp;lt;/b&amp;gt;||&amp;lt;b&amp;gt;Kernel &amp;lt;= 4.4.60&amp;lt;/b&amp;gt;||&amp;lt;b&amp;gt;Kernel &amp;gt;= 5.10.xxx&amp;lt;/b&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM SPI 1||&amp;lt;tt&amp;gt;/dev/spidev0.2&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;/dev/spidev0.1&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||DHCOM SPI 2 ||&amp;lt;tt&amp;gt;/dev/spidev1.0&amp;lt;/tt&amp;gt;||&amp;lt;tt&amp;gt;/dev/spidev1.0&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; DHCOM SPI1 interface doesn‘t work with DHCOM Premium Developer Kit (HD00013).&lt;br /&gt;
::Reason: At DHCOM Premium Developer Kit SPI 1 isn‘t connected, because otherwise i.MX6 doesn‘t boot with the current schematic.&lt;br /&gt;
&lt;br /&gt;
=== MMC/SD/eMMC Interfaces ===&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 400px&amp;quot;&lt;br /&gt;
 ||DHCOM SD-Interface ||&amp;lt;tt&amp;gt;/dev/mmcblk0pX&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||on module µSD Card ||&amp;lt;tt&amp;gt;/dev/mmcblk1pX&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 ||on module eMMC ||&amp;lt;tt&amp;gt;/dev/mmcblk2pX&amp;lt;/tt&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
: &#039;X&#039; has to be replaced with the partition number&lt;br /&gt;
&lt;br /&gt;
=== Control the display brightness ===&lt;br /&gt;
:Set brightness level (X = 0...10)&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;echo X &amp;gt;/sys/class/backlight/display/brightness&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Control GPIOs ===&lt;br /&gt;
:See which gpio is already used by the system&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;cat /sys/kernel/debug/gpio &amp;amp;#x007C; grep -v &amp;quot;gpio-... ( &amp;quot;&#039;&#039;&amp;lt;/tt&amp;gt; &amp;lt;br&amp;gt;or&amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;&#039;&#039;gpioinfo &amp;amp;#x007C; grep -v unnamed&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 1000px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! DHCOM Name: !! alt. DHCOM Name: !! SO-DIMM Pin# !! CPU Pad Name !! Linux &amp;lt;GPIO#&amp;gt; * !! gpiod label (deprecated): !! gpiod label:&lt;br /&gt;
|-&lt;br /&gt;
| GPIO A || || 154 || PAD_GPIO_2 || 2 || A || DHCOM-A&lt;br /&gt;
|-&lt;br /&gt;
| GPIO B || || 156 || PAD_GPIO_4 || 4 || B || DHCOM-B&lt;br /&gt;
|-&lt;br /&gt;
| GPIO C || || 162 || PAD_GPIO_5 || 5 || C || DHCOM-C&lt;br /&gt;
|-&lt;br /&gt;
| GPIO D || || 163 || PAD_CSI0_DAT17 || 163 || D || DHCOM-D&lt;br /&gt;
|-&lt;br /&gt;
| GPIO E || || 164 || PAD_GPIO_19 || 101 || E || DHCOM-E&lt;br /&gt;
|-&lt;br /&gt;
| GPIO F || || 165 || PAD_DI0_PIN4 || 116 || F || DHCOM-F&lt;br /&gt;
|-&lt;br /&gt;
| GPIO G || || 167 || PAD_EIM_D27 || 91 || G || DHCOM-G&lt;br /&gt;
|-&lt;br /&gt;
| GPIO H || || 173 || PAD_KEY_ROW0 || 103 || H || DHCOM-H&lt;br /&gt;
|-&lt;br /&gt;
| GPIO I || || 175 || PAD_KEY_COL1 || 104 || I || DHCOM-I&lt;br /&gt;
|-&lt;br /&gt;
| GPIO J || CIF HSYNC || 74 || PAD_NANDF_CS1 || 174 || J || DHCOM-J&lt;br /&gt;
|-&lt;br /&gt;
| GPIO K || CIF PCLK || 72 || PAD_NANDF_CS2 || 175 || K || DHCOM-K&lt;br /&gt;
|-&lt;br /&gt;
| GPIO L || CIF MCLK || 70 || PAD_KEY_ROW1 || 105 || L || DHCOM-L&lt;br /&gt;
|-&lt;br /&gt;
| GPIO M || CIF VSYNC || 68 || PAD_SD3_DAT5 || 192 || M || DHCOM-M&lt;br /&gt;
|-&lt;br /&gt;
| GPIO N || CIF D9 || 66 || PAD_SD3_DAT4 || 193 || N || DHCOM-N&lt;br /&gt;
|-&lt;br /&gt;
| GPIO O || CIF D8 || 64 || PAD_CSI0_VSYNC || 149 || O || DHCOM-O&lt;br /&gt;
|-&lt;br /&gt;
| GPIO P || CIF D7 || 62 || PAD_GPIO_18 || 205 || P || DHCOM-P&lt;br /&gt;
|-&lt;br /&gt;
| GPIO Q || CIF D6 || 60 || PAD_SD1_CMD || 18 || Q || DHCOM-Q&lt;br /&gt;
|-&lt;br /&gt;
| GPIO R || CIF D5 || 58 || PAD_SD1_DAT0 || 16 || R || DHCOM-R&lt;br /&gt;
|-&lt;br /&gt;
| GPIO S || CIF D4 || 56 || PAD_SD1_DAT1 || 17 || S || DHCOM-S&lt;br /&gt;
|-&lt;br /&gt;
| GPIO T || CIF D3 || 54 || PAD_SD1_DAT2 || 19 || T || DHCOM-T&lt;br /&gt;
|-&lt;br /&gt;
| GPIO U || CIF D2 || 52 || PAD_SD1_CLK || 20 || U || DHCOM-U&lt;br /&gt;
|-&lt;br /&gt;
| GPIO V || CIF D1 || 50 || PAD_CSI0_PIXCLK || 146 || V || DHCOM-V&lt;br /&gt;
|-&lt;br /&gt;
| GPIO W || CIF D0 || 48 || PAD_CSI0_MCLK || 147 || W || DHCOM-W&lt;br /&gt;
|-&lt;br /&gt;
| INT HIGHEST PRIORITY || || 151 || PAD_KEY_COL0|| 102 || INT || DHCOM-INT&lt;br /&gt;
|}&lt;br /&gt;
:: * = Valid if you didn&#039;t change the CONFIG_ARCH_NR_GPIO value in kernel config &#039;&#039;&#039;AND&#039;&#039;&#039; if your kernel doesn&#039;t probe another GPIO controller before the imx6 GPIO controller&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;
&lt;br /&gt;
:&#039;&#039;&#039;GPIO pin configuration&#039;&#039;&#039;&lt;br /&gt;
:: The default Linux Device Tree pin configurarion of the DHCOM GPIOs A - W is &amp;lt;code&amp;gt;0x400120b0&amp;lt;/code&amp;gt;&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
 Pad Mux Register (0x020E_xxxx) = 0x0000_0015&lt;br /&gt;
  SION:        1  Enabled (Force input path of pad)&lt;br /&gt;
  MUX_MODE: 0101  ALT5&lt;br /&gt;
 &lt;br /&gt;
 Pad Control Register (0x020E_xxxx) = 0x0001_20B0&lt;br /&gt;
  HYS:         1  Hysteresis enabled (Schmitt trigger input)&lt;br /&gt;
  ==============&lt;br /&gt;
  PUS:        00  100k Pull Down&lt;br /&gt;
  PUE:         1  PULL (Pull enabled)&lt;br /&gt;
  PKE:         0  Disable (Pull/Keeper disabled)&lt;br /&gt;
  ODE:         0  Disable (Output is CMOS)&lt;br /&gt;
  RESERVED:  000&lt;br /&gt;
  --------------&lt;br /&gt;
  SPEED:      10  imx6:    100MHz (medium)&lt;br /&gt;
                  imx6ull: 100MHz (medium)&lt;br /&gt;
  DSE:       110  Drive strength imx6:     40 Ohm&lt;br /&gt;
                                 imx6ull:  43 Ohm @ 3.3V&lt;br /&gt;
  RESERVED    00&lt;br /&gt;
  SRE:         0  SLOW (Slow Slew Rate)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Controlled by gpiod tools (need Kernel v4.7 or higher)&#039;&#039;&#039;&lt;br /&gt;
::Set state&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;gpioset $(gpiofind GPIO_LABEL)=0&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;gpioset $(gpiofind GPIO_LABEL)=1&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
::Get state&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;gpioget $(gpiofind GPIO_LABEL)&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;gpioget $(gpiofind GPIO_LABEL)&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; GPIO_LABEL could be DHCOM-A, DHCOM-B, DHCOM-C, ... see table above&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Controlled by sysfs (since Kernel v4.8 deprecated)&#039;&#039;&#039;&lt;br /&gt;
::Export&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;echo &amp;lt;GPIO#&amp;gt; &amp;gt;/sys/class/gpio/export&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:: &#039;&#039;&#039;Remark:&#039;&#039;&#039; Have a look into &amp;lt;tt&amp;gt; /sys/class/gpio/ &amp;lt;/tt&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;tt&amp;gt;&#039;&#039;echo in &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/direction&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;echo out &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/direction&#039;&#039;&amp;lt;/tt&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;tt&amp;gt;&#039;&#039;echo 0 &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;echo 1 &amp;gt;/sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
::Get state&lt;br /&gt;
::{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;cat /sys/class/gpio/gpio&amp;lt;GPIO#&amp;gt;/value&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initialize and Test CAN Interface ===&lt;br /&gt;
:Initialize:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;ip link set can0 up type can bitrate 500000&#039;&#039;&amp;lt;/tt&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;tt&amp;gt;&#039;&#039;cansend can0 100#11.2233.44556677.88&#039;&#039;&amp;lt;/tt&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;tt&amp;gt;&#039;&#039;candump can0&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:Get can-utils:&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&amp;lt;tt&amp;gt;&#039;&#039;apt-get install can-utils&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Parallel Address- / Databus ===&lt;br /&gt;
&lt;br /&gt;
:To use the 16-bit address / databus from Linux userspace you can use the UIO driver interface. To enable and configure the interface it is necessary to setup the WEIM controller with the device tree. See the documentation of the device tree bindings of weim [https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/Documentation/devicetree/bindings/bus/imx-weim.txt here].&lt;br /&gt;
&lt;br /&gt;
:Here is an example code which demonstrates how to do enable and configure the WEIM interface (parallel address- / databus):&lt;br /&gt;
:{|&lt;br /&gt;
|&amp;lt;tt&amp;gt;&lt;br /&gt;
 &amp;amp;weim {&lt;br /&gt;
 	pinctrl-names = &amp;quot;default&amp;quot;;&lt;br /&gt;
 	pinctrl-0 = &amp;lt;&amp;amp;pinctrl_dhcom_weim &amp;amp;pinctrl_dhcom_weim_cs0 &amp;amp;pinctrl_dhcom_weim_cs1&amp;gt;;&lt;br /&gt;
 	#address-cells = &amp;lt;2&amp;gt;;&lt;br /&gt;
 	#size-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 	/* it is necessary to setup 2x 64MB otherwise setting gpr fails */&lt;br /&gt;
 	ranges = &amp;lt;0 0  0x08000000  0x04000000&amp;gt;,					// Chip select 0 == DHCOM CS A&lt;br /&gt;
 		 &amp;lt;1 0  0x0c000000  0x04000000&amp;gt;;					// Chip select 1 == DHCOM CS B&lt;br /&gt;
 	fsl,weim-cs-gpr = &amp;lt;&amp;amp;gpr&amp;gt;;&lt;br /&gt;
 	status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 	uiomap_cs0@0,0 {&lt;br /&gt;
 		compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
 		reg = &amp;lt;0 0x00000000 0x04000000&amp;gt;;&lt;br /&gt;
 		reg-names = &amp;quot;uio_cs0&amp;quot;;&lt;br /&gt;
 		interrupt-parent = &amp;lt;&amp;amp;gpio1&amp;gt;;&lt;br /&gt;
 		interrupts = &amp;lt;2 2&amp;gt;;						// Add gpio A == interrupt&lt;br /&gt;
 		#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 		#size-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 		fsl,weim-cs-timing = &amp;lt;0x00610089 0x00001002 0x0F011061&lt;br /&gt;
 				      0x00000000 0x0F068A31 0x00000000&amp;gt;;&lt;br /&gt;
 		status = &amp;quot;okay&amp;quot;;&lt;br /&gt;
 	};&lt;br /&gt;
 &lt;br /&gt;
 	uiomap_cs1@0,1 {&lt;br /&gt;
 		compatible = &amp;quot;generic-uio&amp;quot;;&lt;br /&gt;
 		reg = &amp;lt;1 0x00000000 0x04000000&amp;gt;;&lt;br /&gt;
 		reg-names = &amp;quot;uio_cs1&amp;quot;;&lt;br /&gt;
 		interrupt-parent = &amp;lt;&amp;amp;gpio1&amp;gt;;&lt;br /&gt;
 		interrupts = &amp;lt;4 2&amp;gt;;						// Add gpio B == interrupt&lt;br /&gt;
 		#address-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 		#size-cells = &amp;lt;1&amp;gt;;&lt;br /&gt;
 		fsl,weim-cs-timing = &amp;lt;0x00610089 0x00001002 0x0F011061&lt;br /&gt;
 				      0x00000000 0x0F068A31 0x00000000&amp;gt;;&lt;br /&gt;
 		status = &amp;quot;disabled&amp;quot;;&lt;br /&gt;
 	};&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
: We have already written some demo code at [https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6qdl-dhcom_cfg-weim.dtsi /arch/arm/boot/dts/imx6qdl-dhcom_cfg-weim.dtsi]. It is easy to enable in the matching device-tree file:&lt;br /&gt;
::*[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6s-dhcom3B-pdk2.dts /arch/arm/boot/dts/imx6s-dhcom3B-pdk2.dts]&lt;br /&gt;
::*[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6dl-dhcom3B-pdk2.dts /arch/arm/boot/dts/imx6dl-dhcom3B-pdk2.dts]&lt;br /&gt;
::*[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6d-dhcom3B-pdk2.dts /arch/arm/boot/dts/imx6d-dhcom3B-pdk2.dts]&lt;br /&gt;
::*[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6q-dhcom3B-pdk2.dts /arch/arm/boot/dts/imx6q-dhcom3B-pdk2.dts]&lt;br /&gt;
:{|&lt;br /&gt;
| &amp;lt;tt&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;#FF1010&amp;quot;&amp;gt;- // #include &amp;quot;imx6qdl-dhcom_cfg-weim.dtsi&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;#00FF10&amp;quot;&amp;gt;+ #include &amp;quot;imx6qdl-dhcom_cfg-weim.dtsi &amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:To use the generic uio driver it has to be enabled in the kernel configuration (&amp;lt;code&amp;gt;[[#Linux Kernel|make menuconfig]]&amp;lt;/code&amp;gt;)&lt;br /&gt;
::*Device Drivers -&amp;gt; Userspace I/O Drivers -&amp;gt; Userspace I/O platform driver with generic IRQ handling&lt;br /&gt;
: The device-tree of_id of the uio driver has to be set via kernel command line&lt;br /&gt;
::*Add &amp;quot;optargs=&#039;uio_pdrv_genirq.of_id=generic-uio&#039;&amp;quot; to uLinuxEnv.txt&lt;br /&gt;
&lt;br /&gt;
:Example for a UIO userspace driver:&lt;br /&gt;
:* [[media:uio_access.zip| uio_access.cpp]]&lt;br /&gt;
:* for further information have a look at the paper [https://www.osadl.org/fileadmin/dam/rtlws/12/Koch.pdf Userspace I/O drivers in a realtime context]&lt;br /&gt;
&lt;br /&gt;
=== Configure your own display ===&lt;br /&gt;
&lt;br /&gt;
:To configure your own display you have to do the following steps:&lt;br /&gt;
&lt;br /&gt;
:1. Configure your display and build a settings file by our tool DHCOMSettingsGenerator ([[media:DHCOMSettingsGeneratorV2_V2.0.0.2.zip|Download v2.0.0.2]])&lt;br /&gt;
&lt;br /&gt;
:2. Place generated file into the first partition (label: &amp;quot;boot&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
:3. Create a symbolic link to the file settings.bin ($ ln -s YourSettingsFile.bin settings.bin)&lt;br /&gt;
&lt;br /&gt;
:Remake: It is still possible to config the display via Device Tree e.g. &amp;lt;code&amp;gt;[https://github.com/dh-electronics/linux-imx6qdl/blob/dev/4.4.60_dhcom/arch/arm/boot/dts/imx6qdl-dh_pdk2.dtsi dev/4.4.60_dhcom/arch/arm/boot/dts/imx6qdl-dh_pdk2.dtsi]&amp;lt;/code&amp;gt; (not recommended by DH)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;The following picture showing the sequence and priorities:&#039;&#039;&#039;&lt;br /&gt;
:[[Image:DHCM_Display_Settings.jpg|1300px|DHCOM Display Settings]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
For detailed description of the &#039;&#039;&#039;display boot args&#039;&#039;&#039; please have a look at [[DHCOM iMX6 Bootloader U-Boot#Display and Hardware settings|Display and Hardware settings]] of the iMX6 Bootloader.&lt;br /&gt;
&lt;br /&gt;
== Additional Information ==&lt;br /&gt;
:*[[Linux Kernel Features | Linux Kernel Features ]]&lt;br /&gt;
:*[[ELBE Overview| Embedded Linux Build Environment (ELBE)]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3774</id>
		<title>XLON</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3774"/>
		<updated>2022-10-27T09:46:25Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* 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;
=== XLON Configuration ===&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 by using the xlon-util tool.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XLON Tools ===&lt;br /&gt;
With the following links you can download the xlon-util for different architectures:&lt;br /&gt;
* [[media:AAAu48iSX_j4TVGTrvtwGuqja|xlon-util packages]]&lt;br /&gt;
:  The xlon-util packages containes the xlon-util to configure the xlon-u10. It also contains the xlon-api libs to integrate the xlon-util functionality into a custom application.&lt;br /&gt;
* [[media:AAA8eq-wtunWfVFSOihXnh57a|dependency packages]]&lt;br /&gt;
:  The dependency packages contains libraries which are not in the debian repositories.&lt;br /&gt;
* [[media:AADI1WNNbNVhxeswBt43cWKMa|development packages]]&lt;br /&gt;
:  The development packages contains the api header files to compile a custom application with the xlon-api libs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;
|[[media:XLON-2G-Win7-x86.zip|XLON-2G-Win7-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win7-x64.zip|XLON-2G-Win7-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[media:XLON-2G-Win8-x86.zip|XLON-2G-Win8-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8-x64.zip|XLON-2G-Win8-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x86.zip|XLON-2G-Win8.1-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x64.zip|XLON-2G-Win8.1-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[media:XLON-U10-Vendor_x86.zip|XLON-U10-Vendor_x86.zip]]&lt;br /&gt;
|[[media:XLON-U10-Vendor_x64.zip|XLON-U10-Vendor_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;
|[[media:XLON-2G-Win7-x86-cdc-acm.zip|XLON-2G-Win7-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win7-x64-cdc-acm.zip|XLON-2G-Win7-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[media:XLON-2G-Win8-x86-cdc-acm.zip|XLON-2G-Win8-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8-x64-cdc-acm.zip|XLON-2G-Win8-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x86-cdc-acm.zip|XLON-2G-Win8.1-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x64-cdc-acm.zip|XLON-2G-Win8.1-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[media:XLON-U10-CDC_x86.zip|XLON-U10-CDC_x86.zip]]&lt;br /&gt;
|[[media:XLON-U10-CDC_x64.zip|XLON-U10-CDC_x64.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If you experience an error about missing &#039;Microsoft Visual C 2010 redistributable&#039; when starting xlon_util.exe, &lt;br /&gt;
please download it from the [https://www.microsoft.com/de-de/download/details.aspx?id=5555 Microsoft site].&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3773</id>
		<title>XLON</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3773"/>
		<updated>2022-10-27T09:45:25Z</updated>

		<summary type="html">&lt;p&gt;Capfel: Undo revision 3771 by Capfel (talk)&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;
=== XLON Configuration ===&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 by using the xlon-util tool.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XLON Tools ===&lt;br /&gt;
With the following links you can download the xlon-util for different architectures:&lt;br /&gt;
* [[media:AAAu48iSX_j4TVGTrvtwGuqja|xlon-util packages]]&lt;br /&gt;
:  The xlon-util packages containes the xlon-util to configure the xlon-u10. It also contains the xlon-api libs to integrate the xlon-util functionality into a custom application.&lt;br /&gt;
* [[media:AAA8eq-wtunWfVFSOihXnh57a|dependency packages]]&lt;br /&gt;
:  The dependency packages contains libraries which are not in the debian repositories.&lt;br /&gt;
* [[media:AADI1WNNbNVhxeswBt43cWKMa|development packages]]&lt;br /&gt;
:  The development packages contains the api header files to compile a custom application with the xlon-api libs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;
|[[media:XLON-2G-Win7-x86.zip|XLON-2G-Win7-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win7-x64.zip|XLON-2G-Win7-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[media:XLON-2G-Win8-x86.zip|XLON-2G-Win8-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8-x64.zip|XLON-2G-Win8-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x86.zip|XLON-2G-Win8.1-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x64.zip|XLON-2G-Win8.1-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[media:XLON-2G-Win10-x86.zip|XLON-2G-Win10-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win10-x64.zip|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;
|[[media:XLON-2G-Win7-x86-cdc-acm.zip|XLON-2G-Win7-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win7-x64-cdc-acm.zip|XLON-2G-Win7-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[media:XLON-2G-Win8-x86-cdc-acm.zip|XLON-2G-Win8-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8-x64-cdc-acm.zip|XLON-2G-Win8-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x86-cdc-acm.zip|XLON-2G-Win8.1-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x64-cdc-acm.zip|XLON-2G-Win8.1-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[media:XLON-2G-Win10-x86-cdc-acm.zip|XLON-2G-Win10-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win10-x64-cdc-acm.zip|XLON-2G-Win10-x64-cdc-acm.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If you experience an error about missing &#039;Microsoft Visual C 2010 redistributable&#039; when starting xlon_util.exe, &lt;br /&gt;
please download it from the [https://www.microsoft.com/de-de/download/details.aspx?id=5555 Microsoft site].&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3772</id>
		<title>XLON</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3772"/>
		<updated>2022-10-27T09:45:02Z</updated>

		<summary type="html">&lt;p&gt;Capfel: Undo revision 3768 by Capfel (talk)&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;
=== XLON Configuration ===&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 by using the xlon-util tool.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XLON Tools ===&lt;br /&gt;
With the following links you can download the xlon-util for different architectures:&lt;br /&gt;
* [[media:AAAu48iSX_j4TVGTrvtwGuqja|xlon-util packages]]&lt;br /&gt;
:  The xlon-util packages containes the xlon-util to configure the xlon-u10. It also contains the xlon-api libs to integrate the xlon-util functionality into a custom application.&lt;br /&gt;
* [[media:AAA8eq-wtunWfVFSOihXnh57a|dependency packages]]&lt;br /&gt;
:  The dependency packages contains libraries which are not in the debian repositories.&lt;br /&gt;
* [[media:AADI1WNNbNVhxeswBt43cWKMa|development packages]]&lt;br /&gt;
:  The development packages contains the api header files to compile a custom application with the xlon-api libs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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;
|[[media:XLON-2G-Win7-x86.zip|XLON-2G-Win7-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win7-x64.zip|XLON-2G-Win7-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[media:XLON-2G-Win8-x86.zip|XLON-2G-Win8-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8-x64.zip|XLON-2G-Win8-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x86.zip|XLON-2G-Win8.1-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x64.zip|XLON-2G-Win8.1-x64.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[media:XLON-2G-Win10-x86.zip|XLON-2G-Win10-x86.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win10-x64.zip|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,8,8.1,10&lt;br /&gt;
|[[media:XLON-U10-CDC_x86.zip|XLON-U10-CDC_x86.zip]]&lt;br /&gt;
|[[media:XLON-U10-CDC_x64.zip|XLON-U10-CDC_x64.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If you experience an error about missing &#039;Microsoft Visual C 2010 redistributable&#039; when starting xlon_util.exe, &lt;br /&gt;
please download it from the [https://www.microsoft.com/de-de/download/details.aspx?id=5555 Microsoft site].&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3771</id>
		<title>XLON</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3771"/>
		<updated>2022-10-27T08:24:06Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* 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;
=== XLON Configuration ===&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 by using the xlon-util tool.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XLON Tools ===&lt;br /&gt;
With the following links you can download the xlon-util for different architectures:&lt;br /&gt;
* [[media:AAAu48iSX_j4TVGTrvtwGuqja|xlon-util packages]]&lt;br /&gt;
:  The xlon-util packages containes the xlon-util to configure the xlon-u10. It also contains the xlon-api libs to integrate the xlon-util functionality into a custom application.&lt;br /&gt;
* [[media:AAA8eq-wtunWfVFSOihXnh57a|dependency packages]]&lt;br /&gt;
:  The dependency packages contains libraries which are not in the debian repositories.&lt;br /&gt;
* [[media:AADI1WNNbNVhxeswBt43cWKMa|development packages]]&lt;br /&gt;
:  The development packages contains the api header files to compile a custom application with the xlon-api libs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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,8,8.1,10&lt;br /&gt;
|[[media:XLON-U10-Vendor_x86.zip|XLON-U10-Vendor_x86.zip]]&lt;br /&gt;
|[[media:XLON-U10-Vendor_x64.zip|XLON-U10-Vendor_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,8,8.1,10&lt;br /&gt;
|[[media:XLON-U10-CDC_x86.zip|XLON-U10-CDC_x86.zip]]&lt;br /&gt;
|[[media:XLON-U10-CDC_x64.zip|XLON-U10-CDC_x64.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If you experience an error about missing &#039;Microsoft Visual C 2010 redistributable&#039; when starting xlon_util.exe, &lt;br /&gt;
please download it from the [https://www.microsoft.com/de-de/download/details.aspx?id=5555 Microsoft site].&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:XLON-U10-CDC_x86.zip&amp;diff=3770</id>
		<title>File:XLON-U10-CDC x86.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:XLON-U10-CDC_x86.zip&amp;diff=3770"/>
		<updated>2022-10-27T08:22:49Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:XLON-U10-CDC_x64.zip&amp;diff=3769</id>
		<title>File:XLON-U10-CDC x64.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:XLON-U10-CDC_x64.zip&amp;diff=3769"/>
		<updated>2022-10-27T08:22:32Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3768</id>
		<title>XLON</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=XLON&amp;diff=3768"/>
		<updated>2022-10-27T08:22:12Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* 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;
=== XLON Configuration ===&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 by using the xlon-util tool.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XLON Tools ===&lt;br /&gt;
With the following links you can download the xlon-util for different architectures:&lt;br /&gt;
* [[media:AAAu48iSX_j4TVGTrvtwGuqja|xlon-util packages]]&lt;br /&gt;
:  The xlon-util packages containes the xlon-util to configure the xlon-u10. It also contains the xlon-api libs to integrate the xlon-util functionality into a custom application.&lt;br /&gt;
* [[media:AAA8eq-wtunWfVFSOihXnh57a|dependency packages]]&lt;br /&gt;
:  The dependency packages contains libraries which are not in the debian repositories.&lt;br /&gt;
* [[media:AADI1WNNbNVhxeswBt43cWKMa|development packages]]&lt;br /&gt;
:  The development packages contains the api header files to compile a custom application with the xlon-api libs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;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,8,8.1,10&lt;br /&gt;
|[[media:XLON-U10-Vendor_x86.zip|XLON-U10-Vendor_x86.zip]]&lt;br /&gt;
|[[media:XLON-U10-Vendor_x64.zip|XLON-U10-Vendor_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;
|[[media:XLON-2G-Win7-x86-cdc-acm.zip|XLON-2G-Win7-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win7-x64-cdc-acm.zip|XLON-2G-Win7-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8&lt;br /&gt;
|[[media:XLON-2G-Win8-x86-cdc-acm.zip|XLON-2G-Win8-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8-x64-cdc-acm.zip|XLON-2G-Win8-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 8.1&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x86-cdc-acm.zip|XLON-2G-Win8.1-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win8.1-x64-cdc-acm.zip|XLON-2G-Win8.1-x64-cdc-acm.zip]]&lt;br /&gt;
|-&lt;br /&gt;
!Windows 10&lt;br /&gt;
|[[media:XLON-2G-Win10-x86-cdc-acm.zip|XLON-2G-Win10-x86-cdc-acm.zip]]&lt;br /&gt;
|[[media:XLON-2G-Win10-x64-cdc-acm.zip|XLON-2G-Win10-x64-cdc-acm.zip]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: If you experience an error about missing &#039;Microsoft Visual C 2010 redistributable&#039; when starting xlon_util.exe, &lt;br /&gt;
please download it from the [https://www.microsoft.com/de-de/download/details.aspx?id=5555 Microsoft site].&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:XLON-U10-Vendor_x86.zip&amp;diff=3767</id>
		<title>File:XLON-U10-Vendor x86.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:XLON-U10-Vendor_x86.zip&amp;diff=3767"/>
		<updated>2022-10-27T08:19:06Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:XLON-U10-Vendor_x64.zip&amp;diff=3766</id>
		<title>File:XLON-U10-Vendor x64.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:XLON-U10-Vendor_x64.zip&amp;diff=3766"/>
		<updated>2022-10-27T08:18:25Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=3688</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=3688"/>
		<updated>2022-05-12T09:48:04Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* GPIO */&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;.&lt;br /&gt;
:Return 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;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_GPIOEnum;&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;
:&#039;&#039;&#039;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&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 eMMC Memory ==&lt;br /&gt;
If the Image is stored on the microSD card (default case), the eMMC flash memory is mounted to folder &#039;&#039;&#039;MMCMemory&#039;&#039;&#039; during running WEC2013 system.&lt;br /&gt;
The flash memory can be used to store any user data.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 FTP Connection==&lt;br /&gt;
WinSCP can be used to establish FTP connection to the system.&lt;br /&gt;
: 1. Download [https://winscp.net/eng/index.php WinSCP]&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* protocol: &#039;&#039;&#039;FTP&#039;&#039;&#039;&lt;br /&gt;
::* user name: &#039;&#039;&#039;user&#039;&#039;&#039;&lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* port number: &#039;&#039;&#039;21&#039;&#039;&#039;&lt;br /&gt;
::* IP address: Use IP scanner (e.g. [http://angryip.org/ Angry IP scanner] to get device address. Hostname: &#039;&#039;&#039;DHCOM_IMX6&#039;&#039;&#039;&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=3687</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=3687"/>
		<updated>2022-05-12T09:00:45Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* GPIO */&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;.&lt;br /&gt;
:Return 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;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&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;
      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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&lt;br /&gt;
     DHCOM_GPIO_NOT_DEFINED&lt;br /&gt;
   }*pDHCOM_GPIOEnum;&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;
:&#039;&#039;&#039;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&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 eMMC Memory ==&lt;br /&gt;
If the Image is stored on the microSD card (default case), the eMMC flash memory is mounted to folder &#039;&#039;&#039;MMCMemory&#039;&#039;&#039; during running WEC2013 system.&lt;br /&gt;
The flash memory can be used to store any user data.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 FTP Connection==&lt;br /&gt;
WinSCP can be used to establish FTP connection to the system.&lt;br /&gt;
: 1. Download [https://winscp.net/eng/index.php WinSCP]&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* protocol: &#039;&#039;&#039;FTP&#039;&#039;&#039;&lt;br /&gt;
::* user name: &#039;&#039;&#039;user&#039;&#039;&#039;&lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* port number: &#039;&#039;&#039;21&#039;&#039;&#039;&lt;br /&gt;
::* IP address: Use IP scanner (e.g. [http://angryip.org/ Angry IP scanner] to get device address. Hostname: &#039;&#039;&#039;DHCOM_IMX6&#039;&#039;&#039;&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3686</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3686"/>
		<updated>2022-05-11T16:20:45Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R11_2022-05-11.zip|Download DHHalLib Library Version 1.3.0.7]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R10_2022-04-06.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R10_2022-04-06.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC7_R09_2022-03-18.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R11_2022-05-11.zip&amp;diff=3685</id>
		<title>File:DHHalLib WEC7 R11 2022-05-11.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R11_2022-05-11.zip&amp;diff=3685"/>
		<updated>2022-05-11T16:20:17Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3670</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3670"/>
		<updated>2022-04-06T17:33:28Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R10_2022-04-06.zip|Download DHHalLib Library Version 1.3.0.6]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R10_2022-04-06.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R10_2022-04-06.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC7_R09_2022-03-18.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Source_WEC7_R10_2022-04-06.zip&amp;diff=3669</id>
		<title>File:DHHalLib Test App Source WEC7 R10 2022-04-06.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Source_WEC7_R10_2022-04-06.zip&amp;diff=3669"/>
		<updated>2022-04-06T17:33:02Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3668</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3668"/>
		<updated>2022-04-06T17:32:46Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R10_2022-04-06.zip|Download DHHalLib Library Version 1.3.0.6]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R10_2022-04-06.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC7_R09_2022-03-18.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Binary_WEC7_R10_2022-04-06.zip&amp;diff=3667</id>
		<title>File:DHHalLib Test App Binary WEC7 R10 2022-04-06.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Binary_WEC7_R10_2022-04-06.zip&amp;diff=3667"/>
		<updated>2022-04-06T17:32:23Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3666</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3666"/>
		<updated>2022-04-06T17:28:37Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R10_2022-04-06.zip|Download DHHalLib Library Version 1.3.0.6]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC7_R09_2022-03-18.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R10_2022-04-06.zip&amp;diff=3665</id>
		<title>File:DHHalLib WEC7 R10 2022-04-06.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R10_2022-04-06.zip&amp;diff=3665"/>
		<updated>2022-04-06T17:28:06Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3634</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3634"/>
		<updated>2022-03-21T08:46:38Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R09_2022-03-18.zip|Download DHHalLib Library Version 1.3.0.5]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC7_R09_2022-03-18.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:CSharp_LibWrapper_Source_WEC7_R09_2022-03-18.zip&amp;diff=3633</id>
		<title>File:CSharp LibWrapper Source WEC7 R09 2022-03-18.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:CSharp_LibWrapper_Source_WEC7_R09_2022-03-18.zip&amp;diff=3633"/>
		<updated>2022-03-21T08:46:12Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=3632</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=3632"/>
		<updated>2022-03-18T11:47:44Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* (WEC7) / WEC2013 DHHalLib C# Wrapper (function wrapper) */&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;.&lt;br /&gt;
:Return 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;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&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_PWM,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;
:&#039;&#039;&#039;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&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 eMMC Memory ==&lt;br /&gt;
If the Image is stored on the microSD card (default case), the eMMC flash memory is mounted to folder &#039;&#039;&#039;MMCMemory&#039;&#039;&#039; during running WEC2013 system.&lt;br /&gt;
The flash memory can be used to store any user data.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 FTP Connection==&lt;br /&gt;
WinSCP can be used to establish FTP connection to the system.&lt;br /&gt;
: 1. Download [https://winscp.net/eng/index.php WinSCP]&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* protocol: &#039;&#039;&#039;FTP&#039;&#039;&#039;&lt;br /&gt;
::* user name: &#039;&#039;&#039;user&#039;&#039;&#039;&lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* port number: &#039;&#039;&#039;21&#039;&#039;&#039;&lt;br /&gt;
::* IP address: Use IP scanner (e.g. [http://angryip.org/ Angry IP scanner] to get device address. Hostname: &#039;&#039;&#039;DHCOM_IMX6&#039;&#039;&#039;&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=3631</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=3631"/>
		<updated>2022-03-18T11:47:21Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 / WEC2013 DHHalLib (function library) */&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;.&lt;br /&gt;
:Return 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;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&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_PWM,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;
:&#039;&#039;&#039;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&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 eMMC Memory ==&lt;br /&gt;
If the Image is stored on the microSD card (default case), the eMMC flash memory is mounted to folder &#039;&#039;&#039;MMCMemory&#039;&#039;&#039; during running WEC2013 system.&lt;br /&gt;
The flash memory can be used to store any user data.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 FTP Connection==&lt;br /&gt;
WinSCP can be used to establish FTP connection to the system.&lt;br /&gt;
: 1. Download [https://winscp.net/eng/index.php WinSCP]&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* protocol: &#039;&#039;&#039;FTP&#039;&#039;&#039;&lt;br /&gt;
::* user name: &#039;&#039;&#039;user&#039;&#039;&#039;&lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* port number: &#039;&#039;&#039;21&#039;&#039;&#039;&lt;br /&gt;
::* IP address: Use IP scanner (e.g. [http://angryip.org/ Angry IP scanner] to get device address. Hostname: &#039;&#039;&#039;DHCOM_IMX6&#039;&#039;&#039;&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=3630</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=3630"/>
		<updated>2022-03-18T11:37:08Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* (WEC7) / WEC2013 DHHalLib C# Wrapper (function wrapper) */&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;.&lt;br /&gt;
:Return 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;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&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_PWM,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;
:&#039;&#039;&#039;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&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 eMMC Memory ==&lt;br /&gt;
If the Image is stored on the microSD card (default case), the eMMC flash memory is mounted to folder &#039;&#039;&#039;MMCMemory&#039;&#039;&#039; during running WEC2013 system.&lt;br /&gt;
The flash memory can be used to store any user data.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 FTP Connection==&lt;br /&gt;
WinSCP can be used to establish FTP connection to the system.&lt;br /&gt;
: 1. Download [https://winscp.net/eng/index.php WinSCP]&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* protocol: &#039;&#039;&#039;FTP&#039;&#039;&#039;&lt;br /&gt;
::* user name: &#039;&#039;&#039;user&#039;&#039;&#039;&lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* port number: &#039;&#039;&#039;21&#039;&#039;&#039;&lt;br /&gt;
::* IP address: Use IP scanner (e.g. [http://angryip.org/ Angry IP scanner] to get device address. Hostname: &#039;&#039;&#039;DHCOM_IMX6&#039;&#039;&#039;&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=3629</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=3629"/>
		<updated>2022-03-18T11:36:27Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* (WEC7) / WEC2013 DHHalLib C# Wrapper (function wrapper) */&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;.&lt;br /&gt;
:Return 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;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&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_PWM,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;
:&#039;&#039;&#039;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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 eMMC Memory ==&lt;br /&gt;
If the Image is stored on the microSD card (default case), the eMMC flash memory is mounted to folder &#039;&#039;&#039;MMCMemory&#039;&#039;&#039; during running WEC2013 system.&lt;br /&gt;
The flash memory can be used to store any user data.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 FTP Connection==&lt;br /&gt;
WinSCP can be used to establish FTP connection to the system.&lt;br /&gt;
: 1. Download [https://winscp.net/eng/index.php WinSCP]&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* protocol: &#039;&#039;&#039;FTP&#039;&#039;&#039;&lt;br /&gt;
::* user name: &#039;&#039;&#039;user&#039;&#039;&#039;&lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* port number: &#039;&#039;&#039;21&#039;&#039;&#039;&lt;br /&gt;
::* IP address: Use IP scanner (e.g. [http://angryip.org/ Angry IP scanner] to get device address. Hostname: &#039;&#039;&#039;DHCOM_IMX6&#039;&#039;&#039;&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=3628</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=3628"/>
		<updated>2022-03-18T11:34:14Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 / WEC2013 DHHalLib (function library) */&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_166,&lt;br /&gt;
     DHCOM_GPIO_165,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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;.&lt;br /&gt;
:Return 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;Save 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 SaveTouchCalibrationData() &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function save 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;
=== Audio ===&lt;br /&gt;
:&#039;&#039;&#039;Set WAVE Out Volume Level&#039;&#039;&#039;&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&amp;lt;code&amp;gt; void SetWAVEOutVolumeLevel(int volumeLevel) &amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
:Description:&lt;br /&gt;
:: This function set wave audio volume to specified given value. The range of 0 to 100 are only allowed.&lt;br /&gt;
:Return value: &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; --&amp;gt; true = success; false = failed&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_PWM,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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 eMMC Memory ==&lt;br /&gt;
If the Image is stored on the microSD card (default case), the eMMC flash memory is mounted to folder &#039;&#039;&#039;MMCMemory&#039;&#039;&#039; during running WEC2013 system.&lt;br /&gt;
The flash memory can be used to store any user data.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 FTP Connection==&lt;br /&gt;
WinSCP can be used to establish FTP connection to the system.&lt;br /&gt;
: 1. Download [https://winscp.net/eng/index.php WinSCP]&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* protocol: &#039;&#039;&#039;FTP&#039;&#039;&#039;&lt;br /&gt;
::* user name: &#039;&#039;&#039;user&#039;&#039;&#039;&lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* port number: &#039;&#039;&#039;21&#039;&#039;&#039;&lt;br /&gt;
::* IP address: Use IP scanner (e.g. [http://angryip.org/ Angry IP scanner] to get device address. Hostname: &#039;&#039;&#039;DHCOM_IMX6&#039;&#039;&#039;&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3627</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3627"/>
		<updated>2022-03-18T11:20:42Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R09_2022-03-18.zip|Download DHHalLib Library Version 1.3.0.5]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R09_2022-03-18.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:CSharp_LibWrapper_Source_WEC2013_R09_2022-03-18.zip&amp;diff=3626</id>
		<title>File:CSharp LibWrapper Source WEC2013 R09 2022-03-18.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:CSharp_LibWrapper_Source_WEC2013_R09_2022-03-18.zip&amp;diff=3626"/>
		<updated>2022-03-18T11:20:17Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3625</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3625"/>
		<updated>2022-03-18T11:20:04Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R09_2022-03-18.zip|Download DHHalLib Library Version 1.3.0.5]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:DHHalLib_CSharp_Wrapper.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Binary_WEC7_R09_2022-03-18.zip&amp;diff=3624</id>
		<title>File:DHHalLib Test App Binary WEC7 R09 2022-03-18.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Binary_WEC7_R09_2022-03-18.zip&amp;diff=3624"/>
		<updated>2022-03-18T10:53:18Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3623</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3623"/>
		<updated>2022-03-18T10:52:03Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R09_2022-03-18.zip|Download DHHalLib Library Version 1.3.0.5]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R09_2022-03-18.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:DHHalLib_CSharp_Wrapper.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Source_WEC7_R09_2022-03-18.zip&amp;diff=3622</id>
		<title>File:DHHalLib Test App Source WEC7 R09 2022-03-18.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Source_WEC7_R09_2022-03-18.zip&amp;diff=3622"/>
		<updated>2022-03-18T10:51:35Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App.zip&amp;diff=3621</id>
		<title>File:DHHalLib Test App.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App.zip&amp;diff=3621"/>
		<updated>2022-03-18T10:46:15Z</updated>

		<summary type="html">&lt;p&gt;Capfel: Capfel uploaded a new version of File:DHHalLib Test App.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3620</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3620"/>
		<updated>2022-03-18T10:45:39Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R09_2022-03-18.zip|Download DHHalLib Library Version 1.3.0.5]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:DHHalLib_CSharp_Wrapper.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R09_2022-03-18.zip&amp;diff=3619</id>
		<title>File:DHHalLib WEC7 R09 2022-03-18.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R09_2022-03-18.zip&amp;diff=3619"/>
		<updated>2022-03-18T10:45:09Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3615</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3615"/>
		<updated>2022-03-11T12:37:09Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R08_2022-03-11.zip|Download DHHalLib Library Version 1.3.0.4]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:DHHalLib_CSharp_Wrapper.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R08_2022-03-11.zip&amp;diff=3614</id>
		<title>File:DHHalLib WEC7 R08 2022-03-11.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R08_2022-03-11.zip&amp;diff=3614"/>
		<updated>2022-03-11T12:35:43Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3613</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3613"/>
		<updated>2022-03-10T16:37:24Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* Download WEC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.2.0.0_emmc.imx|DH U-Boot v2.2.0.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2022-02-21_imx6_updatekernel.zip|Update Kernel Release 2022-02-21]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R07_2022-02-08.zip|Download DHHalLib Library Version 1.3.0.3]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:DHHalLib_CSharp_Wrapper.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_CSharp_Wrapper.zip&amp;diff=3612</id>
		<title>File:DHHalLib CSharp Wrapper.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_CSharp_Wrapper.zip&amp;diff=3612"/>
		<updated>2022-03-10T16:35:17Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3602</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3602"/>
		<updated>2022-02-08T17:07:52Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
* [[media:PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf|PCN_DHCOM-iMX6-010_R01_2021-12-23.pdf (microSD socket EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.1.0.1_emmc.imx|DH U-Boot v2.1.0.1 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2021-12-23_imx6_updatekernel.zip|Update Kernel Release 2021-12-23]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R07_2022-02-08.zip|Download DHHalLib Library Version 1.3.0.3]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R07_2022-02-08.zip&amp;diff=3601</id>
		<title>File:DHHalLib WEC7 R07 2022-02-08.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_WEC7_R07_2022-02-08.zip&amp;diff=3601"/>
		<updated>2022-02-08T17:04:49Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=COM_iMX6_WinCE&amp;diff=3600</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=3600"/>
		<updated>2022-02-08T16:48:58Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* GPIO */&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_PWM,&lt;br /&gt;
     DHCOM_GPIO_INT_PRIO,&lt;br /&gt;
     DHCOM_GPIO_165,&lt;br /&gt;
     DHCOM_GPIO_164,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    }*pDHCOM_SPIModeEnum;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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_PWM,&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_MODE0=0,&lt;br /&gt;
        SPI_MODE1,&lt;br /&gt;
        SPI_MODE2,&lt;br /&gt;
        SPI_MODE3&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Buffer fill instructions&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;Note 1:&#039;&#039;&#039; Bits in first array-element are aligned to right.&lt;br /&gt;
:&#039;&#039;&#039;Note 2:&#039;&#039;&#039; First bit transferred is at highest valid bit-position of array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 3:&#039;&#039;&#039; The remainder of the modulo operation &amp;quot;total number of SPI-transfer bits&amp;quot; mod 32 is equal to the number of valid bits located in array-element &amp;quot;0&amp;quot;.&lt;br /&gt;
:&#039;&#039;&#039;Note 4:&#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 5:&#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;
 |                               Array-Element[0]                                      |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x02         |        0x0f         |      0xaa     | Example Data&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;
 |                               Array-Element[0]                                      |                           Array-Element[n]                                          |&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| Example Data&lt;br /&gt;
 |-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|&lt;br /&gt;
 |          0x00         |          0x00         |        0x01         |      0x02     |          0x04         |          0x08         |        0x0f         |      0xaa     | Example Data&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;Example: Send 34bits (see example data (0x02 0x04 0x08 0x0F 0xAA) above) &#039;&#039;&#039;&lt;br /&gt;
:[[Image:WEC_SPI_example.png|800px]]&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 eMMC Memory ==&lt;br /&gt;
If the Image is stored on the microSD card (default case), the eMMC flash memory is mounted to folder &#039;&#039;&#039;MMCMemory&#039;&#039;&#039; during running WEC2013 system.&lt;br /&gt;
The flash memory can be used to store any user data.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;br/&amp;gt;WEC2013 FTP Connection==&lt;br /&gt;
WinSCP can be used to establish FTP connection to the system.&lt;br /&gt;
: 1. Download [https://winscp.net/eng/index.php WinSCP]&lt;br /&gt;
:: NOTES: &lt;br /&gt;
::* protocol: &#039;&#039;&#039;FTP&#039;&#039;&#039;&lt;br /&gt;
::* user name: &#039;&#039;&#039;user&#039;&#039;&#039;&lt;br /&gt;
::* default password: &#039;&#039;&#039;dhcom_imx6&#039;&#039;&#039;&lt;br /&gt;
::* port number: &#039;&#039;&#039;21&#039;&#039;&#039;&lt;br /&gt;
::* IP address: Use IP scanner (e.g. [http://angryip.org/ Angry IP scanner] to get device address. Hostname: &#039;&#039;&#039;DHCOM_IMX6&#039;&#039;&#039;&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>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3516</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3516"/>
		<updated>2021-10-01T15:54:53Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.0.9.0_emmc.imx|DH U-Boot v2.0.9.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2020-07-27_imx6_updatekernel.zip|Update Kernel Release 2020-07-27]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R06_2021-10-01.zip|Download DHHalLib Library Version 1.3.0.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Source_WEC7_R05_2021-10-01.zip&amp;diff=3515</id>
		<title>File:DHHalLib Test App Source WEC7 R05 2021-10-01.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Source_WEC7_R05_2021-10-01.zip&amp;diff=3515"/>
		<updated>2021-10-01T15:54:35Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3514</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3514"/>
		<updated>2021-10-01T15:54:19Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.0.9.0_emmc.imx|DH U-Boot v2.0.9.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2020-07-27_imx6_updatekernel.zip|Update Kernel Release 2020-07-27]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R06_2021-10-01.zip|Download DHHalLib Library Version 1.3.0.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_R04_2021_09_28.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip&amp;diff=3513</id>
		<title>File:DHHalLib Test App Binary WEC7 R05 2021-10-01.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=File:DHHalLib_Test_App_Binary_WEC7_R05_2021-10-01.zip&amp;diff=3513"/>
		<updated>2021-10-01T15:52:44Z</updated>

		<summary type="html">&lt;p&gt;Capfel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
	<entry>
		<id>https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3512</id>
		<title>DHCOM iMX6-D2</title>
		<link rel="alternate" type="text/html" href="https://wiki.dh-electronics.com/index.php?title=DHCOM_iMX6-D2&amp;diff=3512"/>
		<updated>2021-10-01T15:31:22Z</updated>

		<summary type="html">&lt;p&gt;Capfel: /* WEC7 DHHalLib.dll (function library) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|__TOC__&lt;br /&gt;
|[[Image:IM6Modul.png|600px|COM iMX6-D2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; |  style=&amp;quot;width: 100%; color: #000000; background: #f3f3f3;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
| style=&amp;quot;width: 50%; background: #076b8d; border: 0pt;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* &#039;&#039;&#039;Cortex-A9  Freescale i.MX6 Solo/DualLite/Dual/Quad up to 1.2GHz&#039;&#039;&#039;&lt;br /&gt;
* 2D (GC320) / 3D (GC880/GC2000) graphics accelerator&lt;br /&gt;
* 128 - 1024 MByte NAND flash memory (8 bit bus width) or&amp;lt;br/&amp;gt;4 - 16 GByte eMMC flash (8 bit bus width)&lt;br /&gt;
* 2 MB SPI boot flash&lt;br /&gt;
* 256 - 2048 MByte DDR3-1066 or DDR3-800&lt;br /&gt;
* On module microSD card socket (4 bit SDIO) &amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* SD/MMC card interface, 4 bit SDIO&lt;br /&gt;
* LC display controller, 24 bit colors, 2048x1536 pixels&lt;br /&gt;
* LVDS 4-channel, max. 165 Mpixels/s&lt;br /&gt;
* On-board touch controller for 4-wire resistive touch screens&lt;br /&gt;
* Ethernet controller 10/100 Mbit, IEEE1588 conform&lt;br /&gt;
* USB 2.0 OTG high-speed&lt;br /&gt;
* USB 2.0 host high speed&lt;br /&gt;
* Full function UART &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Standard UART with hardware handshake support&lt;br /&gt;
* Standard UART&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; On module microSD card socket is only available if second CAN port is not connected.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; CTS and RTS is only available if second CAN port is not connected.&lt;br /&gt;
|valign=&amp;quot;top&amp;quot; style=&amp;quot;border: 0pt;&amp;quot; | &lt;br /&gt;
* 2x CAN interface &amp;lt;sup&amp;gt;[1][2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* 2x SPI interface &lt;br /&gt;
* 2x I²C interface &lt;br /&gt;
* I²S Audio codec (1 x microphone, 1 x Line in, 1x Line out)&lt;br /&gt;
* Real-time clock (I²C connection), low power temperature compensated&lt;br /&gt;
* 12 bit analog input &lt;br /&gt;
* 128 Bytes EEPROM with integrated MAC address &lt;br /&gt;
* 16 bit address/databus interface on SODIMM-200 socket &lt;br /&gt;
* PWM channel&lt;br /&gt;
* 24 GPIOs (A-W + INT_HI_PRIO)&lt;br /&gt;
* JTAG debug connection via FFC plug connector &lt;br /&gt;
* Industrial temperature range (-40°C to +85°C)&lt;br /&gt;
* SODIMM-200 socket with DHCOM pin assignment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*[[COM iMX6 Hardware|Hardware Support]]&lt;br /&gt;
&lt;br /&gt;
== Product Change Notifications (PCN) ==&lt;br /&gt;
* [[media:PCN_iMX6_R01_2017-08-17.pdf|PCN_iMX6_R01_2017-08-17.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R02_2017-08-17.pdf|PCN_iMX6_R02_2017-08-17.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R03_2017-09-20.pdf|PCN_iMX6_R03_2017-09-20.pdf (SW ethernet bug)]]&lt;br /&gt;
* [[media:PCN_iMX6_R04_2017-09-25.pdf|PCN_iMX6_R04_2017-09-25.pdf (Molex microSD socket)]]&lt;br /&gt;
* [[media:PCN_iMX6_R05_2018-01-10.pdf|PCN_iMX6_R05_2018-01-10.pdf (512MB NAND flash)]]&lt;br /&gt;
* [[media:PCN_iMX6_R06_2018-10-09.pdf|PCN_iMX6_R06_2018-10-09.pdf (label change)]]&lt;br /&gt;
* [[media:PCN_iMX6_R07_2019-11-13.pdf|PCN_iMX6_R07_2019-11-13.pdf (4GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6_R08_2019-11-13.pdf|PCN_iMX6_R08_2019-11-13.pdf (8GByte eMMC)]]&lt;br /&gt;
* [[media:PCN_iMX6-009_R01_2021-07-20.pdf|PCN_iMX6-009_R01_2021-07-20.pdf (SPI flash EOL)]]&lt;br /&gt;
&lt;br /&gt;
== Software Support ==&lt;br /&gt;
*[[COM iMX6 Bootloader U-Boot|i.MX6: Bootloader U-Boot]]&lt;br /&gt;
*[[COM iMX6 Linux|i.MX6: Linux]]&lt;br /&gt;
*[[DHCOM Update Mechanism|DHCOM Update Mechanism]]&lt;br /&gt;
*[[Yocto | Yocto on DHCOM]]&lt;br /&gt;
*[[COM iMX6 WinCE|i.MX6: WinCE]]&lt;br /&gt;
&lt;br /&gt;
== BSP Sources==&lt;br /&gt;
==== [https://www.denx.de/wiki/U-Boot U-Boot] ====&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/legacy/2018.05_dhcom DH U-Boot (based on v2018.05)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2015.10_dhcom DH U-Boot (based on v2015.10)]&lt;br /&gt;
* [https://github.com/dh-electronics/u-boot-imx6qdl/tree/dev/2013.10_dhcom DH U-Boot (based on v2013.10)]&lt;br /&gt;
&lt;br /&gt;
==== [https://www.kernel.org Linux Kernel] ====&lt;br /&gt;
* Mainline&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/4.4.60_dhcom DH 4.4.60 Development]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/release/4.4.60_dhcom/20190926 DH 4.4.60 Release 2019-09-26 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6qdl/tree/dev/3.14.12_dhcom DH 3.14.12 Development]&lt;br /&gt;
* NXP Vendor&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v4.1.15/20190624 DH 4.1.15 Release 2019-06-24 (Yocto reference)]&lt;br /&gt;
:* [https://github.com/dh-electronics/linux-imx6-vendor/tree/release/v3.10.17/20170804 DH 3.10.17 Release 2017-08-04 (Yocto reference)]&lt;br /&gt;
&lt;br /&gt;
== Download binaries/images ==&lt;br /&gt;
==== U-Boot (for eMMC DHCOMs) ====&lt;br /&gt;
* [[media:U-boot-with-spl_imx6_v2.0.9.0_emmc.imx|DH U-Boot v2.0.9.0 (based on v2018.05)]]&lt;br /&gt;
* [[media:V1-1-0-8_u-boot-imx6qdl.tar.xz|DH U-Boot v1.1.0.8 (based on v2015.10)]]&lt;br /&gt;
: More on how to program it with the U-Boot command &amp;quot;update bootloader ...&amp;quot; on the page [[DHCOM Update Mechanism#Commandline Mode|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Update Kernel ====&lt;br /&gt;
* [[media:2020-07-27_imx6_updatekernel.zip|Update Kernel Release 2020-07-27]]&lt;br /&gt;
: More on how to use it on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==== Debian based images ====&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; + Kernel 4.4.60 Release 2020-03-03&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00035_2020-03-03_imx6_jessie_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
* Debian 8 &amp;quot;Jessie&amp;quot; with Qt5.9.1 + Vendor Kernel 4.1.15 Release 2019-09-26&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_sdcard_2000MB.img.xz|SD card: 2GB image (xz compressed)]]&lt;br /&gt;
:: Open it with Disks by double click on Debian Linux. Use [https://www.balena.io/etcher balenaEtcher] on Windows.&lt;br /&gt;
&lt;br /&gt;
:* [[media:HD00039_2019-09-26_imx6_jessie_qt5.9.1_USB_stick_update.zip|eMMC: USB stick update image]]&lt;br /&gt;
:: Extract the files on a USB stick (MBR / FAT32) and insert it into your board / device. More about the files on the page [[DHCOM Update Mechanism|&amp;quot;DHCOM Update Mechanism&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Hint: You can also progam the eMMC by using the [[COM iMX6 Bootloader U-Boot#USB Mass Storage|U-Boot command &amp;quot;ums&amp;quot;]] (usable since U-Boot v2018.05)&lt;br /&gt;
&lt;br /&gt;
== Download Linux code examples ==&lt;br /&gt;
==== [[Virtual Machine for Application Development#Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more|Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more]] ====&lt;br /&gt;
&lt;br /&gt;
== Download WEC ==&lt;br /&gt;
==== WEC7 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC7_R06_2021-10-01.zip|Download DHHalLib Library Version 1.3.0.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_R04_2021_09_28.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_R04_2021_09_28.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper.zip|Download DHHalLib CSharp Demo Wrapper App ]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Binary.zip|Download DHHalLib CSharp Demo Wrapper App Binary File]]&lt;br /&gt;
&lt;br /&gt;
==== WEC7 binary BSP ====&lt;br /&gt;
* [[media:2016-05-19_DHCOM_iMX6_BSP_BIN.zip|Download WEC7 binary BSP (date: 2016-05-19)]]&lt;br /&gt;
&lt;br /&gt;
==== WEC2013 DHHalLib.dll (function library) ====&lt;br /&gt;
* [[media:DHHalLib_WEC2013_R12_2021-10-01.zip|Download DHHalLib Library Version 1.4.2.2]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Source_WEC2013_R07_2018_06_12.zip|DHHalLib Demo App Source Code ]]&lt;br /&gt;
* [[media:DHHalLib_Test_App_Binary_WEC2013_R09_2021-10-01.zip|DHHalLib Demo App Binary File]]&lt;br /&gt;
* [[media:CSharp_LibWrapper_Source_WEC2013_R07_2021-10-01.zip|Download DHHalLib CSharp Wrapper]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Source_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Source Code]]&lt;br /&gt;
* [[media:CSharp_DHHalLib_Wrapper_App_Binary_WEC2013_R05_2017_08_08.zip|DHHalLib C# Demo App Binary File]]&lt;/div&gt;</summary>
		<author><name>Capfel</name></author>
	</entry>
</feed>