<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=CM-X300%3A_WinCE%3A_GPIOs_Programming</id>
	<title>CM-X300: WinCE: GPIOs Programming - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=CM-X300%3A_WinCE%3A_GPIOs_Programming"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.compulab.com/w/index.php?title=CM-X300:_WinCE:_GPIOs_Programming&amp;action=history"/>
	<updated>2026-09-02T06:54:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://mediawiki.compulab.com/w/index.php?title=CM-X300:_WinCE:_GPIOs_Programming&amp;diff=916&amp;oldid=prev</id>
		<title>Shai at 11:46, 15 March 2010</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.compulab.com/w/index.php?title=CM-X300:_WinCE:_GPIOs_Programming&amp;diff=916&amp;oldid=prev"/>
		<updated>2010-03-15T11:46:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== GPIO Sample Application ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
This GPIOSample application demonstrates basic functionality of CM-X300 GPIOs under Windows CE:&lt;br /&gt;
* How to configure a GPIO pin as output and manipulate it.&lt;br /&gt;
* How to configure a GPIO pin as input and respond to changes in signal level.&lt;br /&gt;
* How to setup an edge triggered event. &lt;br /&gt;
&lt;br /&gt;
=== Application Behavior ===&lt;br /&gt;
The GPIOSample manipulates the following GPIOs:&lt;br /&gt;
* GPIO 122 (pin 12 of connector P13 on the SB-X300) - Set as output&lt;br /&gt;
* GPIO 124 (pin 14 of connector P13 on the SB-X300) - Set as input&lt;br /&gt;
* GPIO 128 (Pin 24 of connector P11 on the SB-X300) - Set as input. (pin 0 on GPIO extender 0)&lt;br /&gt;
&lt;br /&gt;
GPIO122 voltage level may be monitored with a DVM or an oscilloscope. GPIO124 and GPIO128 may be controlled by an external switch or button. &lt;br /&gt;
&lt;br /&gt;
The GPIOSample performs the following actions: &lt;br /&gt;
* Edge detection on GPIO124 (cpu GPIO). Event handler is registered with [[#BOOL_GPIOUnRegisterInterrupt.28HANDLE_hDevice.2C_DWORD_num.29|GPIORegisterInterrupt]]. The handler calls [[#VOID_GPIOInterruptDone.28HANDLE_hDevice.2C_DWORD_num.29|GPIOInterruptDone]] to indicate interrupt completion. &lt;br /&gt;
* Edge detection on GPIO128 (GPIO extender). Event handler is registered with [[#BOOL_GPIOUnRegisterInterrupt.28HANDLE_hDevice.2C_DWORD_num.29|GPIORegisterInterrupt]]. The handler calls [[#VOID_GPIOInterruptDone.28HANDLE_hDevice.2C_DWORD_num.29|GPIOInterruptDone]] to indicate interrupt completion.&lt;br /&gt;
* Clock simulation on GPIO122 with a period of 3 seconds. &lt;br /&gt;
* Input voltage level monitoring on GPIO122.&lt;br /&gt;
&lt;br /&gt;
== GPIO Driver API ==&lt;br /&gt;
=== Data Types ===&lt;br /&gt;
{{Enum| HeadLevel = ==== | Enumname = GPIO_VALUE |&lt;br /&gt;
Description = GPIO state enumeration|  &lt;br /&gt;
Field1 = GPIO_LOW |&lt;br /&gt;
Field2 = GPIO_HIGH |&lt;br /&gt;
Field3 = |&lt;br /&gt;
Field4 = |&lt;br /&gt;
Remarks = |&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Enum| HeadLevel = ==== | Enumname = GPIO_EDGE_SETTINGS |&lt;br /&gt;
Description = |  &lt;br /&gt;
Field1 = GPIO_REACT_ON_FALLING |&lt;br /&gt;
Field2 = GPIO_REACT_ON_RISING |&lt;br /&gt;
Field3 = GPIO_REACT_ON_BOTH |&lt;br /&gt;
Field4 = GPIO_DONT_REACT |&lt;br /&gt;
Remarks = |&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Struct| HeadLevel = ==== | Structname = GPIO_INTERRUPT |&lt;br /&gt;
Description = |&lt;br /&gt;
Field1 = DWORD dwGpioNum |&lt;br /&gt;
Fieldexp1 = |&lt;br /&gt;
Field2 = [[#GPIO_EDGE_SETTINGS|GPIO_EDGE_SETTINGS]]  Edge|&lt;br /&gt;
Fieldexp2 = |&lt;br /&gt;
Field3 = HANDLE	Event|&lt;br /&gt;
Fieldexp3 = |&lt;br /&gt;
Field4 = |&lt;br /&gt;
Field5 = |&lt;br /&gt;
Field6 = |&lt;br /&gt;
Field7 = |&lt;br /&gt;
Field8 = |&lt;br /&gt;
Remarks = |&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature = HANDLE GPIOOpen() | &lt;br /&gt;
Description = Opens an instance of the GPIO Driver.  |  &lt;br /&gt;
Return = Returns a handle that should be used to access the driver. Nonzero indicates success. |&lt;br /&gt;
Param1 = |&lt;br /&gt;
Param2 = |&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature = void GPIOClose(HANDLE hDevice) | &lt;br /&gt;
Description = Closes the driver handle |  &lt;br /&gt;
Return = |&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = |&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature =  BOOL GPIOSetValue(HANDLE hDevice,DWORD num, [[#GPIO_VALUE|GPIO_VALUE]] val) | &lt;br /&gt;
Description = Sets the state of a GPIO. |  &lt;br /&gt;
Return = TRUE - indicates success&lt;br /&gt;
:FALSE - indicates failure|&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = *num - GPIO number.|&lt;br /&gt;
Param3 = *val - The desired logical state. |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = Make sure the GPIO direction is setup as output.}}&lt;br /&gt;
&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature = BOOL GPIOGetValue(HANDLE hDevice,DWORD num,[[#GPIO_VALUE|GPIO_VALUE]] *gpioVal) | &lt;br /&gt;
Description =  Return the logical state of a GPIO.|  &lt;br /&gt;
Return = TRUE - indicates success&lt;br /&gt;
:FALSE - indicates failure|&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = *num - GPIO number.|&lt;br /&gt;
Param3 = *gpioVal - pointer to the GPIO state variable|&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = Make sure the GPIO direction is setup as input. Returned value for an output GPIO is undefined}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature = BOOL GPIOSetAsInput(HANDLE hDevice, DWORD num) | &lt;br /&gt;
Description =  Configures a GPIO as an input.|  &lt;br /&gt;
Return = TRUE - indicates success&lt;br /&gt;
:FALSE - indicates failure|&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance.|&lt;br /&gt;
Param2 = *num - GPIO number.|&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature =  BOOL GPIOSetAsOutput(HANDLE hDevice,DWORD num, [[#GPIO_VALUE|GPIO_VALUE]] val) | &lt;br /&gt;
Description = Configures a GPIO as an output and sets its logical state. |  &lt;br /&gt;
Return = TRUE - indicates success&lt;br /&gt;
:FALSE - indicates failure|&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = *num - GPIO number.|&lt;br /&gt;
Param3 = *val - The initial GPIO value|&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature = BOOL GPIORegisterInterrupt(HANDLE hDevice,[[#GPIO_INTERRUPT|GPIO_INTERRUPT]] interrupt) | &lt;br /&gt;
Description =  Registers a GPIO as an interrupt source. The interrupt is triggered according to the configuration in [[#GPIO_INTERRUPT|GPIO_INTERRUPT]].Edge member settings. |&lt;br /&gt;
Return = TRUE - indicates success.&lt;br /&gt;
:FALSE - indicates failure| &lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = *interrupt-  data structure that defines parameters for the interrupt registration |&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = * The handle for the interrupt event is stored in [[#GPIO_INTERRUPT|GPIO_INTERRUPT]].Event|&lt;br /&gt;
:* This function must be called before using the [[#GPIO_INTERRUPT|GPIO_INTERRUPT]].Event parameter.&lt;br /&gt;
:* The [[#GPIO_INTERRUPT|GPIO_INTERRUPT]].Event parameter may only be used in a {{Cmd|WaitForSingleObject}} call. A {{Cmd|WaitForMultipleObjects}} call with [[#GPIO_INTERRUPT|GPIO_INTERRUPT]].Event will fail. &lt;br /&gt;
:* If you use GPIO_INTERRUPT.Event in a call to WaitForSingleObject before you call {{Cmd|GPIOInterruptInitialize}}, {{Cmd|GPIOInterruptInitialize}} will fail.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature = VOID GPIOInterruptDone(HANDLE hDevice, DWORD num) | &lt;br /&gt;
Description =  Signals to the kernel that GPIO interrupt processing is complete.|  &lt;br /&gt;
Return = |&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = *num - GPIO number.|&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = A program calls {{Cmd|GPIOInterruptDone}} when it has completed the interrupt processing and is ready for another interrupt.}}&lt;br /&gt;
&lt;br /&gt;
{{APIEx| HeadLevel = ==== | Signature = BOOL GPIOUnRegisterInterrupt(HANDLE hDevice, DWORD num) | &lt;br /&gt;
Description =  Disables the GPIO hardware interrupt.|  &lt;br /&gt;
Return = TRUE - indicates success.&lt;br /&gt;
:FALSE - indicates failure |&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = *num - GPIO number.|&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = A program calls {{Cmd|GPIOUnRegisterInterrupt}} to disable the hardware interrupt and to unregister the event that was registered by {{Cmd|GPIOInterruptInitialize}}.}}&lt;br /&gt;
[[Category:Windows CE|GPIOs Programming]]&lt;br /&gt;
[[Category:CM-X300|WinCE6.0: GPIOs Programming]]&lt;/div&gt;</summary>
		<author><name>Shai</name></author>
		
	</entry>
</feed>