Return to Unit Reference
Description
Ultibo Platform interface unit for Raspberry Pi
The RPi A+/B+ have the Power LED connected to GPIO Pin 35 (Activity LED is now on GPIO Pin 47 instead of Pin 16 in model A/B).
Constants
[Expand]
RPi ARM physical to VC IO mapping constants RPI_VCIO_*
RPI_VCIO_ALIAS = BCM2835_VCIO_ALIAS;
|
The VCIO Alias (For ARM Physcial to VC IO translation)
|
[Expand]
RPi ARM physical to VC bus mapping constants RPI_VCBUS_*
RPI_VCBUS_ALIAS = BCM2835_VCBUS_4_ALIAS;
|
The currently selected VCBUS Alias (For ARM Physcial to VC Bus translation) (Affected by disable_l2cache setting in config.txt)
|
[Expand]
RPi address of StartupHandler on reset constants RPI_STARTUP_*
RPI_STARTUP_ADDRESS = $00008000;
|
|
[Expand]
RPi page table address and size constants RPI_PAGE_TABLE_*
RPI_PAGE_TABLE_BASE = $00004000;
|
Place the first level Page Table after the interrupt vectors at 0x00001000 and before the code start at 0x00008000
|
RPI_PAGE_TABLE_SIZE = SIZE_16K;
|
ARM1176 first level Page Table is exactly 16KB in size (4096 32 bit (4 byte) entries)
|
[Expand]
RPi vector table address and size constants RPI_VECTOR_TABLE_*
RPI_VECTOR_TABLE_BASE = $00001000;
|
Place the Interrupt Vector Table at 0x00001000 before the code start at 0x00008000
|
RPI_VECTOR_TABLE_SIZE = SIZE_64;
|
The Interrupt Vector Table is exactly 64 bytes (16 32 bit (4 byte) entries)
|
RPI_VECTOR_TABLE_COUNT = 8;
|
The Interrupt Vector Table contains 8 entries on an ARMv6 device
|
[Expand]
RPi CPU count, boot and mask constants RPI_CPU_*
RPI_CPU_COUNT = BCM2835_CPU_COUNT;
|
|
RPI_CPU_BOOT = CPU_ID_0;
|
|
RPI_CPU_MASK = CPU_AFFINITY_0;
|
|
[Expand]
RPi SWI constants RPI_SWI_*
RPI_SWI_COUNT = 256;
|
Number of available SWI entries
|
[Expand]
RPi kernel image name constants RPI_KERNEL_*
RPI_KERNEL_NAME = 'kernel.img';
|
|
RPI_KERNEL_CONFIG = 'config.txt';
|
|
RPI_KERNEL_COMMAND = 'cmdline.txt';
|
|
[Expand]
RPi plus GPIO power LED constants RPIPLUS_GPIO_PWRLED_*
GPIO Power LED constants GPIO Pin 35 - A+/B+ Only
|
Note: GPIO Pin 35 on the A+/B+ is set on boot to Pull Up/Down Enable which must be cleared before using the pin
|
|
RPIPLUS_GPIO_PWRLED_GPFSEL = BCM2835_GPFSEL3;
|
GPFSEL register for PWR LED
|
RPIPLUS_GPIO_PWRLED_GPSET = BCM2835_GPSET1;
|
GPSET register for PWR LED
|
RPIPLUS_GPIO_PWRLED_GPCLR = BCM2835_GPCLR1;
|
GPCLR register for PWR LED
|
|
RPIPLUS_GPIO_PWRLED_GPFSHIFT = 15;
|
GPFSEL register shift for PWR LED
|
RPIPLUS_GPIO_PWRLED_GPFMASK = BCM2835_GPFSEL_MASK;
|
GPFSEL register mask for PWR LED
|
|
RPIPLUS_GPIO_PWRLED_GPSHIFT = (35 - 32);
|
GPSET/GPCLR register shift for PWR LED
|
RPIPLUS_GPIO_PWRLED_GPMASK = BCM2835_GPSET_MASK;
|
GPSET/GPCLR register mask for PWR LED
|
|
GPIO Pin 35 on A+/B+
|
See: http://www.raspberrypi.org/forums/viewtopic.php?t=72260
|
See also for how to control GPPUD etc: http://wiki.osdev.org/Raspberry_Pi_Bare_Bones
|
[Expand]
RPi GPIO activity LED constants RPI_GPIO_ACTLED_*
GPIO Pin 16 - A/B Only
|
Note: GPIO Pin 47 on the A+/B+ is Pull High instead of Pull Low, to turn on the LED use RPIPLUS_GPIO_ACTLED_GPSET instead of RPIPLUS_GPIO_ACTLED_GPCLR
|
|
RPI_GPIO_ACTLED_GPFSEL = BCM2835_GPFSEL1;
|
GPFSEL register for ACT LED
|
RPI_GPIO_ACTLED_GPSET = BCM2835_GPSET0;
|
GPSET register for ACT LED
|
RPI_GPIO_ACTLED_GPCLR = BCM2835_GPCLR0;
|
GPCLR register for ACT LED
|
|
RPI_GPIO_ACTLED_GPFSHIFT = 18;
|
GPFSEL register shift for ACT LED
|
RPI_GPIO_ACTLED_GPFMASK = BCM2835_GPFSEL_MASK;
|
GPFSEL register mask for ACT LED
|
|
RPI_GPIO_ACTLED_GPSHIFT = 16;
|
GPSET/GPCLR register shift for ACT LED
|
RPI_GPIO_ACTLED_GPMASK = BCM2835_GPSET_MASK;
|
GPSET/GPCLR register mask for ACT LED
|
[Expand]
RPi plus GPIO activity LED constants RPIPLUS_GPIO_ACTLED_*
GPIO Pin 47 - A+/B+ Only
|
|
RPIPLUS_GPIO_ACTLED_GPFSEL = BCM2835_GPFSEL4;
|
GPFSEL register for ACT LED
|
RPIPLUS_GPIO_ACTLED_GPSET = BCM2835_GPSET1;
|
GPSET register for ACT LED
|
RPIPLUS_GPIO_ACTLED_GPCLR = BCM2835_GPCLR1;
|
GPCLR register for ACT LED
|
|
RPIPLUS_GPIO_ACTLED_GPFSHIFT = 21;
|
GPFSEL register shift for ACT LED
|
RPIPLUS_GPIO_ACTLED_GPFMASK = BCM2835_GPFSEL_MASK;
|
GPFSEL register mask for ACT LED
|
|
RPIPLUS_GPIO_ACTLED_GPSHIFT = (47 - 32);
|
GPSET/GPCLR register shift for ACT LED
|
RPIPLUS_GPIO_ACTLED_GPMASK = BCM2835_GPSET_MASK;
|
GPSET/GPCLR register mask for ACT LED
|
[Expand]
RPi mailbox constants RPI_MAILBOX_*
RPI_MAILBOX_TIMEOUT = 100;
|
Default timeout to wait for mailbox calls to complete (Milliseconds)
|
RPI_MAILBOX_TIMEOUT_EX = 1000;
|
Extended timeout to wait for mailbox calls to complete (Milliseconds)
|
Type definitions
None defined
Public variables
RPi specific Ultibo variables
Timer variables
TimerRegisters:PBCM2835SystemTimerRegisters;
|
|
Mailbox variables
Mailbox0Registers:PBCM2835Mailbox0Registers;
|
|
Interrupt variables
InterruptRegisters:PBCM2835InterruptRegisters;
|
|
InterruptEntries:array[0..(BCM2835_IRQ_COUNT - 1)] of TInterruptEntry;
|
|
System call variables
SystemCallEntries:array[0..RPI_SWI_COUNT - 1] of TSystemCallEntry;
|
|
IRQ/FIQ variables
IRQEnabled:array[0..2] of LongWord;
|
3 groups of IRQs to Enable/Disable (See: TBCM2835InterruptRegisters)
|
FIQEnabled:LongWord;
|
The single IRQ number to Enable as FIQ instead (See: TBCM2835InterruptRegisters)
|
Watchdog variables
WatchdogRegisters:PBCM2835PMWatchdogRegisters;
|
|
Function declarations
Initialization functions
[Expand]
procedure RPiInit;
Description: To be documented
RPi platform functions
[Expand]
procedure RPiBoardInit;
Description: To be documented
[Expand]
procedure RPiMemoryInit;
Description: To be documented
[Expand]
procedure RPiClockInit;
Description: To be documented
[Expand]
procedure RPiPowerInit;
Description: To be documented
[Expand]
procedure RPiMailboxInit;
Description: To be documented
[Expand]
procedure RPiInterruptInit;
Description: To be documented
[Expand]
procedure RPiPeripheralInit;
Description: To be documented
[Expand]
procedure RPiFramebufferInit;
Description: To be documented
[Expand]
procedure RPiPageTableInit;
Description: Initialize the Hardware Page Tables before enabling the MMU
Note
|
See page 6-36 of the ARM1176JZF-S Technical Reference Manual
|
[Expand]
procedure RPiPowerLEDEnable;
Description: To be documented
[Expand]
procedure RPiPowerLEDOn;
Description: To be documented
[Expand]
procedure RPiPowerLEDOff;
Description: To be documented
[Expand]
procedure RPiActivityLEDEnable;
Description: To be documented
[Expand]
procedure RPiActivityLEDOn;
Description: To be documented
[Expand]
procedure RPiActivityLEDOff;
Description: To be documented
[Expand]
function RPiMailboxReceive(Mailbox,Channel:LongWord):LongWord;
Description: Receive from specified mailbox on specified channel
Note
|
Data = first 28 bits, Channel = last 4 bits
|
[Expand]
procedure RPiMailboxSend(Mailbox,Channel,Data:LongWord);
Description: Send to specified mailbox on specified channel
Note
|
Data = first 28 bits, Channel = last 4 bits
|
[Expand]
function RPiMailboxCall(Mailbox,Channel,Data:LongWord; var Response:LongWord):LongWord;
Description: Perform a transaction (Send/Receive) to specified mailbox on specified channel
Note
|
Data = first 28 bits, Channel = last 4 bits
Data pointer must be 16 byte aligned to allow for the 4 bit channel number
|
[Expand]
function RPiMailboxCallEx(Mailbox,Channel,Data:LongWord; var Response:LongWord; Timeout:LongWord):LongWord;
Description: Perform a transaction (Send/Receive) to specified mailbox on specified channel
Note
|
Data = first 28 bits, Channel = last 4 bits
Data pointer must be 16 byte aligned to allow for the 4 bit channel number
|
[Expand]
function RPiMailboxPropertyCall(Mailbox,Channel:LongWord; Data:Pointer; var Response:LongWord):LongWord;
Description: Perform a property tag transaction (Send/Receive) to specified mailbox on specified channel
Note
|
Data = first 28 bits, Channel = last 4 bits
Data pointer must be 16 byte aligned to allow for the 4 bit channel number
|
[Expand]
function RPiMailboxPropertyCallEx(Mailbox,Channel:LongWord; Data:Pointer; var Response:LongWord; Timeout:LongWord):LongWord;
Description: Perform a property tag transaction (Send/Receive) to specified mailbox on specified channel
Note
|
Data = first 28 bits, Channel = last 4 bits
Data pointer must be 16 byte aligned to allow for the 4 bit channel number
|
[Expand]
function RPiRequestExIRQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Description: Request registration of the supplied handler to the specified IRQ number
CPUID
|
CPU to route IRQ to (Ignored on RPi)
|
Number
|
IRQ number to register
|
Handler
|
Interrupt handler function to register
|
HandlerEx
|
Extended Interrupt handler function to register
|
Note
|
Only one of Handler or HandlerEx can be specified
|
[Expand]
function RPiReleaseExIRQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Description: Request deregistration of the supplied handler from the specified IRQ number
CPUID
|
CPU to route IRQ to (Ignored on RPi)
|
Number
|
IRQ number to deregister
|
Handler
|
Interrupt handler function to deregister
|
HandlerEx
|
Extended Interrupt handler function to deregister
|
Note
|
Only one of Handler or HandlerEx can be specified
|
[Expand]
function RPiRequestExFIQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Description: Request registration of the supplied handler to the specified FIQ number
CPUID
|
CPU to route FIQ to (Ignored on RPi)
|
Number
|
FIQ number to register
|
Handler
|
Interrupt handler function to register
|
HandlerEx
|
Extended Interrupt handler function to register
|
Note
|
Only one of Handler or HandlerEx can be specified
|
[Expand]
function RPiReleaseExFIQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Description: Request deregistration of the supplied handler from the specified FIQ number
CPUID
|
CPU to route FIQ to (Ignored on RPi)
|
Number
|
FIQ number to deregister
|
Handler
|
Interrupt handler function to deregister
|
HandlerEx
|
Extended Interrupt handler function to deregister
|
Note
|
Only one of Handler or HandlerEx can be specified
|
[Expand]
function RPiRegisterSystemCallEx(CPUID,Number:LongWord; Handler:TSystemCallHandler; HandlerEx:TSystemCallExHandler):LongWord;
Description: Request registration of the supplied extended handler to the specified System Call number
CPUID
|
The CPU ID to register the System Call against (Ignored on RPi)
|
Number
|
The System Call number to be registered
|
Handler
|
The handler function to be registered
|
HandlerEx
|
The extended handler function to be registered
|
Note
|
Only one of Handler or HandlerEx can be specified
|
[Expand]
function RPiDeregisterSystemCallEx(CPUID,Number:LongWord; Handler:TSystemCallHandler; HandlerEx:TSystemCallExHandler):LongWord;
Description: Request deregistration of the supplied extended handler from the specified System Call number
CPUID
|
The CPU ID to deregister the System Call from (Ignored on RPi)
|
Number
|
The System Call number to be deregistered
|
Handler
|
The handler function to be deregistered
|
HandlerEx
|
The extended handler function to be deregistered
|
Note
|
Only one of Handler or HandlerEx can be specified
|
[Expand]
function RPiGetInterruptEntry(Number:LongWord):TInterruptEntry;
Description: Get the interrupt entry for the specified interrupt number
[Expand]
function RPiGetSystemCallEntry(Number:LongWord):TSystemCallEntry;
Description: To be documented
Note
|
Get the system call entry for the specified system call number
|
[Expand]
function RPiSystemRestart(Delay:LongWord):LongWord;
Description: To be documented
[Expand]
function RPiSystemShutdown(Delay:LongWord):LongWord;
Description: To be documented
[Expand]
function RPiSystemGetCommandLine:String;
Description: Get the Command Line from the Mailbox property tags channel
[Expand]
function RPiCPUGetMemory(var Address:PtrUInt; var Length:LongWord):LongWord;
Description: Get the CPU Memory from the Mailbox property tags channel
[Expand]
function RPiGPUGetState:LongWord;
Description: To be documented
[Expand]
function RPiGPUGetMemory(var Address:PtrUInt; var Length:LongWord):LongWord;
Description: Get the GPU Memory from the Mailbox property tags channel
[Expand]
function RPiBoardGetModel:LongWord;
Description: Get the Board Model from the Mailbox property tags channel
[Expand]
function RPiBoardGetSerial:Int64;
Description: Get the Board Serial from the Mailbox property tags channel
[Expand]
function RPiBoardGetRevision:LongWord;
Description: Get the Board Revision from the Mailbox property tags channel
[Expand]
function RPiBoardGetMACAddress:String;
Description: Get the Board MAC Address from the Mailbox property tags channel
[Expand]
function RPiFirmwareGetRevision:LongWord;
Description: Get the Firmware Revision from the Mailbox property tags channel
[Expand]
function RPiPowerGetWait(PowerId:LongWord):LongWord;
Description: Get the Power Wait from the Mailbox property tags channel
[Expand]
function RPiPowerGetState(PowerId:LongWord):LongWord;
Description: Get the Power State from the Mailbox property tags channel
[Expand]
function RPiPowerSetState(PowerId,State:LongWord; Wait:Boolean):LongWord;
Description: Set the Power State in the Mailbox property tags channel
Note
|
Power Lock not required due to Mailbox Property Call serialization
|
[Expand]
function RPiClockGetCount:LongWord;
Description: Gets the current system clock count (32 least significant bits of total)
Note
|
On the Raspberry Pi this comes from the System Timer free running counter which runs at 1MHz and therefore overflows every 4295 seconds
|
[Expand]
function RPiClockGetTotal:Int64;
Description: Gets the total system clock count
Note
|
On the Raspberry Pi this comes from the System Timer free running counter which runs at 1MHz, the clock interrupt also uses this timer to increment the clock every second and therefore keep time.
|
[Expand]
function RPiClockGetRate(ClockId:LongWord):LongWord;
Description: Get the Clock Rate from the Mailbox property tags channel
[Expand]
function RPiClockSetRate(ClockId,Rate:LongWord; Turbo:Boolean):LongWord;
Description: Set the Clock Rate in the Mailbox property tags channel
[Expand]
function RPiClockGetState(ClockId:LongWord):LongWord;
Description: Get the Clock State from the Mailbox property tags channel
[Expand]
function RPiClockSetState(ClockId,State:LongWord):LongWord;
Description: Set the Clock State in the Mailbox property tags channel
[Expand]
function RPiClockGetMinRate(ClockId:LongWord):LongWord;
Description: Get the Clock Min Rate from the Mailbox property tags channel
[Expand]
function RPiClockGetMaxRate(ClockId:LongWord):LongWord;
Description: Get the Clock Max Rate from the Mailbox property tags channel
[Expand]
function RPiTurboGetState(TurboId:LongWord):LongWord;
Description: Get the Turbo State from the Mailbox property tags channel
[Expand]
function RPiTurboSetState(TurboId,State:LongWord):LongWord;
Description: Set the Turbo State in the Mailbox property tags channel
[Expand]
function RPiVoltageGetValue(VoltageId:LongWord):LongWord;
Description: Get the Voltage Value from the Mailbox property tags channel
[Expand]
function RPiVoltageSetValue(VoltageId,Value:LongWord):LongWord;
Description: Set the Voltage Value in the Mailbox property tags channel
[Expand]
function RPiVoltageGetMinValue(VoltageId:LongWord):LongWord;
Description: Get the Voltage Min Value from the Mailbox property tags channel
[Expand]
function RPiVoltageGetMaxValue(VoltageId:LongWord):LongWord;
Description: Get the Voltage Max Value from the Mailbox property tags channel
[Expand]
function RPiTemperatureGetCurrent(TemperatureId:LongWord):LongWord;
Description: Get the Temperature Current from the Mailbox property tags channel
[Expand]
function RPiTemperatureGetMaximum(TemperatureId:LongWord):LongWord;
Description: Get the Temperature Maximum Model from the Mailbox property tags channel
[Expand]
function RPiGPUMemoryAllocate(Length,Alignment,Flags:LongWord):THandle;
Description: Allocate GPU Memory from the Mailbox property tags channel
[Expand]
function RPiGPUMemoryRelease(Handle:THandle):LongWord;
Description: Release GPU Memory from the Mailbox property tags channel
[Expand]
function RPiGPUMemoryLock(Handle:THandle):LongWord;
Description: Lock GPU Memory from the Mailbox property tags channel
[Expand]
function RPiGPUMemoryUnlock(Handle:THandle):LongWord;
Description: Unlock GPU Memory from the Mailbox property tags channel
[Expand]
function RPiGPUExecuteCode(Address:Pointer; R0,R1,R2,R3,R4,R5:LongWord):LongWord;
Description: Execute GPU Code from the Mailbox property tags channel
[Expand]
function RPiDispmanxHandleGet(Resource:THandle):THandle;
Description: Get Dispmanx Memory Handle from the Mailbox property tags channel
[Expand]
function RPiEDIDBlockGet(Block:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Description: Get EDID Block from the Mailbox property tags channel
[Expand]
function RPiFramebufferAllocate(Alignment:LongWord; var Address,Length:LongWord):LongWord;
Description: Allocate Framebuffer from the Mailbox property tags channel
[Expand]
function RPiFramebufferRelease:LongWord;
Description: Release Framebuffer from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetState(State:LongWord):LongWord;
Description: Set Framebuffer State (Blank Screen) from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetDimensions(var Width,Height,Top,Bottom,Left,Right:LongWord):LongWord;
Description: Get Framebuffer Dimensions from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetPhysical(var Width,Height:LongWord):LongWord;
Description: Get Framebuffer Physical size from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetPhysical(var Width,Height:LongWord):LongWord;
Description: Set Framebuffer Physical size from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestPhysical(var Width,Height:LongWord):LongWord;
Description: Test Framebuffer Physical size from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetVirtual(var Width,Height:LongWord):LongWord;
Description: Get Framebuffer Virtual size from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetVirtual(var Width,Height:LongWord):LongWord;
Description: Set Framebuffer Virtual size from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestVirtual(var Width,Height:LongWord):LongWord;
Description: Test Framebuffer Virtual size from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetDepth(var Depth:LongWord):LongWord;
Description: Get Framebuffer Depth (Bits per pixel) from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetDepth(var Depth:LongWord):LongWord;
Description: Set Framebuffer Depth (Bits per pixel) from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestDepth(var Depth:LongWord):LongWord;
Description: Test Framebuffer Depth (Bits per pixel) from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetPixelOrder(var Order:LongWord):LongWord;
Description: Get Framebuffer Pixel Order (RGB) from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetPixelOrder(var Order:LongWord):LongWord;
Description: Set Framebuffer Pixel Order (RGB) from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestPixelOrder(var Order:LongWord):LongWord;
Description: Test Framebuffer Pixel Order (RGB) from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetAlphaMode(var Mode:LongWord):LongWord;
Description: Get Framebuffer Alpha Mode from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetAlphaMode(var Mode:LongWord):LongWord;
Description: Set Framebuffer Alpha Mode from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestAlphaMode(var Mode:LongWord):LongWord;
Description: Test Framebuffer Alpha Mode from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetPitch:LongWord;
Description: Get Framebuffer Pitch (Bytes per line) from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetOffset(var X,Y:LongWord):LongWord;
Description: Get Framebuffer Virtual Offset from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetOffset(var X,Y:LongWord):LongWord;
Description: Set Framebuffer Virtual Offset from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestOffset(var X,Y:LongWord):LongWord;
Description: Test Framebuffer Virtual Offset from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Description: Get Framebuffer Overscan from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Description: Set Framebuffer Overscan from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Description: Test Framebuffer Overscan from the Mailbox property tags channel
[Expand]
function RPiFramebufferGetPalette(Buffer:Pointer; Length:LongWord):LongWord;
Description: Get Framebuffer Palette from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetPalette(Start,Count:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Description: Set Framebuffer Palette from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestPalette(Start,Count:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Description: Test Framebuffer Palette from the Mailbox property tags channel
[Expand]
function RPiFramebufferTestVsync:LongWord;
Description: Test Framebuffer Vertical Sync from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetVsync:LongWord;
Description: Set Framebuffer Vertical Sync from the Mailbox property tags channel
[Expand]
function RPiFramebufferSetBacklight(Brightness:LongWord):LongWord;
Description: Set Framebuffer Backlight Brightness from the Mailbox property tags channel
[Expand]
function RPiTouchGetBuffer(var Address:LongWord):LongWord;
Description: Get the Touchscreen buffer from the Mailbox property tags channel
[Expand]
function RPiCursorSetDefault:LongWord;
Description: Set Cursor Default (Pixels) from the Mailbox property tags channel
[Expand]
function RPiCursorSetInfo(Width,Height,HotspotX,HotspotY:LongWord; Pixels:Pointer; Length:LongWord):LongWord;
Description: Set Curson Info (Pixels) from the Mailbox property tags channel
[Expand]
function RPiCursorSetState(Enabled:Boolean; X,Y:LongWord; Relative:Boolean):LongWord;
Description: Set Cursor State (Enable, X, Y) from the Mailbox property tags channel
Relative
|
X, Y is relative to Display (Virtual) not Framebuffer (Physical)
|
[Expand]
function RPiDMAGetChannels:LongWord;
Description: Get the available DMA Channels from the Mailbox property tags channel
RPi tthread functions
[Expand]
procedure RPiSchedulerInit;
Description: To be documented
RPi IRQ functions
[Expand]
function RPiDispatchIRQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Description: Process any pending IRQ requests
Note
|
Called by ARMv6IRQHandler in PlatformARMv6
A DataMemoryBarrier is executed before and after calling this function
|
[Expand]
function RPiHandleIRQ(Number,CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Description: Call the handler function for an IRQ that was received, or halt if it doesn't exist
RPi FIQ functions
[Expand]
function RPiDispatchFIQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Description: Process any pending FIQ requests
Note
|
Called by ARMv6FIQHandler in PlatformARMv6
A DataMemoryBarrier is executed before and after calling this function
|
[Expand]
function RPiHandleFIQ(Number,CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Description: Call the handler function for an FIQ that was received, or halt if it doesn't exist
RPi SWI functions
[Expand]
function RPiDispatchSWI(CPUID:LongWord; Thread:TThreadHandle; Request:PSystemCallRequest):TThreadHandle;
Description: Process an SWI request
Note
|
Called by ARMv6SoftwareInterruptHandler in PlatformARMv6
A DataMemoryBarrier is executed before and after calling this function
|
RPi clock functions
[Expand]
procedure RPiClockInterrupt(Parameter:Pointer);
Description: Interrupt handler function for the clock interrupt
Note
|
This schedules another clock interrupt to occur CLOCK_CYCLES_PER_TICK in the future, then updates ClockTicks and ClockSeconds.
|
[Expand]
procedure RPiClockUpdate(Cycles:LongWord; var Last:LongWord);
Description: Setup a clock interrupt to trigger after the specified number of clock cycles
Cycles
|
Number of cycles after which the timer interrupt is to be triggered
|
Note
|
This refers to native clock cycles as specified by CLOCK_FREQUENCY
|
RPi scheduler functions
[Expand]
function RPiSchedulerInterrupt(CPUID:LongWord; Thread:TThreadHandle; Parameter:Pointer):TThreadHandle;
Description: Interrupt handler function for the scheduler interrupt
Note
|
This schedules another scheduler interrupt to occur SCHEDULER_CLOCKS_PER_INTERRUPT in the future, then checks for threads to wakeup and the next thread to schedule.
|
[Expand]
procedure RPiSchedulerUpdate(Cycles:LongWord; var Last:LongWord);
Description: Setup a scheduler interrupt to trigger after the specified number of clock cycles
Cycles
|
Number of cycles after which the scheduler interrupt is to be triggered
|
Note
|
This refers to native clock cycles as specified by CLOCK_FREQUENCY
|
[Expand]
procedure RPiSchedulerSystemCall(Request:PSystemCallRequest);
Description: System Call handler for the scheduler
Note
|
This is registered to receive requests for the SYSTEM_CALL_CONTEXT_SWITCH and will perform a context switch from within an SWI
|
RPi framebuffer functions
[Expand]
function RPiFramebufferDeviceAllocate(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: Allocate a framebuffer using the Mailbox Property Tags
[Expand]
function RPiFramebufferDeviceAllocateAlt(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: Allocate a framebuffer using a simple Mailbox Call
[Expand]
function RPiFramebufferDeviceRelease(Framebuffer:PFramebufferDevice):LongWord;
Description: To be documented
[Expand]
function RPiFramebufferDeviceBlank(Framebuffer:PFramebufferDevice; Blank:Boolean):LongWord;
Description: To be documented
[Expand]
function RPiFramebufferDeviceCommit(Framebuffer:PFramebufferDevice; Address,Size,Flags:LongWord):LongWord;
Description: To be documented
[Expand]
function RPiFramebufferDeviceSetBacklight(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;
Description: To be documented
[Expand]
function RPiFramebufferDeviceSetProperties(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: To be documented
RPi helper functions
[Expand]
procedure RPiWait; assembler; nostackframe;
Description: To be documented
[Expand]
procedure RPiLongWait; assembler; nostackframe;
Description: To be documented
[Expand]
procedure RPiShortWait; assembler; nostackframe;
Description: To be documented
[Expand]
procedure RPiSlowBlink; assembler; nostackframe;
Description: To be documented
[Expand]
procedure RPiFastBlink; assembler; nostackframe;
Description: To be documented
[Expand]
procedure RPiBootBlink; assembler; nostackframe;
Description: Blink the Activity LED without dependency on any other RTL setup
Note
|
This currently only works for RPiA+/B+
|
[Expand]
function RPiConvertPowerIdRequest(PowerId:LongWord):LongWord;
Description: Convert Ultibo Power Id to BCM2835 Power Id
[Expand]
function RPiConvertPowerStateRequest(PowerState:LongWord):LongWord;
Description: Convert Ultibo Power State to BCM2835 Power State
[Expand]
function RPiConvertPowerStateResponse(PowerState:LongWord):LongWord;
Description: Convert BCM2835 Power State to Ultibo Power State
[Expand]
function RPiConvertClockIdRequest(ClockId:LongWord):LongWord;
Description: Convert Ultibo Clock Id to BCM2835 Clock Id
[Expand]
function RPiConvertClockStateRequest(ClockState:LongWord):LongWord;
Description: Convert Ultibo Clock State to BCM2835 Clock State
[Expand]
function RPiConvertClockStateResponse(ClockState:LongWord):LongWord;
Description: Convert BCM2835 Clock State to Ultibo Clock State
[Expand]
function RPiConvertVoltageIdRequest(VoltageId:LongWord):LongWord;
Description: Convert Ultibo Voltage Id to BCM2835 Voltage Id
[Expand]
function RPiConvertTemperatureIdRequest(TemperatureId:LongWord):LongWord;
Description: Convert Ultibo Temperature Id to BCM2835 Temperature Id
Return to Unit Reference