Return to Unit Reference
Description
GPIO devices represent the external or internal pins available on most system on chip (SoC) devices to provide control and interfacing capabilities for both hardware and software.
This unit maintains pin numbering exactly as per the SoC documentation but abstracts other features such as alternate function selects to avoid exposing chip specific values via the API.
Not all GPIO devices support the same feature set so the GPIODeviceProperties function returns a structure which describes the number of pins as well as minimum and maximum pin numbers along with a set of flags that indicate what functionality is supported by the device.
Multiple GPIO devices can be accomodated, each one is registered with this unit when the driver for the device is loaded and initialized. This unit includes functions for enumerating the devices that are available and each function takes a GPIODevice parameter to allow specifying the exact device to control.
Simplified versions of many of the functions in this unit are provided in the Platform unit to allow control of the default GPIO device and in cases where there is only one device registered these functions will provide most of the capability required.
Constants
To be documented
Type definitions
To be documented
Public variables
To be documented
Function declarations
Initialization functions
[Expand]
procedure GPIOInit;
Description: To be documented
GPIO functions
[Expand]
function GPIODeviceStart(GPIO:PGPIODevice):LongWord;
Description: Start the specified GPIO device and enable access
GPIO
|
The GPIO device to start
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function GPIODeviceStop(GPIO:PGPIODevice):LongWord;
Description: Stop the specified GPIO device and disable access
GPIO
|
The GPIO device to stop
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function GPIODeviceRead(GPIO:PGPIODevice; Reg:LongWord):LongWord;
Description: To be documented
Return
|
The value of the memory register
|
[Expand]
procedure GPIODeviceWrite(GPIO:PGPIODevice; Reg,Value:LongWord);
Description: Perform a direct write to a register of the specified GPIO device
GPIO
|
The GPIO device to write to
|
Reg
|
The memory register to write to
|
Return
|
The value to write to the register
|
[Expand]
function GPIODeviceInputGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: Get the current state of an input pin on the specified GPIO device
Pin
|
The pin to get the state for (eg GPIO_PIN_1)
|
Return
|
The current state (eg GPIO_LEVEL_HIGH) or GPIO_LEVEL_UNKNOWN on failure
|
[Expand]
function GPIODeviceInputWait(GPIO:PGPIODevice; Pin,Trigger,Timeout:LongWord):LongWord;
Description: Wait for the state of a input pin to change on the specified GPIO device
GPIO
|
The GPIO device to wait for
|
Pin
|
The pin to wait for the state to change (eg GPIO_PIN_1)
|
Trigger
|
The trigger event to wait for (eg GPIO_TRIGGER_HIGH)
|
Timeout
|
Number of milliseconds to wait for the change (INFINITE to wait forever)
|
Return
|
The state after the change (eg GPIO_LEVEL_HIGH) or GPIO_LEVEL_UNKNOWN on failure or timeout
|
[Expand]
function GPIODeviceInputEvent(GPIO:PGPIODevice; Pin,Trigger,Flags,Timeout:LongWord; Callback:TGPIOCallback; Data:Pointer):LongWord;
Description: Schedule a function to be called when the state of a input pin changes on the specified GPIO device
GPIO
|
The GPIO device to schedule the callback for
|
Pin
|
The pin to schedule the state change for (eg GPIO_PIN_1)
|
Trigger
|
The trigger event which will cause the function to be called (eg GPIO_TRIGGER_HIGH)
|
Timeout
|
The number of milliseconds before the scheduled trigger expires (INFINITE to never expire)
|
Callback
|
The function to be called when the trigger occurs
|
Data
|
A pointer to be pass to the function when the trigger occurs (Optional)
|
Return
|
ERROR_SUCCESS if the trigger was scheduled successfully or another error code on failure
|
Note
|
The pin and trigger that caused the event will be passed to the callback function
|
[Expand]
function GPIODeviceInputCancel(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: Cancel a previously scheduled event callback function for an input pin on the specified GPIO device
GPIO
|
The GPIO device to cancel the callback for
|
Pin
|
The pin to cancel the state change for (eg GPIO_PIN_1)
|
Return
|
ERROR_SUCCESS if the callback was cancelled successfully or another error code on failure
|
[Expand]
function GPIODeviceOutputSet(GPIO:PGPIODevice; Pin,Level:LongWord):LongWord;
Description: Set the state of a output pin on the specified GPIO device
GPIO
|
The GPIO device to set for
|
Pin
|
The pin to set the state for (eg GPIO_PIN_1)
|
Level
|
The state to set the pin to (eg GPIO_LEVEL_HIGH)
|
Return
|
ERROR_SUCCESS if completed successfully or another error code on failure
|
[Expand]
function GPIODevicePullGet(GPIO:PGPIODevice;Pin:LongWord):LongWord;
Description: Get the current pull state of a pin on the specified GPIO device
Pin
|
The pin to get the pull state for (eg GPIO_PIN_1)
|
Return
|
The current pull state of the pin (eg GPIO_PULL_UP) or GPIO_PULL_UNKNOWN on failure
|
[Expand]
function GPIODevicePullSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;
Description: Change the pull state of a pin on the specified GPIO device
GPIO
|
The GPIO device to set for
|
Pin
|
The pin to change the pull state for (eg GPIO_PIN_1)
|
Mode
|
The pull state to set for the pin (eg GPIO_PULL_UP)
|
Return
|
ERROR_SUCCESS if completed successfully or another error code on failure
|
[Expand]
function GPIODeviceFunctionGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: Get the current function of a pin on the specified GPIO device
[Expand]
function GPIODeviceFunctionSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;
Description: Change the function of a pin on the specified GPIO device
Pin
|
The pin to get the function for (eg GPIO_PIN_1)
|
Return
|
The current function of the pin (eg GPIO_FUNCTION_IN) or GPIO_FUNCTION_UNKNOWN on failure
|
GPIO
|
The GPIO device to set for
|
Pin
|
The pin to change the function for (eg GPIO_PIN_1)
|
Mode
|
The function to set for the pin (eg GPIO_FUNCTION_OUT)
|
Return
|
ERROR_SUCCESS if completed successfully or another error code on failure
|
[Expand]
function GPIODeviceProperties(GPIO:PGPIODevice; Properties:PGPIOProperties):LongWord;
Description: Get the properties for the specified GPIO device
Properties
|
Pointer to a TGPIOProperties structure to fill in
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function GPIODeviceCreate:PGPIODevice;
Description: Create a new GPIO entry
Return
|
Pointer to new GPIO entry or nil if GPIO could not be created
|
[Expand]
function GPIODeviceCreateEx(Size:LongWord):PGPIODevice;
Description: Create a new GPIO entry
Size
|
Size in bytes to allocate for new GPIO (Including the GPIO entry)
|
Return
|
Pointer to new GPIO entry or nil if GPIO could not be created
|
[Expand]
function GPIODeviceDestroy(GPIO:PGPIODevice):LongWord;
Description: Destroy an existing GPIO entry
GPIO
|
The GPIO device to destroy
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function GPIODeviceRegister(GPIO:PGPIODevice):LongWord;
Description: Register a new GPIO in the GPIO table
GPIO
|
The GPIO device to register
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function GPIODeviceDeregister(GPIO:PGPIODevice):LongWord;
Description: Deregister a GPIO in the GPIO table
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function GPIODeviceFind(GPIOId:LongWord):PGPIODevice;
Description: To be documented
[Expand]
function GPIODeviceFindByName(const Name:String):PGPIODevice; inline;
Description: To be documented
[Expand]
function GPIODeviceFindByDescription(const Description:String):PGPIODevice; inline;
Description: To be documented
[Expand]
function GPIODeviceEnumerate(Callback:TGPIOEnumerate; Data:Pointer):LongWord;
Description: To be documented
[Expand]
function GPIODeviceNotification(GPIO:PGPIODevice; Callback:TGPIONotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
RTL GPIO functions
[Expand]
function SysGPIOAvailable:Boolean;
Description: Check if a GPIO device is available
[Expand]
function SysGPIOInputGet(Pin:LongWord):LongWord;
Description: Get the current state of a GPIO input pin
Pin
|
The pin to get the state for (eg GPIO_PIN_1)
|
Return
|
The current state (eg GPIO_LEVEL_HIGH) or GPIO_LEVEL_UNKNOWN on failure
|
[Expand]
function SysGPIOInputWait(Pin,Trigger,Timeout:LongWord):LongWord;
Description: Wait for the state of a GPIO input pin to change
Pin
|
The pin to wait for the state to change (eg GPIO_PIN_1)
|
Trigger
|
The trigger event to wait for (eg GPIO_TRIGGER_HIGH)
|
Timeout
|
Number of milliseconds to wait for the change (INFINITE to wait forever)
|
Return
|
The state after the change (eg GPIO_LEVEL_HIGH) or GPIO_LEVEL_UNKNOWN on failure or timeout
|
[Expand]
function SysGPIOInputEvent(Pin,Trigger,Timeout:LongWord; Callback:TGPIOCallback; Data:Pointer):LongWord;
Description: Schedule a function to be called when the state of a GPIO input pin changes
Pin
|
The pin to schedule the state change for (eg GPIO_PIN_1)
|
Trigger
|
The trigger event which will cause the function to be called (eg GPIO_TRIGGER_HIGH)
|
Timeout
|
The number of milliseconds before the scheduled trigger expires (INFINITE to never expire)
|
Callback
|
The function to be called when the trigger occurs
|
Data
|
A pointer to be pass to the function when the trigger occurs (Optional)
|
Return
|
ERROR_SUCCESS if the trigger was scheduled successfully or another error code on failure
|
Note
|
The pin and trigger that caused the event will be passed to the callback function
|
[Expand]
function SysGPIOOutputSet(Pin,Level:LongWord):LongWord;
Description: Set the state of a GPIO output pin
Pin
|
The pin to set the state for (eg GPIO_PIN_1)
|
Level
|
The state to set the pin to (eg GPIO_LEVEL_HIGH)
|
Return
|
ERROR_SUCCESS if completed successfully or another error code on failure
|
[Expand]
function SysGPIOPullGet(Pin:LongWord):LongWord;
Description: Get the current pull state of a GPIO pin
Pin
|
The pin to get the pull state for (eg GPIO_PIN_1)
|
Return
|
The current pull state of the pin (eg GPIO_PULL_UP) or GPIO_PULL_UNKNOWN on failure
|
[Expand]
function SysGPIOPullSelect(Pin,Mode:LongWord):LongWord;
Description: Change the pull state of a GPIO pin
Pin
|
The pin to change the pull state for (eg GPIO_PIN_1)
|
Mode
|
The pull state to set for the pin (eg GPIO_PULL_UP)
|
Return
|
ERROR_SUCCESS if completed successfully or another error code on failure
|
[Expand]
function SysGPIOFunctionGet(Pin:LongWord):LongWord;
Description: Get the current function of a GPIO pin
Pin
|
The pin to get the function for (eg GPIO_PIN_1)
|
Return
|
The current function of the pin (eg GPIO_FUNCTION_IN) or GPIO_FUNCTION_UNKNOWN on failure
|
[Expand]
function SysGPIOFunctionSelect(Pin,Mode:LongWord):LongWord;
Description: Change the function of a GPIO pin
Pin
|
The pin to change the function for (eg GPIO_PIN_1)
|
Mode
|
The function to set for the pin (eg GPIO_FUNCTION_OUT)
|
Return
|
ERROR_SUCCESS if completed successfully or another error code on failure
|
GPIO helper functions
[Expand]
function GPIOGetCount:LongWord; inline;
Description: Get the current GPIO count
[Expand]
function GPIODeviceGetDefault:PGPIODevice; inline;
Description: Get the current default GPIO device
[Expand]
function GPIODeviceSetDefault(GPIO:PGPIODevice):LongWord;
Description: Set the current default GPIO device
[Expand]
function GPIODeviceCheck(GPIO:PGPIODevice):PGPIODevice;
Description: Check if the supplied GPIO is in the GPIO table
[Expand]
function GPIODeviceCreateEvent(GPIO:PGPIODevice; Pin:PGPIOPin; Callback:TGPIOCallback; Data:Pointer; Timeout:LongWord):PGPIOEvent;
Description: Create a new event using the supplied parameters
Note
|
Event must be registered by calling GPIODeviceRegisterEvent. Caller must hold the GPIO device lock.
|
[Expand]
function GPIODeviceDestroyEvent(GPIO:PGPIODevice; Event:PGPIOEvent):LongWord;
Description: Destroy an existing event
Note
|
Event must be deregistered first by calling GPIODeviceDeregisterEvent. Caller must hold the GPIO device lock.
|
[Expand]
function GPIODeviceRegisterEvent(GPIO:PGPIODevice; Pin:PGPIOPin; Event:PGPIOEvent):LongWord;
Description: Register an event in the event list of the supplied Pin
Note
|
Event must be created by calling GPIODeviceCreateEvent. Caller must hold the GPIO device lock.
|
[Expand]
function GPIODeviceDeregisterEvent(GPIO:PGPIODevice;Pin:PGPIOPin;Event:PGPIOEvent):LongWord;
Description: Deregister an event in the event list of the supplied Pin
Note
|
Event must be destroyed by calling GPIODeviceDestroyEvent. Caller must hold the GPIO device lock.
|
[Expand]
procedure GPIOLog(Level:LongWord; GPIO:PGPIODevice; const AText:String);
Description: To be documented
[Expand]
procedure GPIOLogInfo(GPIO:PGPIODevice; const AText:String);
Description: To be documented
[Expand]
procedure GPIOLogError(GPIO:PGPIODevice; const AText:String);
Description: To be documented
[Expand]
procedure GPIOLogDebug(GPIO:PGPIODevice; const AText:String);
Description: To be documented
[Expand]
function GPIOPinToString(Pin:LongWord):String;
Description: To be documented
[Expand]
function GPIOLevelToString(Level:LongWord):String;
Description: To be documented
[Expand]
function GPIOTriggerToString(Trigger:LongWord):String;
Description: To be documented
[Expand]
function GPIOPullToString(Value:LongWord):String;
Description: To be documented
[Expand]
function GPIOFunctionToString(Value:LongWord):String;
Description: To be documented
Return to Unit Reference