GEX protocol documentation
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gex-docs/UNIT_DO.md

55 lines
1.6 KiB

# Digital Output
- Direct output access to one or more pins of a port.
- All selected pins are written simultaneously.
- Supports generating output pulses of precise length.
Pins are ordered in a descending order (DOWNTO) and accessed in a packed format,
e.g. if pins 1 and 4 are selected (`0b10010` on the port), the control word has
two bits `(4)(1)` and e.g. `0b10` means pin 4, `0b11` both. This makes accessing the
block of pins easier, e.g. when using them to drive a parallel bus.
## Commands
### WRITE (0x00)
Write a value to all defined pins.
*Payload:*
- u16 - new value (packed)
### SET (0x01)
Set pins high
*Payload:*
- u16 - pins to set high (packed)
### CLEAR (0x02)
Set pins low
*Payload:*
- u16 - pins to set low (packed)
### TOGGLE (0x03)
Toggle selected pins (high - low)
*Payload:*
- u16 - pins to toggle (packed)
### PULSE (0x04)
Send a pulse.
The start will be aligned to 1 us or 1 ms (based on pulse length) of the internal timebase to ensure the highest length precision. This alignment reduces jitter in the pulse duration. A jitter of the pulse start time is less significant, as there's already some unpredictable delay caused by the USB connection and the PC OS scheduler.
*Payload:*
- u16 - pins to generate the pulse on (packed)
- u8 - pulse active level (0, 1)
- u8 - range (0 - milliseconds, 1 - microseconds)
- u16 - duration in the selected range
*NOTE:* The microsecond range supports durations only up to 999 us, higher
numbers will be divided by 1000 and use the millisecond range instead.
## Events
*No events defined for this unit type.*