Unit GPIO

From Ultibo.org
Revision as of 06:44, 28 July 2016 by Ultibo (Talk | contribs)

Jump to: navigation, search

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

procedure GPIOInit;
Description: To be documented
Note To be documented


GPIO functions

function GPIODeviceStart(GPIO:PGPIODevice):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceStop(GPIO:PGPIODevice):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceRead(GPIO:PGPIODevice; Reg:LongWord):LongWord;
Description: To be documented
Note To be documented


procedure GPIODeviceWrite(GPIO:PGPIODevice; Reg,Value:LongWord);
Description: To be documented
Note To be documented


function GPIODeviceInputGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceInputWait(GPIO:PGPIODevice; Pin,Trigger,Timeout:LongWord):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceInputEvent(GPIO:PGPIODevice; Pin,Trigger,Flags,Timeout:LongWord; Callback:TGPIOCallback; Data:Pointer):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceInputCancel(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceOutputSet(GPIO:PGPIODevice; Pin,Level:LongWord):LongWord;
Description: To be documented
Note To be documented


function GPIODevicePullGet(GPIO:PGPIODevice;Pin:LongWord):LongWord;
Description: To be documented
Note To be documented


function GPIODevicePullSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceFunctionGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceFunctionSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceProperties(GPIO:PGPIODevice; Properties:PGPIOProperties):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceCreate:PGPIODevice;
Description: Create a new GPIO entry
Return Pointer to new GPIO entry or nil if GPIO could not be created


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


function GPIODeviceDestroy(GPIO:PGPIODevice):LongWord;
Description: Destroy an existing GPIO entry
Note To be documented


function GPIODeviceRegister(GPIO:PGPIODevice):LongWord;
Description: Register a new GPIO in the GPIO table
Note To be documented


function GPIODeviceDeregister(GPIO:PGPIODevice):LongWord;
Description: Deregister a GPIO in the GPIO table
Note To be documented


function GPIODeviceFind(GPIOId:LongWord):PGPIODevice;
Description: To be documented
Note To be documented


function GPIODeviceFindByName(const Name:String):PGPIODevice; inline;
Description: To be documented
Note To be documented


function GPIODeviceFindByDescription(const Description:String):PGPIODevice; inline;
Description: To be documented
Note To be documented


function GPIODeviceEnumerate(Callback:TGPIOEnumerate; Data:Pointer):LongWord;
Description: To be documented
Note To be documented


function GPIODeviceNotification(GPIO:PGPIODevice; Callback:TGPIONotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
Note To be documented


RTL GPIO functions

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


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


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


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


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


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


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


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

function GPIOGetCount:LongWord; inline;
Description: Get the current GPIO count
Note To be documented


function GPIODeviceGetDefault:PGPIODevice; inline;
Description: Get the current default GPIO device
Note To be documented


function GPIODeviceSetDefault(GPIO:PGPIODevice):LongWord;
Description: Set the current default GPIO device
Note To be documented


function GPIODeviceCheck(GPIO:PGPIODevice):PGPIODevice;
Description: Check if the supplied GPIO is in the GPIO table
Note To be documented


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.


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.



Return to Unit Reference