blob: f43f578625936f042bf59077a43890d93fcac6d5 [file] [view]
# Feature: GPIO Access {#feature-gpio-access}
This feature allows the host to have control over some or all of the
GPIO pins on the NCP. The host can determine which GPIOs are available
by examining `PROP_GPIO_CONFIG`, described below. This API supports a
maximum of 256 individual GPIO pins.
Support for this feature can be determined by the presence of `CAP_GPIO`.
## Properties ##
### PROP 4096: PROP\_GPIO\_CONFIG ###
* Argument-Encoding: `A(t(CCU))`
* Type: Read-write (Writable only using `CMD_PROP_VALUE_INSERT`,
(#cmd-prop-value-insert))
An array of structures which contain the following fields:
* `C`: GPIO Number
* `C`: GPIO Configuration Flags
* `U`: Human-readable GPIO name
GPIOs which do not have a corresponding entry are not supported.
The configuration parameter contains the configuration flags for the
GPIO:
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
|DIR|PUP|PDN|TRIGGER| RESERVED |
+---+---+---+---+---+---+---+---+
|O/D|
+---+
* `DIR`: Pin direction. Clear (0) for input, set (1) for output.
* `PUP`: Pull-up enabled flag.
* `PDN`/`O/D`: Flag meaning depends on pin direction:
* Input: Pull-down enabled.
* Output: Output is an open-drain.
* `TRIGGER`: Enumeration describing how pin changes generate
asynchronous notification commands (TBD) from the NCP to the host.
* 0: Feature disabled for this pin
* 1: Trigger on falling edge
* 2: Trigger on rising edge
* 3: Trigger on level change
* `RESERVED`: Bits reserved for future use. Always cleared to zero
and ignored when read.
As an optional feature, the configuration of individual pins may be
modified using the `CMD_PROP_VALUE_INSERT` command. Only the GPIO
number and flags fields MUST be present, the GPIO name (if present)
would be ignored. This command can only be used to modify the
configuration of GPIOs which are already exposed---it cannot be used
by the host to add addional GPIOs.
### PROP 4098: PROP\_GPIO\_STATE ###
* Type: Read-Write
Contains a bit field identifying the state of the GPIOs. The length of
the data associated with these properties depends on the number of
GPIOs. If you have 10 GPIOs, you'd have two bytes. GPIOs are numbered
from most significant bit to least significant bit, so 0x80 is GPIO 0,
0x40 is GPIO 1, etc.
For GPIOs configured as inputs:
* `CMD_PROP_VAUE_GET`: The value of the associated bit describes the
logic level read from the pin.
* `CMD_PROP_VALUE_SET`: The value of the associated bit is ignored
for these pins.
For GPIOs configured as outputs:
* `CMD_PROP_VAUE_GET`: The value of the associated bit is
implementation specific.
* `CMD_PROP_VALUE_SET`: The value of the associated bit determines
the new logic level of the output. If this pin is configured as an
open-drain, setting the associated bit to 1 will cause the pin to
enter a Hi-Z state.
For GPIOs which are not specified in `PROP_GPIO_CONFIG`:
* `CMD_PROP_VAUE_GET`: The value of the associated bit is
implementation specific.
* `CMD_PROP_VALUE_SET`: The value of the associated bit MUST be
ignored by the NCP.
When writing, unspecified bits are assumed to be zero.
### PROP 4099: PROP\_GPIO\_STATE\_SET ###
* Type: Write-only
Allows for the state of various output GPIOs to be set without
affecting other GPIO states. Contains a bit field identifying the
output GPIOs that should have their state set to 1.
When writing, unspecified bits are assumed to be zero. The value of
any bits for GPIOs which are not specified in `PROP_GPIO_CONFIG` MUST
be ignored.
### PROP 4100: PROP\_GPIO\_STATE\_CLEAR ###
* Type: Write-only
Allows for the state of various output GPIOs to be cleared without
affecting other GPIO states. Contains a bit field identifying the
output GPIOs that should have their state cleared to 0.
When writing, unspecified bits are assumed to be zero. The value of
any bits for GPIOs which are not specified in `PROP_GPIO_CONFIG` MUST
be ignored.