Difference between revisions of "Unit Devices"
| (72 intermediate revisions by the same user not shown) | |||
| Line 5: | Line 5: | ||
----  | ----  | ||
| − | ''  | + | '''Ultibo Device Interface unit'''  | 
=== Constants ===  | === Constants ===  | ||
----  | ----  | ||
| − | ''  | + | |
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device specific constants''' <code> DEVICE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_NAME_PREFIX = 'Device';</code>  | ||
| + | | Name prefix for Devices  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device signature''' <code> DEVICE_SIGNATURE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_SIGNATURE = $AD03FE3C;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device name''' <code> DEVICE_*_LENGTH </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_NAME_LENGTH = SIZE_64;</code>  | ||
| + | | Length of device name  | ||
| + | |-  | ||
| + | | <code>DEVICE_DESC_LENGTH = SIZE_128;</code>  | ||
| + | | Length of device description  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device bus''' <code> DEVICE_BUS_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>NONE = 0;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_PCI = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_USB = 2;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_ISA = 3;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_PS2 = 4;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_FIREWIRE = 5;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_SD = 6;</code>  | ||
| + | | SD/SDHC/SDXC/SDIO etc  | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_MMC = 7;</code>  | ||
| + | | MMC/eMMC etc  | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_ATA = 8;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_IDE = 9;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_SCSI = 10;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_ATAPI = 11;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_SATA = 12;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_SERIAL = 13;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_SPI = 14;</code>  | ||
| + | | Serial Peripheral Interface device  | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_MMIO = 15;</code>  | ||
| + | | Memory Mapped IO device (No Bus)  | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_PCIE = 16;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_I2C = 17;</code>  | ||
| + | | I2C connected device  | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>DEVICE_BUS_MAX = 17;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device state''' <code> DEVICE_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_STATE_UNREGISTERED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>DEVICE_STATE_REGISTERED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>DEVICE_STATE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device Id''' <code> DEVICE_ID_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_ID_ANY = $FFFFFFFF;</code>  | ||
| + | | Any Device (Pass to DeviceFind to match all devices)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device class''' <code> DEVICE_CLASS_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_NONE = 0;</code>  | ||
| + | | No Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_USBHOST = 1;</code>  | ||
| + | | A USB Host Controller (eg XHCI/EHCI/UHCI/OHCI or DWCOTG etc) (Implementing a standard USB host interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_PCIHOST = 2;</code>  | ||
| + | | A PCI Host Controller (eg AHCI etc) (Implementing a standard PCI host interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_USB = 3;</code>  | ||
| + | | A USB Device (eg Hub/Keyboard/Mouse/Mass Storage/Vendor Specific etc) (Implementing a standard USB device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_PCI = 4;</code>  | ||
| + | | A PCI Device (eg Graphics/Controller etc) (Implementing a standard PCI device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_NETWORK = 5;</code>  | ||
| + | | A Network Device (Implementing a standard Network device interface). May also be a USB or PCI device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_STORAGE = 6;</code>  | ||
| + | | A Storage Device (Implementing a standard Storage device interface). May also be a USB, PCI, MMC, SCSI or ATA device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_BLOCK = DEVICE_CLASS_STORAGE;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_FILESYSTEM = 7;</code>  | ||
| + | | A FileSystem Device (eg FAT/NTFS/CDFS/EXTFS etc)(Implementing a standard FileSystem device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_PROTOCOL = 8;</code>  | ||
| + | | A Protocol Device (eg TCP/UDP/IP/ICMP etc) (Implementing a standard Protocol device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_TRANSPORT = DEVICE_CLASS_PROTOCOL;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_KEYBOARD = 9;</code>  | ||
| + | | A Keyboard Device (Implementing a standard Keyboard device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_MOUSE = 10;</code>  | ||
| + | | A Mouse Device (Implementing a standard Mouse device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_BLUETOOTH = 11;</code>  | ||
| + | | A Bluetooth Device (Implementing a standard Bluetooth device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_SERIAL = 12;</code>  | ||
| + | | A Serial Device (Implementing a standard Serial device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_AUDIO = 13;</code>  | ||
| + | | An Audio Device (Implementing a standard Audio device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_VIDEO = 14;</code>  | ||
| + | | A Video Device (Implementing a standard Video device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_SCSI = 15;</code>  | ||
| + | | A SCSI Device (Implementing a standard SCSI device interface). May also be a PCI device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_ATA = 16;</code>  | ||
| + | | An ATA/ATAPI Device (Implementing a standard ATA/ATAPI device interface). May also be a PCI device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_IDE = DEVICE_CLASS_ATA;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_ATAPI = DEVICE_CLASS_ATA;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_IMAGE = 17;</code>  | ||
| + | | An Image Device (eg Camera) (Implementing a standard Image device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_PRINTER = 18;</code>  | ||
| + | | A Printer Device (Implementing a standard Printer device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_COMMUNICATIONS = 19;</code>  | ||
| + | | A Communications Device (Implementing a standard Communications device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_SMART_CARD = 20;</code>  | ||
| + | | A Smart Card Device (Implementing a standard Smart Card device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_MONITOR = 21;</code>  | ||
| + | | A Monitor Device (Implementing a standard Monitor device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_DISPLAY = 22;</code>  | ||
| + | | A Display Device (eg Billboard) (Implementing a standard Display device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_AUDIOVIDEO = 23;</code>  | ||
| + | | An Audio/Video Device (Implementing a standard Audio/Video device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_IRDA = 24;</code>  | ||
| + | | An Infrared Device (Implementing a standard Infrared device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_SPI = 25;</code>  | ||
| + | | An SPI Device (Implementing a standard SPI device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_I2C = 26;</code>  | ||
| + | | An I2C Device (Implementing a standard I2C device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_UART = 27;</code>  | ||
| + | | A UART Device (Implementing a standard UART device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_MMC = 28;</code>  | ||
| + | | An MMC Device (Implementing a standard MMC device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_SD = 29;</code>  | ||
| + | | An SD Device (Implementing a standard SD device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_SDHCI = 30;</code>  | ||
| + | | An SD/MMC Host Controller (Implementing a standard SDHCI device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_SDHOST = DEVICE_CLASS_SDHCI;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_MMCHOST = DEVICE_CLASS_SDHCI;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_MMCIHOST = DEVICE_CLASS_SDHCI;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_DFU = 31;</code>  | ||
| + | | A Device Firmware Update Device (Implementing a standard DFU device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_GPIO = 32;</code>  | ||
| + | | A GPIO Device (Implementing a standard GPIO device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_MAILBOX = 33;</code>  | ||
| + | | A Mailbox Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_OPENGL = 34;</code>  | ||
| + | | An OpenGL Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_DVB = 35;</code>  | ||
| + | | A Digital Video Broadcast (DVB) Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_DAB = 36;</code>  | ||
| + | | A Digital Audio Broadcast (DAB) Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_DMA = 37;</code>  | ||
| + | | A DMA Controller Device (Implementing a standard DMA controller interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_SCSIHOST = 38;</code>  | ||
| + | | A SCSI Host Device (Implementing a standard SCSI host interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_ATAHOST = 39;</code>  | ||
| + | | An ATA Host Device (Implementing a standard ATA host interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_TIMER = 40;</code>  | ||
| + | | A Timer or Counter Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_RANDOM = 41;</code>  | ||
| + | | A Random Number Generator Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_FRAMEBUFFER = 42;</code>  | ||
| + | | A Frame Buffer Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_WATCHDOG = 43;</code>  | ||
| + | | A Watchdog Timer Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_CLOCK = 44;</code>  | ||
| + | | A Clock (Date/Time) Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_CONSOLE = 45;</code>  | ||
| + | | A Console Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_RTC = 46;</code>  | ||
| + | | A Real Time Clock (Battery Backed) Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_USBHUB = 47;</code>  | ||
| + | | A USB Hub (Implementing a standard USB hub interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_LOGGING = 48;</code>  | ||
| + | | A Logging Device (Implementing a standard Logging device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_PCM = 49;</code>  | ||
| + | | A PCM Sound Device (Implementing a standard PCM device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_I2S = DEVICE_CLASS_PCM;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_PWM = 50;</code>  | ||
| + | | A Pulse Width Modulation (PWM) Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_1WIRE = 51;</code>  | ||
| + | | A 1-Wire Device (Implementing a standard W1 device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_CLOCK_MANAGER = 52;</code>  | ||
| + | | A Clock Manager Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_CODEC = 53;</code>  | ||
| + | | A CODEC Device (eg Audio or Video)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_TOUCH = 54;</code>  | ||
| + | | A Touch Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_MEMORY = 55;</code>  | ||
| + | | A Memory Device (eg OTP, NVRAM or Flash)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_GENERIC = 56;</code>  | ||
| + | | A Generic Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_VIRTIO = 57;</code>  | ||
| + | | A VIRTIO Device (eg Block/Network/Memory/Console/Input etc) (Implementing a standard VIRTIO device interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_BLUETOOTHHOST = 58;</code>  | ||
| + | | A Bluetooth Host Controller (Implementing a standard Bluetooth host interface)  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_JOYSTICK = 59;</code>  | ||
| + | | A Joystick or Gamepad Device  | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_HID = 60;</code>  | ||
| + | | A Human Interface Device (HID)  | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_MAX = 60;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>DEVICE_CLASS_ANY = $FFFFFFFF;</code>  | ||
| + | | Any Device (Pass to DeviceFind or DeviceEnumerate to match all devices)  | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | |colspan="2"|''Device Class Names''  | ||
| + | |-  | ||
| + | |colspan="2"|<code>DEVICE_CLASS_NAMES:array[DEVICE_CLASS_NONE..DEVICE_CLASS_MAX] of String = (</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_NONE',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_USBHOST',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_PCIHOST',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_USB',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_PCI',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_NETWORK',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_STORAGE',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_FILESYSTEM',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_PROTOCOL',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_KEYBOARD',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_MOUSE',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_BLUETOOTH',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_SERIAL',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_AUDIO',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_VIDEO',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_SCSI',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_ATA',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_IMAGE',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_PRINTER',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_COMMUNICATIONS',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_SMART_CARD',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_MONITOR',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_DISPLAY',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_AUDIOVIDEO',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_IRDA',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_SPI',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_I2C',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_UART',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_MMC',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_SD',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_SDHCI',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_DFU',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_GPIO',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_MAILBOX',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_OPENGL',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_DVB',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_DAB',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_DMA',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_SCSIHOST',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_ATAHOST',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_TIMER',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_RANDOM',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_FRAMEBUFFER',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_WATCHDOG',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_CLOCK',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_CONSOLE',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_RTC',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_USBHUB',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_LOGGING',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_PCM',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_PWM',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_1WIRE',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_CLOCK_MANAGER',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_CODEC',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_TOUCH',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_MEMORY',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_GENERIC',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_VIRTIO',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_BLUETOOTHHOST',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_JOYSTICK',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DEVICE_CLASS_HID');</code>  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device notification flag''' <code> DEVICE_NOTIFICATION_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_NONE = $00000000;</code>  | ||
| + | | Pass to DeviceNotification to cancel an existing Notification  | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_REGISTER = $00000001;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_DEREGISTER = $00000002;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_OPEN = $00000004;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_CLOSE = $00000008;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_UP = $00000010;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_DOWN = $00000020;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_INSERT = $00000040;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_EJECT = $00000080;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_ATTACH = $00000100;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_DETACH = $00000200;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_ENABLE = $00000400;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_DISABLE = $00000800;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_BIND = $00001000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_UNBIND = $00002000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_ATTACHING = $00004000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_DETACHING = $00008000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_INSERTING = $00010000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_EJECTING = $00020000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_OPENING = $00040000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_CLOSING = $00080000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_RESIZE = $00100000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>DEVICE_NOTIFICATION_RESIZING = $00200000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Firmware name''' <code> FIRMWARE_NAME_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_NAME_LENGTH = SIZE_256;</code>  | ||
| + | | Length of firmware name  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Firmware actions''' <code> FIRMWARE_ACTION_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_ACTION_NONE = 0;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>FIRMWARE_ACTION_SIZE = 1;</code>  | ||
| + | | Return the size in bytes of the firmware item  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_ACTION_OPEN = 2;</code>  | ||
| + | | Open the firmware item and return a handle  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_ACTION_READ = 3;</code>  | ||
| + | | Read from the firmware item specified by a given handle  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_ACTION_SEEK = 4;</code>  | ||
| + | | Seek to a location in the firmware item specified by a given handle  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_ACTION_CLOSE = 5;</code>  | ||
| + | | Close a handle to the firmware item  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_ACTION_ACQUIRE = 6;</code>  | ||
| + | | Acquire a memory block containing the firmware item  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_ACTION_RELEASE = 7;</code>  | ||
| + | | Release a memory block containing the firmware item  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Firmware constants''' <code> FIRMWARE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_WAIT_DELAY = 100;</code>  | ||
| + | | Delay between retries for firmware while waiting for timeout (Milliseconds)  | ||
| + | |-  | ||
| + | | <code>FIRMWARE_MAX_BUFFER = SIZE_4M;</code>  | ||
| + | | Maximum size buffer able to be allocated for firmware by acquire  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Notifier signature''' <code> NOTIFIER_SIGNATURE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>NOTIFIER_SIGNATURE = $6FA1BEC9;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Notifier state''' <code> NOTIFIER_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>NOTIFIER_STATE_UNREGISTERED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>NOTIFIER_STATE_REGISTERED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Notifier flag''' <code> NOTIFIER_FLAG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>NOTIFIER_FLAG_NONE = $00000000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>NOTIFIER_FLAG_WORKER = $00000001;</code>  | ||
| + | | If set, notification callback event will be scheduled on a worker thread  | ||
| + | |-  | ||
| + | | <code>NOTIFIER_FLAG_UNLOCK = $00000002;</code>  | ||
| + | | If set, the notifier table lock will be released before calling the notification callback event  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Device logging''' <code> DEVICE_LOG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG;</code>  | ||
| + | | Device debugging messages  | ||
| + | |-  | ||
| + | | <code>DEVICE_LOG_LEVEL_INFO = LOG_LEVEL_INFO;</code>  | ||
| + | | Device informational messages, such as a device being attached or detached  | ||
| + | |-  | ||
| + | | <code>DEVICE_LOG_LEVEL_WARN = LOG_LEVEL_WARN;</code>  | ||
| + | | Device warning messages  | ||
| + | |-  | ||
| + | | <code>DEVICE_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;</code>  | ||
| + | | Device error messages  | ||
| + | |-  | ||
| + | | <code>DEVICE_LOG_LEVEL_NONE = LOG_LEVEL_NONE;</code>  | ||
| + | | No Device messages  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Driver specific constants''' <code> DRIVER_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DRIVER_NAME_PREFIX = 'Driver';</code>  | ||
| + | | Name prefix for Drivers  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Driver signature''' <code> DRIVER_SIGNATURE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DRIVER_SIGNATURE = $1EB4980A;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Driver name''' <code> DRIVER_NAME_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DRIVER_NAME_LENGTH = SIZE_64;</code>  | ||
| + | | Length of driver name  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Driver state''' <code> DRIVER_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DRIVER_STATE_UNREGISTERED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>DRIVER_STATE_REGISTERED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>DRIVER_STATE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Driver Id''' <code> DRIVER_ID_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DRIVER_ID_ANY = $FFFFFFFF;</code>  | ||
| + | | Any Driver (Pass to DriverFind to match all drivers)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />    | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Driver class''' <code> DRIVER_CLASS_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_NONE = 0;</code>  | ||
| + | | No Driver  | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_USB = 1;</code>  | ||
| + | | A USB Driver (Implementing a standard USB driver interface)  | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_PCI = 2;</code>  | ||
| + | | A PCI Driver (Implementing a standard PCI driver interface)  | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_SDIO = 3;</code>  | ||
| + | | An SDIO Driver (Implementing a standard SDIO driver interface)  | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_BLUETOOTH = 4;</code>  | ||
| + | | A Bluetooth Driver (Implementing a standard Bluetooth driver interface)  | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_VIRTIO = 5;</code>  | ||
| + | | A VIRTIO Driver (Implementing a standard VIRTIO driver interface)  | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_HID = 6;</code>  | ||
| + | | A Human Interface Device (HID) Driver (Implementing a standard HID driver interface)  | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_MAX = 6;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>DRIVER_CLASS_ANY = $FFFFFFFF;</code>  | ||
| + | | Any Driver (Pass to DriverFind or DriverEnumerate to match all drivers)  | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | |colspan="2"|''Driver Class Names''  | ||
| + | |-  | ||
| + | |colspan="2"|<code>DRIVER_CLASS_NAMES:array[DRIVER_CLASS_NONE..DRIVER_CLASS_MAX] of String = (</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DRIVER_CLASS_NONE',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DRIVER_CLASS_USB',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DRIVER_CLASS_PCI',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DRIVER_CLASS_SDIO',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DRIVER_CLASS_BLUETOOTH',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DRIVER_CLASS_VIRTIO',</code>  | ||
| + | |-  | ||
| + | |colspan="2"|<code>'DRIVER_CLASS_HID');</code>  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Host specific constants''' <code> HOST_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>HOST_NAME_PREFIX = 'Host';</code>  | ||
| + | | Name prefix for Hosts  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Host signature''' <code> HOST_SIGNATURE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>HOST_SIGNATURE = $F45D30FE;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Host name''' <code> HOST_NAME_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>HOST_NAME_LENGTH = SIZE_64;</code>  | ||
| + | | Length of host name  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Host state''' <code> HOST_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>HOST_STATE_UNREGISTERED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>HOST_STATE_REGISTERED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>HOST_STATE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Host Id''' <code> HOST_ID_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>HOST_ID_ANY = $FFFFFFFF;</code>  | ||
| + | | Any Host (Pass to HostFind to match all hosts)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Host class''' <code> HOST_CLASS_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>HOST_CLASS_NONE = 0;</code>  | ||
| + | | No Host}  | ||
| + | |-  | ||
| + | | <code>HOST_CLASS_USB = 1;</code>  | ||
| + | | A USB Host (eg XHCI/EHCI/UHCI/OHCI or DWCOTG etc) (Implementing a standard USB host interface)  | ||
| + | |-  | ||
| + | | <code>HOST_CLASS_PCI = 2;</code>  | ||
| + | | A PCI Host (eg AHCI etc) (Implementing a standard PCI host interface)  | ||
| + | |-  | ||
| + | | <code>HOST_CLASS_SD = 3;</code>  | ||
| + | | An SD Host (eg MMC/SDIO etc) (Implementing a standard SD host interface)  | ||
| + | |-  | ||
| + | | <code>HOST_CLASS_BLUETOOTH = 4;</code>  | ||
| + | | A Bluetooth Host (Implementing a standard Bluetooth host interface)  | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>HOST_CLASS_MAX = 4;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>HOST_CLASS_ANY = $FFFFFFFF;</code>  | ||
| + | | Any Host (Pass to HostFind or HostEnumerate to match all hosts)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Clock specific constants''' <code> CLOCK_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>CLOCK_NAME_PREFIX = 'Clock';</code>  | ||
| + | | Name prefix for Clock Devices  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Clock device type''' <code> CLOCK_TYPE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>CLOCK_TYPE_NONE = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>CLOCK_TYPE_HARDWARE = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>CLOCK_TYPE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Clock device state''' <code> CLOCK_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>CLOCK_STATE_DISABLED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>CLOCK_STATE_ENABLED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>CLOCK_STATE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Clock device flag''' <code> CLOCK_FLAG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>CLOCK_FLAG_NONE = $00000000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>CLOCK_FLAG_WRITABLE = $00000001;</code>  | ||
| + | | Device supports writing the clock value  | ||
| + | |-  | ||
| + | | <code>CLOCK_FLAG_VARIABLE = $00000002;</code>  | ||
| + | | Device supports setting the clock rate  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Timer specific constants''' <code> TIMER_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>TIMER_NAME_PREFIX = 'Timer';</code>  | ||
| + | | Name prefix for Timer Devices  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Timer device type''' <code> TIMER_TYPE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>TIMER_TYPE_NONE = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>TIMER_TYPE_HARDWARE = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>TIMER_TYPE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Timer device state''' <code> TIMER_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>TIMER_STATE_DISABLED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>TIMER_STATE_ENABLED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>TIMER_STATE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Timer device flag''' <code> TIMER_FLAG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>TIMER_FLAG_NONE = $00000000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>TIMER_FLAG_WRAPPING = $00000001;</code>  | ||
| + | | Device provides a wrapping or self reloading counter  | ||
| + | |-  | ||
| + | | <code>TIMER_FLAG_COUNTER = $00000002;</code>  | ||
| + | | Device will appear as a continuously incrementing counter when read  | ||
| + | |-  | ||
| + | | <code>TIMER_FLAG_DOWN = $00000004;</code>  | ||
| + | | Device counts down from the starting value to zero (And optionally triggers an event)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Timer event flag''' <code> TIMER_EVENT_FLAG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>TIMER_EVENT_FLAG_NONE = $00000000;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>TIMER_EVENT_FLAG_REPEAT = $00000001;</code>  | ||
| + | | Event will be repeated until cancelled  | ||
| + | |-  | ||
| + | | <code>TIMER_EVENT_FLAG_INTERRUPT = $00000002;</code>  | ||
| + | | Event will be dispatched by interrupt handler (If applicable). Caution: Events called by the interrupt handler must obey interrupt rules with regard to locks, memory allocation and latency.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Random specific constants''' <code> RANDOM_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>RANDOM_NAME_PREFIX = 'Random';</code>  | ||
| + | | Name prefix for Random Devices  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Random device type''' <code> RANDOM_TYPE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>RANDOM_TYPE_NONE = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>RANDOM_TYPE_HARDWARE = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>RANDOM_TYPE_SOFTWARE = 2;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>RANDOM_TYPE_MAX = 2;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Random device state''' <code> RANDOM_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>RANDOM_STATE_DISABLED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>RANDOM_STATE_ENABLED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>RANDOM_STATE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Random device flag''' <code> RANDOM_FLAG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>RANDOM_FLAG_NONE = $00000000;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Mailbox specific constants''' <code> MAILBOX_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>MAILBOX_NAME_PREFIX = 'Mailbox';</code>  | ||
| + | | Name prefix for Mailbox Devices  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Mailbox device type''' <code> MAILBOX_TYPE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>MAILBOX_TYPE_NONE = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>MAILBOX_TYPE_GPU = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>MAILBOX_TYPE_LOCAL = 2;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>MAILBOX_TYPE_MAX = 2;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Mailbox device state''' <code> MAILBOX_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>MAILBOX_STATE_DISABLED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>MAILBOX_STATE_ENABLED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>MAILBOX_STATE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Mailbox device flag''' <code> MAILBOX_FLAG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>MAILBOX_FLAG_NONE = $00000000;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Watchdog specific constants''' <code> WATCHDOG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>WATCHDOG_NAME_PREFIX = 'Watchdog';</code>  | ||
| + | | Name prefix for Watchdog Devices  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Watchdog device type''' <code> WATCHDOG_TYPE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>WATCHDOG_TYPE_NONE = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>WATCHDOG_TYPE_HARDWARE = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>WATCHDOG_TYPE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />   | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Watchdog device state''' <code> WATCHDOG_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>WATCHDOG_STATE_DISABLED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>WATCHDOG_STATE_ENABLED = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>WATCHDOG_STATE_MAX = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Watchdog device flag''' <code> WATCHDOG_FLAG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>WATCHDOG_FLAG_NONE = $00000000;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />     | ||
=== Type definitions ===  | === Type definitions ===  | ||
----  | ----  | ||
| − | ''  | + | |
| + | '''Device enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TDeviceEnumerate = function(Device:PDevice; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Device notification callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TDeviceNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Device entry'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PDevice = ^TDevice;</code>  | ||
| + | |||
| + | <code>TDevice = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|''Device Properties''  | ||
| + | |-  | ||
| + | | <code>Signature:LongWord;</code>  | ||
| + | | Signature for entry validation  | ||
| + | |-  | ||
| + | | <code>DeviceId:LongWord;</code>  | ||
| + | | Unique Id of this Device in the Device table  | ||
| + | |-  | ||
| + | | <code>DeviceState:LongWord;</code>  | ||
| + | | Device state (eg Registered/Unregistered)  | ||
| + | |-  | ||
| + | | <code>DeviceName:array[0..DEVICE_NAME_LENGTH - 1] of Char;</code>  | ||
| + | | The name of the Device (eg Keyboard0, Storage0 or Network0 etc)  | ||
| + | |-  | ||
| + | | <code>DeviceClass:LongWord;</code>  | ||
| + | | The class of this Device (eg DEVICE_CLASS_USB, DEVICE_CLASS_NETWORK, DEVICE_CLASS_STORAGE etc)  | ||
| + | |-  | ||
| + | | <code>DeviceBus:LongWord;</code>  | ||
| + | | The Bus type for the Device (eg DEVICE_BUS_USB)  | ||
| + | |-  | ||
| + | | <code>DeviceType:LongWord;</code>  | ||
| + | | A class specific Device type (eg KEYBOARD_TYPE_USB, MOUSE_TYPE_USB, NETWORK_TYPE_ETHERNET etc)  | ||
| + | |-  | ||
| + | | <code>DeviceFlags:LongWord;</code>  | ||
| + | | The class specific Device flags  | ||
| + | |-  | ||
| + | | <code>DeviceData:Pointer;</code>  | ||
| + | | A pointer to a class specific Device interface (eg PUSBDevice, PNetworkDevice or PStorageDevice etc) (Used by Drivers)  | ||
| + | |-  | ||
| + | | <code>DeviceDescription:array[0..DEVICE_DESC_LENGTH - 1] of Char;</code>  | ||
| + | | A description of the Device (eg BCM2835 PL011 UART)  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PDevice;</code>  | ||
| + | | Previous entry in Device table  | ||
| + | |-  | ||
| + | | <code>Next:PDevice;</code>  | ||
| + | | Next entry in Device table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>   | ||
| + | |||
| + | '''Device firmware'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PDeviceFirmware = ^TDeviceFirmware;</code>  | ||
| + | |||
| + | <code>TDeviceFirmware = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>DeviceClass:LongWord;</code>  | ||
| + | | The Device class supported by this firmware (or DEVICE_CLASS_ANY for all devices)  | ||
| + | |-  | ||
| + | | <code>Name:array[0..FIRMWARE_NAME_LENGTH - 1] of Char;</code>  | ||
| + | | The device specific name of the firmware which may be a filename, a device model, id or type  | ||
| + | |-  | ||
| + | | <code>Size:LongWord;</code>  | ||
| + | | For block (memory) based firmware, the size passed to Create or 0 for other firmware types  | ||
| + | |-  | ||
| + | | <code>Buffer:Pointer;</code>  | ||
| + | | For block (memory) based firmware, the buffer passed to Create or nil for other firmware types  | ||
| + | |-  | ||
| + | | <code>Handles:PFirmwareHandle;</code>  | ||
| + | | List of currently open handles for this firmware  | ||
| + | |-  | ||
| + | | <code>Handler:TDeviceFirmwareHandler;</code>  | ||
| + | | The device specific callback for the handler which provides this firmware  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PDeviceFirmware;</code>  | ||
| + | | Previous entry in Device firmware table}  | ||
| + | |-  | ||
| + | | <code>Next:PDeviceFirmware;</code>  | ||
| + | | Next entry in Device firmware table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | |||
| + | '''Device firmware handler'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TDeviceFirmwareHandler = function(Firmware:PDeviceFirmware; Action:LongWord; var Handle:THandle; var Buffer:Pointer; var Value:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Firmware handle'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PFirmwareHandle = ^TFirmwareHandle;</code>  | ||
| + | |||
| + | <code>TFirmwareHandle = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>Handle:THandle;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>Next:PFirmwareHandle;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | |||
| + | '''Notifier entry'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PNotifier = ^TNotifier;</code>  | ||
| + | |||
| + | <code>TNotifier = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|''Notifier Properties''  | ||
| + | |-  | ||
| + | | <code>Signature:LongWord;</code>  | ||
| + | | Signature for entry validation  | ||
| + | |-  | ||
| + | | <code>NotifierState:LongWord;</code>  | ||
| + | | Notifier state (eg Registered/Unregistered)  | ||
| + | |-  | ||
| + | | <code>NotifierFlags:LongWord;</code>  | ||
| + | | Notifier flags (eg NOTIFIER_FLAG_WORKER)  | ||
| + | |-  | ||
| + | | <code>Device:PDevice;</code>  | ||
| + | | The Device to notify on (or nil for all devices)  | ||
| + | |-  | ||
| + | | <code>DeviceClass:LongWord;</code>  | ||
| + | | The Device class to notify on (or DEVICE_CLASS_ANY for all devices)  | ||
| + | |-  | ||
| + | | <code>Callback:TDeviceNotification;</code>  | ||
| + | | The callback for device notifications  | ||
| + | |-  | ||
| + | | <code>Data:Pointer;</code>  | ||
| + | | A pointer to callback specific data to be passed with notifications (Optional)  | ||
| + | |-  | ||
| + | | <code>Notification:LongWord;</code>  | ||
| + | | The mask of events to notify on (eg DEVICE_NOTIFICATION_REGISTER etc)  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PNotifier;</code>  | ||
| + | | Previous entry in Notifier table  | ||
| + | |-  | ||
| + | | <code>Next:PNotifier;</code>  | ||
| + | | Next entry in Notifier table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | |||
| + | '''Notifier task'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PNotifierTask = ^TNotifierTask;</code>  | ||
| + | |||
| + | <code>TNotifierTask = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>Device:PDevice;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>Callback:TDeviceNotification;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>Data:Pointer;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>Notification:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>Next:PNotifierTask;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | |||
| + | '''Notifier retry'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PNotifierRetry = ^TNotifierRetry;</code>  | ||
| + | |||
| + | <code>TNotifierRetry = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>Device:PDevice;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>Notification:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>   | ||
| + | |||
| + | '''Driver enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TDriverEnumerate = function(Driver:PDriver; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Driver entry'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PDriver = ^TDriver;</code>  | ||
| + | |||
| + | <code>TDriver = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|''Driver Properties''  | ||
| + | |-  | ||
| + | | <code>Signature:LongWord;</code>  | ||
| + | | Signature for entry validation  | ||
| + | |-  | ||
| + | | <code>DriverId:LongWord;</code>  | ||
| + | | Unique Id of this Driver in the Driver table  | ||
| + | |-  | ||
| + | | <code>DriverState:LongWord;</code>  | ||
| + | | Driver state (eg Registered/Unregistered)  | ||
| + | |-  | ||
| + | | <code>DriverName:array[0..DRIVER_NAME_LENGTH - 1] of Char;</code>  | ||
| + | | Descriptive name for the Driver (eg USB Mouse Driver)  | ||
| + | |-  | ||
| + | | <code>DriverClass:LongWord;</code>  | ||
| + | | The class of this Driver (eg DRIVER_CLASS_USB etc)  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PDriver;</code>  | ||
| + | | Previous entry in Driver table  | ||
| + | |-  | ||
| + | | <code>Next:PDriver;</code>  | ||
| + | | Next entry in Driver table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | |||
| + | '''Host enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>THostEnumerate = function(Host:PHost; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Host entry'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PHost = ^THost;</code>  | ||
| + | |||
| + | <code>THost = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|''Host Properties''  | ||
| + | |-  | ||
| + | | <code>Signature:LongWord;</code>  | ||
| + | | Signature for entry validation  | ||
| + | |-  | ||
| + | | <code>HostId:LongWord;</code>  | ||
| + | | Unique Id of this Host in the Host table  | ||
| + | |-  | ||
| + | | <code>HostState:LongWord;</code>  | ||
| + | | Host state (eg Registered/Unregistered)  | ||
| + | |-  | ||
| + | | <code>HostName:array[0..HOST_NAME_LENGTH - 1] of Char;</code>  | ||
| + | | Descriptive name for the Host (eg DWC OTG Host)  | ||
| + | |-  | ||
| + | | <code>HostClass:LongWord;</code>  | ||
| + | | The class of this Host (eg HOST_CLASS_USB etc)  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PHost;</code>  | ||
| + | | Previous entry in Host table  | ||
| + | |-  | ||
| + | | <code>Next:PHost;</code>  | ||
| + | | Next entry in Host table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | |||
| + | '''Clock properties'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PClockProperties = ^TClockProperties;</code>  | ||
| + | |||
| + | <code>TClockProperties = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>Flags:LongWord;</code>  | ||
| + | | Device flags (eg CLOCK_FLAG_WRITABLE)  | ||
| + | |-  | ||
| + | | <code>Rate:LongWord;</code>  | ||
| + | | Device current clock rate (Hz)  | ||
| + | |-  | ||
| + | | <code>MinRate:LongWord;</code>  | ||
| + | | Device minimum clock rate (Hz)  | ||
| + | |-  | ||
| + | | <code>MaxRate:LongWord;</code>  | ||
| + | | Device maximum clock rate (Hz)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | |||
| + | '''Clock enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockEnumerate = function(Clock:PClockDevice; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Clock notification callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Clock device start'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockDeviceStart = function(Clock:PClockDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Clock device stop'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockDeviceStop = function(Clock:PClockDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Clock device read'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockDeviceRead = function(Clock:PClockDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Clock device read 64'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockDeviceRead64 = function(Clock:PClockDevice):Int64;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Clock device write 64'''   | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockDeviceWrite64 = function(Clock:PClockDevice; const Value:Int64):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Clock device get rate'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockDeviceGetRate = function(Clock:PClockDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Clock device set rate'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockDeviceSetRate = function(Clock:PClockDevice; Rate:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Clock device get properties'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TClockDeviceGetProperties = function(Clock:PClockDevice; Properties:PClockProperties):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Clock device'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PClockDevice = ^TClockDevice;</code>  | ||
| + | |||
| + | <code>TClockDevice = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|''Device Properties''  | ||
| + | |-  | ||
| + | | <code>Device:TDevice;</code>  | ||
| + | | The Device entry for this Clock device  | ||
| + | |-  | ||
| + | |colspan="2"|''Clock Properties''  | ||
| + | |-  | ||
| + | | <code>ClockId:LongWord;</code>  | ||
| + | | Unique Id of this Clock device in the Clock device table  | ||
| + | |-  | ||
| + | | <code>ClockState:LongWord;</code>  | ||
| + | | Clock device state (eg CLOCK_STATE_ENABLED)  | ||
| + | |-  | ||
| + | | <code>DeviceStart:TClockDeviceStart;</code>  | ||
| + | | A device specific DeviceStart method implementing a standard clock device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceStop:TClockDeviceStop;</code>  | ||
| + | | A device specific DeviceStop method implementing a standard clock device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceRead:TClockDeviceRead;</code>  | ||
| + | | A device specific DeviceRead method implementing a standard clock device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceRead64:TClockDeviceRead64;</code>  | ||
| + | | A device specific DeviceRead64 method implementing a standard clock device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceWrite64:TClockDeviceWrite64;</code>  | ||
| + | | A device specific DeviceWrite64 method implementing a standard clock device interface (Optional)  | ||
| + | |-  | ||
| + | | <code>DeviceGetRate:TClockDeviceGetRate;</code>  | ||
| + | | A device specific DeviceGetRate method implementing a standard clock device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceSetRate:TClockDeviceSetRate;</code>  | ||
| + | | A device specific DeviceSetRate method implementing a standard clock device interface (Optional)  | ||
| + | |-  | ||
| + | | <code>DeviceGetProperties:TClockDeviceGetProperties;</code>  | ||
| + | | A device specific DeviceGetProperties method implementing a standard clock device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | |colspan="2"|''Statistics Properties''  | ||
| + | |-  | ||
| + | | <code>ReadCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|''Driver Properties''  | ||
| + | |-  | ||
| + | | <code>Lock:TMutexHandle;</code>  | ||
| + | | Device lock  | ||
| + | |-  | ||
| + | | <code>Address:Pointer;</code>  | ||
| + | | Device register base address  | ||
| + | |-  | ||
| + | | <code>Rate:LongWord;</code>  | ||
| + | | Device rate (Hz)  | ||
| + | |-  | ||
| + | | <code>MinRate:LongWord;</code>  | ||
| + | | Device minimum rate (Hz)  | ||
| + | |-  | ||
| + | | <code>MaxRate:LongWord;</code>  | ||
| + | | Device maximum rate (Hz)  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PClockDevice;</code>  | ||
| + | | Previous entry in Clock device table  | ||
| + | |-  | ||
| + | | <code>Next:PClockDevice;</code>  | ||
| + | | Next entry in Clock device table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>   | ||
| + | |||
| + | '''Timer callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerCallback = TCounterCallback;</code>  | ||
| + | | style="width: 40%;"|Counter callback from Platform  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Timer properties'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PTimerProperties = ^TTimerProperties;</code>  | ||
| + | |||
| + | <code>TTimerProperties = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>Flags:LongWord;</code>  | ||
| + | | Device flags (eg TIMER_FLAG_WRAPPING)  | ||
| + | |-  | ||
| + | | <code>Bits:LongWord;</code>  | ||
| + | | Number of valid bits in timer read (eg 32 or 64)  | ||
| + | |-  | ||
| + | | <code>MinRate:LongWord;</code>  | ||
| + | | Device minimum clock rate (Hz)  | ||
| + | |-  | ||
| + | | <code>MaxRate:LongWord;</code>  | ||
| + | | Device maximum clock rate (Hz)  | ||
| + | |-  | ||
| + | | <code>MinInterval:LongWord;</code>  | ||
| + | | Device minimum interval (Ticks)  | ||
| + | |-  | ||
| + | | <code>MaxInterval:LongWord;</code>  | ||
| + | | Device maximum interval (Ticks)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | |||
| + | '''Timer waiter'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PTimerWaiter = ^TTimerWaiter;</code>  | ||
| + | |||
| + | <code>TTimerWaiter = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|Note: TTimerEvent is used already by the Threads unit  | ||
| + | |-  | ||
| + | | <code>Timer:PTimerDevice;</code>  | ||
| + | | Timer device this waiter belongs to  | ||
| + | |-  | ||
| + | | <code>Callback:TTimerCallback;</code>  | ||
| + | | Callback function to call when event occurs  | ||
| + | |-  | ||
| + | | <code>Data:Pointer;</code>  | ||
| + | | Pointer to pass to the callback function when event occurs  | ||
| + | |-  | ||
| + | | <code>Prev:PTimerWaiter;</code>  | ||
| + | | Previous event in the list  | ||
| + | |-  | ||
| + | | <code>Next:PTimerWaiter;</code>  | ||
| + | | Next event in the list  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | |||
| + | '''Timer enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerEnumerate = function(Timer:PTimerDevice; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Timer notification callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''TImer device start'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceStart = function(Timer:PTimerDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device stop'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceStop = function(Timer:PTimerDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device read'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceRead = function(Timer:PTimerDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device read 64'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceRead64 = function(Timer:PTimerDevice):Int64;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device wait'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceWait = function(Timer:PTimerDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device event'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceEvent = function(Timer:PTimerDevice; Flags:LongWord; Callback:TTimerCallback; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device cancel'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceCancel = function(Timer:PTimerDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device get rate'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceGetRate = function(Timer:PTimerDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device set rate'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceSetRate = function(Timer:PTimerDevice; Rate:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device get interval'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceGetInterval = function(Timer:PTimerDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device set interval'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceSetInterval = function(Timer:PTimerDevice; Interval:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Timer device get properties'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TTimerDeviceGetProperties = function(Timer:PTimerDevice; Properties:PTimerProperties):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Timer device'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PTimerDevice = ^TTimerDevice;</code>  | ||
| + | |||
| + | <code>TTimerDevice = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|Note: Forward declared for TimerWaiter  | ||
| + | |-  | ||
| + | |colspan="2"|''Device Properties''  | ||
| + | |-  | ||
| + | | <code>Device:TDevice;</code>  | ||
| + | | The Device entry for this Timer device  | ||
| + | |-  | ||
| + | |colspan="2"|''Timer Properties''  | ||
| + | |-  | ||
| + | | <code>TimerId:LongWord;</code>  | ||
| + | | Unique Id of this Timer device in the Timer device table  | ||
| + | |-  | ||
| + | | <code>TimerState:LongWord;</code>  | ||
| + | | Timer device state (eg TIMER_STATE_ENABLED)  | ||
| + | |-  | ||
| + | | <code>DeviceStart:TTimerDeviceStart;</code>  | ||
| + | | A device specific DeviceStart method implementing a standard timer device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceStop:TTimerDeviceStop;</code>  | ||
| + | | A device specific DeviceStop method implementing a standard timer device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceRead:TTimerDeviceRead;</code>  | ||
| + | | A device specific DeviceRead method implementing a standard timer device interface (One of Read or Read64 is Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceRead64:TTimerDeviceRead64;</code>  | ||
| + | | A device specific DeviceRead64 method implementing a standard timer device interface (One of Read or Read64 is Mandatory  | ||
| + | |-  | ||
| + | | <code>DeviceWait:TTimerDeviceWait;</code>  | ||
| + | | A device specific DeviceWait method implementing a standard timer device interface (Or nil if the operation is not supported)  | ||
| + | |-  | ||
| + | | <code>DeviceEvent:TTimerDeviceEvent;</code>  | ||
| + | | A device specific DeviceEvent method implementing a standard timer device interface (Or nil if the operation is not supported)  | ||
| + | |-  | ||
| + | | <code>DeviceCancel:TTimerDeviceCancel;</code>  | ||
| + | | A device specific DeviceCancel method implementing a standard timer device interface (Or nil if the operation is not supported)  | ||
| + | |-  | ||
| + | | <code>DeviceGetRate:TTimerDeviceGetRate;</code>  | ||
| + | | A device specific DeviceGetRate method implementing a standard timer device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceSetRate:TTimerDeviceSetRate;</code>  | ||
| + | | A device specific DeviceSetRate method implementing a standard timer device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceGetInterval:TTimerDeviceGetInterval;</code>  | ||
| + | | A device specific DeviceGetInterval method implementing a standard timer device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceSetInterval:TTimerDeviceSetInterval;</code>  | ||
| + | | A device specific DeviceSetInterval method implementing a standard timer device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceGetProperties:TTimerDeviceGetProperties;</code>  | ||
| + | | A device specific DeviceGetProperties method implementing a standard timer device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | |colspan="2"|''Statistics Properties''  | ||
| + | |-  | ||
| + | | <code>ReadCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>WaitCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>EventCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|''Driver Properties''  | ||
| + | |-  | ||
| + | | <code>Lock:TMutexHandle;</code>  | ||
| + | | Device lock  | ||
| + | |-  | ||
| + | | <code>Address:Pointer;</code>  | ||
| + | | Device register base address  | ||
| + | |-  | ||
| + | | <code>Rate:LongWord;</code>  | ||
| + | | Device rate (Hz)  | ||
| + | |-  | ||
| + | | <code>Interval:LongWord;</code>  | ||
| + | | Device interval (Ticks)  | ||
| + | |-  | ||
| + | | <code>Properties:TTimerProperties;</code>  | ||
| + | | Device properties  | ||
| + | |-  | ||
| + | |colspan="2"|''Event Properties''  | ||
| + | |-  | ||
| + | | <code>Flags:LongWord;</code>  | ||
| + | | Event flags for this timer (eg TIMER_EVENT_FLAG_REPEAT)  | ||
| + | |-  | ||
| + | | <code>Count:Longword;</code>  | ||
| + | | Count of threads and events waiting for this timer  | ||
| + | |-  | ||
| + | | <code>Event:TEventHandle;</code>  | ||
| + | | Event for threads waiting for this timer  | ||
| + | |-  | ||
| + | | <code>Waiters:PTimerWaiter;</code>  | ||
| + | | List of events waiting for this timer  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PTimerDevice;</code>  | ||
| + | | Previous entry in Timer device table  | ||
| + | |-  | ||
| + | | <code>Next:PTimerDevice;</code>  | ||
| + | | Next entry in Timer device table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | |||
| + | '''Random enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomEnumerate = function(Random:PRandomDevice; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Random notification callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Random device start'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomDeviceStart = function(Random:PRandomDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Random device stop'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomDeviceStop = function(Random:PRandomDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Random device seed'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomDeviceSeed = function(Random:PRandomDevice; Seed:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Random device read byte'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomDeviceReadByte = function(Random:PRandomDevice):Byte;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Random device read word'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomDeviceReadWord = function(Random:PRandomDevice):Word;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Random device read long word'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomDeviceReadLongWord = function(Random:PRandomDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Random device read quad word'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomDeviceReadQuadWord = function(Random:PRandomDevice):Int64;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Random device read double'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TRandomDeviceReadDouble = function(Random:PRandomDevice):Double;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Random device'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PRandomDevice = ^TRandomDevice;</code>  | ||
| + | |||
| + | <code>TRandomDevice = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|''Device Properties''  | ||
| + | |-  | ||
| + | | <code>Device:TDevice;</code>  | ||
| + | | The Device entry for this Random device  | ||
| + | |-  | ||
| + | |colspan="2"|''Random Properties''  | ||
| + | |-  | ||
| + | | <code>RandomId:LongWord;</code>  | ||
| + | | Unique Id of this Random device in the Random device table  | ||
| + | |-  | ||
| + | | <code>RandomState:LongWord;</code>  | ||
| + | | Random device state (eg RANDOM_STATE_ENABLED)  | ||
| + | |-  | ||
| + | | <code>DeviceStart:TRandomDeviceStart;</code>  | ||
| + | | A device specific DeviceStart method implementing a standard random device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceStop:TRandomDeviceStop;</code>  | ||
| + | | A device specific DeviceStop method implementing a standard random device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceSeed:TRandomDeviceSeed;</code>  | ||
| + | | A device specific DeviceSeed method implementing a standard random device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceReadByte:TRandomDeviceReadByte;</code>  | ||
| + | | A device specific DeviceReadByte method implementing a standard random device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceReadWord:TRandomDeviceReadWord;</code>  | ||
| + | | A device specific DeviceReadWord method implementing a standard random device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceReadLongWord:TRandomDeviceReadLongWord;</code>  | ||
| + | | A device specific DeviceReadLongWord method implementing a standard random device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceReadQuadWord:TRandomDeviceReadQuadWord;</code>  | ||
| + | | A device specific DeviceReadQuadWord method implementing a standard random device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceReadDouble:TRandomDeviceReadDouble;</code>  | ||
| + | | A device specific DeviceReadDouble method implementing a standard random device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | |colspan="2"|''Statistics Properties''  | ||
| + | |-  | ||
| + | | <code>SeedCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>ReadCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|''Driver Properties''  | ||
| + | |-  | ||
| + | | <code>Lock:TMutexHandle;</code>  | ||
| + | | Device lock  | ||
| + | |-  | ||
| + | | <code>Address:Pointer;</code>  | ||
| + | | Device register base address  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PRandomDevice;</code>  | ||
| + | | Previous entry in Random device table  | ||
| + | |-  | ||
| + | | <code>Next:PRandomDevice;</code>  | ||
| + | | Next entry in Random device table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | |||
| + | '''Mailbox enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxEnumerate = function(Mailbox:PMailboxDevice; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Mailbox notification callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Mailbox device start'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxDeviceStart = function(Mailbox:PMailboxDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Mailbox device stop'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxDeviceStop = function(Mailbox:PMailboxDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Mailbox device receive'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxDeviceReceive = function(Mailbox:PMailboxDevice; Channel:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Mailbox device send'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxDeviceSend = function(Mailbox:PMailboxDevice; Channel,Data:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Mailbox device call'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxDeviceCall = function(Mailbox:PMailboxDevice; Channel,Data:LongWord; var Response:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Mailbox device get timeout'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxDeviceGetTimeout = function(Mailbox:PMailboxDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Mailbox device set timeout'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TMailboxDeviceSetTimeout = function(Mailbox:PMailboxDevice; Timeout:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Mailbox device'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PMailboxDevice = ^TMailboxDevice;</code>  | ||
| + | |||
| + | <code>TMailboxDevice = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|''Device Properties''  | ||
| + | |-  | ||
| + | | <code>Device:TDevice;</code>  | ||
| + | | The Device entry for this Mailbox device  | ||
| + | |-  | ||
| + | |colspan="2"|''Mailbox Properties''  | ||
| + | |-  | ||
| + | | <code>MailboxId:LongWord;</code>  | ||
| + | | Unique Id of this Mailbox device in the Mailbox device table  | ||
| + | |-  | ||
| + | | <code>MailboxState:LongWord;</code>  | ||
| + | | Mailbox device state (eg MAILBOX_STATE_ENABLED)  | ||
| + | |-  | ||
| + | | <code>DeviceStart:TMailboxDeviceStart;</code>  | ||
| + | | A device specific DeviceStart method implementing a standard mailbox device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceStop:TMailboxDeviceStop;</code>  | ||
| + | | A device specific DeviceStop method implementing a standard mailbox device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceReceive:TMailboxDeviceReceive;</code>  | ||
| + | | A device specific DeviceReceive method implementing a standard mailbox device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceSend:TMailboxDeviceSend;</code>  | ||
| + | | A device specific DeviceSend method implementing a standard mailbox device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceCall:TMailboxDeviceCall;</code>  | ||
| + | | A device specific DeviceCall method implementing a standard mailbox device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceGetTimeout:TMailboxDeviceGetTimeout;</code>  | ||
| + | | A device specific DeviceGetTimeout method implementing a standard mailbox device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceSetTimeout:TMailboxDeviceSetTimeout;</code>  | ||
| + | | A device specific DeviceSetTimeout method implementing a standard mailbox device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | |colspan="2"|''Statistics Properties''  | ||
| + | |-  | ||
| + | | <code>ReceiveCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>SendCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>CallCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|''Driver Properties''  | ||
| + | |-  | ||
| + | | <code>Lock:TMutexHandle;</code>  | ||
| + | | Device lock  | ||
| + | |-  | ||
| + | | <code>Address:Pointer;</code>  | ||
| + | | Device register base address  | ||
| + | |-  | ||
| + | | <code>Timeout:LongWord;</code>  | ||
| + | | Device timeout (Milliseconds)  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PMailboxDevice;</code>  | ||
| + | | Previous entry in Mailbox device table  | ||
| + | |-  | ||
| + | | <code>Next:PMailboxDevice;</code>  | ||
| + | | Next entry in Mailbox device table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | |||
| + | '''Watchdog enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TWatchdogEnumerate = function(Watchdog:PWatchdogDevice; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Watchdog notification callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TWatchdogNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Watchdog device start'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TWatchdogDeviceStart = function(Watchdog:PWatchdogDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Watchdog device stop'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TWatchdogDeviceStop = function(Watchdog:PWatchdogDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Watchdog device refresh'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TWatchdogDeviceRefresh = function(Watchdog:PWatchdogDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Watchdog device get remain'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TWatchdogDeviceGetRemain = function(Watchdog:PWatchdogDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Watchdog device get timeout'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TWatchdogDeviceGetTimeout = function(Watchdog:PWatchdogDevice):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Watchdog device set timeout'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TWatchdogDeviceSetTimeout = function(Watchdog:PWatchdogDevice; Timeout:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Watchdog device'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PWatchdogDevice = ^TWatchdogDevice;</code>  | ||
| + | |||
| + | <code>TWatchdogDevice = record</code>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | |colspan="2"|''Device Properties''  | ||
| + | |-  | ||
| + | | <code>Device:TDevice;</code>  | ||
| + | | The Device entry for this Watchdog device  | ||
| + | |-  | ||
| + | |colspan="2"|''Watchdog Properties''  | ||
| + | |-  | ||
| + | | <code>WatchdogId:LongWord;</code>  | ||
| + | | Unique Id of this Watchdog device in the Watchdog device table  | ||
| + | |-  | ||
| + | | <code>WatchdogState:LongWord;</code>  | ||
| + | | Watchdog device state (eg WATCHDOG_STATE_ENABLED)  | ||
| + | |-  | ||
| + | | <code>DeviceStart:TWatchdogDeviceStart;</code>  | ||
| + | | A device specific DeviceStart method implementing a standard watchdog device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceStop:TWatchdogDeviceStop;</code>  | ||
| + | | A device specific DeviceStop method implementing a standard watchdog device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceRefresh:TWatchdogDeviceRefresh;</code>  | ||
| + | | A device specific DeviceRefresh method implementing a standard watchdog device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceGetRemain:TWatchdogDeviceGetRemain;</code>  | ||
| + | | A device specific DeviceGetRemain method implementing a standard watchdog device interface (Mandatory)  | ||
| + | |-  | ||
| + | | <code>DeviceGetTimeout:TWatchdogDeviceGetTimeout;</code>  | ||
| + | | A device specific DeviceGetTimeout method implementing a standard watchdog device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | | <code>DeviceSetTimeout:TWatchdogDeviceSetTimeout;</code>  | ||
| + | | A device specific DeviceSetTimeout method implementing a standard watchdog device interface (Or nil if the default method is suitable)  | ||
| + | |-  | ||
| + | |colspan="2"|''Statistics Properties''  | ||
| + | |-  | ||
| + | | <code>StartCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>StopCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>RefreshCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|''Driver Properties''  | ||
| + | |-  | ||
| + | | <code>Lock:TMutexHandle;</code>  | ||
| + | | Device lock  | ||
| + | |-  | ||
| + | | <code>Address:Pointer;</code>  | ||
| + | | Device register base address  | ||
| + | |-  | ||
| + | | <code>Timeout:LongWord;</code>  | ||
| + | | Device timeout (Milliseconds)  | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''  | ||
| + | |-  | ||
| + | | <code>Prev:PWatchdogDevice;</code>  | ||
| + | | Previous entry in Watchdog device table  | ||
| + | |-  | ||
| + | | <code>Next:PWatchdogDevice;</code>  | ||
| + | | Next entry in Watchdog device table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | <br />  | ||
=== Public variables ===  | === Public variables ===  | ||
----  | ----  | ||
| − | ''  | + | |
| + | '''Device logging'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_DEFAULT_LOG_LEVEL:LongWord = DEVICE_LOG_LEVEL_DEBUG;</code>  | ||
| + | | style="width: 40%;"|Minimum level for Device messages. Only messages with level greater than or equal to this will be printed.  | ||
| + | |-  | ||
| + | |}  | ||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>DEVICE_LOG_ENABLED:Boolean;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | <br />   | ||
=== Function declarations ===  | === Function declarations ===  | ||
----  | ----  | ||
| + | |||
| + | |||
| + | '''Initialization functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure DevicesInit;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize the Devices unit and device, notifier and driver tables</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Called only during system startup  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
'''Device functions'''  | '''Device functions'''  | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| − | <pre style="border: 0; padding-bottom:0px;">  | + | <pre style="border: 0; padding-bottom:0px;">function DeviceCreate:PDevice;</pre>  | 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Device entry</div>  | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Device entry</div>  | ||
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Return  | 
| Pointer to new Device entry or nil if device could not be created  | | Pointer to new Device entry or nil if device could not be created  | ||
|-  | |-  | ||
| Line 45: | Line 2,600: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Size  | 
| Size in bytes to allocate for new device (Including the device entry)  | | Size in bytes to allocate for new device (Including the device entry)  | ||
|-  | |-  | ||
| − | !   | + | ! Return  | 
| Pointer to new Device entry or nil if device could not be created  | | Pointer to new Device entry or nil if device could not be created  | ||
|-  | |-  | ||
| Line 60: | Line 2,615: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Device  | 
| − | |   | + | | The device to destroy  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 72: | Line 2,630: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Device  | 
| − | |   | + | | The device to get the name from  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | The name of the device or a blank string on error  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 84: | Line 2,645: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Device  | 
| − | |   | + | | The device to set the name for  | 
| + | |-  | ||
| + | ! Name  | ||
| + | | The device name to set  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 96: | Line 2,663: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Device  | 
| − | |   | + | | The device to get the description from  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | The description of the device or a blank string on error  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 108: | Line 2,678: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Device  | 
| − | |   | + | | The device to set the description for  | 
| + | |-  | ||
| + | ! Description  | ||
| + | | The device description to set  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 120: | Line 2,696: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Device  | 
| − | |   | + | | The device to register  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 132: | Line 2,711: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Device  | 
| − | |   | + | | The device to deregister  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 140: | Line 2,722: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
<pre style="border: 0; padding-bottom:0px;">function DeviceFind(DeviceClass,DeviceId:LongWord):PDevice;</pre>  | <pre style="border: 0; padding-bottom:0px;">function DeviceFind(DeviceClass,DeviceId:LongWord):PDevice;</pre>  | ||
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a device by ID in the device table</div>  | 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! DeviceClass  | 
| − | |   | + | | The class of the device to find (DEVICE_CLASS_ANY for all classes)  | 
| + | |-  | ||
| + | ! DeviceId  | ||
| + | | The ID number of the device to find  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to device entry or nil if not found  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 151: | Line 2,739: | ||
<br />  | <br />  | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| − | <pre style="border: 0; padding-bottom:0px;">function   | + | <pre style="border: 0; padding-bottom:0px;">function DeviceFindByDeviceData(DeviceData:Pointer):PDevice;</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a device with matching DeviceData property in the device table</div>  | 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! DeviceData  | 
| − | |   | + | | The value to match against the DeviceData property  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to device entry or nil if not found  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 163: | Line 2,754: | ||
<br />  | <br />  | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| − | <pre style="border: 0; padding-bottom:0px;">function   | + | <pre style="border: 0; padding-bottom:0px;">function DeviceFindByName(const Name:String):PDevice; inline;</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a device by name in the device table</div>  | 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | ! '''  | + | ! Name  | 
| − | |   | + | | The name of the device to find (eg Timer0)  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFindByNameEx(DeviceClass:LongWord; const Name:String):PDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a device by class and name in the device table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! DeviceClass  | ||
| + | | The class of the device to find (eg DEVICE_CLASS_USB) (DEVICE_CLASS_ANY for all classes)  | ||
| + | |-  | ||
| + | ! Name  | ||
| + | | The name of the device to find (eg USB0)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFindByDescription(const Description:String):PDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a device by description in the device table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Description  | ||
| + | | The description of the device to find (eg BCM2836 ARM Timer)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFindByDescriptionEx(DeviceClass:LongWord; const Description:String):PDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a device by class and description in the device table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! DeviceClass  | ||
| + | | The class of the device to find (eg DEVICE_CLASS_USB) (DEVICE_CLASS_ANY for all classes)  | ||
| + | |-  | ||
| + | ! Description  | ||
| + | | The description of the device to find (eg BCM2836 ARM Timer)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to device entry or nil if not found  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 176: | Line 2,821: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
<pre style="border: 0; padding-bottom:0px;">function DeviceEnumerate(DeviceClass:LongWord; Callback:TDeviceEnumerate; Data:Pointer):LongWord;</pre>  | <pre style="border: 0; padding-bottom:0px;">function DeviceEnumerate(DeviceClass:LongWord; Callback:TDeviceEnumerate; Data:Pointer):LongWord;</pre>  | ||
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Enumerate all devices in the device table</div>  | 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! DeviceClass  | 
| − | |   | + | | The class of device to enumerate (DEVICE_CLASS_ANY for all classes)  | 
| + | |-  | ||
| + | ! Callback  | ||
| + | | The callback function to call for each device in the table  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A private data pointer to pass to callback for each device in the table  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 188: | Line 2,842: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
<pre style="border: 0; padding-bottom:0px;">function DeviceNotification(Device:PDevice; DeviceClass:LongWord; Callback:TDeviceNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>  | <pre style="border: 0; padding-bottom:0px;">function DeviceNotification(Device:PDevice; DeviceClass:LongWord; Callback:TDeviceNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>  | ||
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a notification for device changes</div>  | 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | ! '''Note'''  | + | ! Device  | 
| − | |   | + | | The device to notify changes for (Optional, pass nil for all devices)  | 
| + | |-  | ||
| + | ! DeviceClass  | ||
| + | | The class of device to notify changes for (DEVICE_CLASS_ANY for all classes)  | ||
| + | |-  | ||
| + | ! Callback  | ||
| + | | The function to call when a notification event occurs  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A private data pointer to pass to callback when a notification event occurs  | ||
| + | |-  | ||
| + | ! Notification  | ||
| + | | The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)  | ||
| + | |-  | ||
| + | ! Flags  | ||
| + | | The flags to control the notification (eg NOTIFIER_FLAG_WORKER)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareCreate(DeviceClass:LongWord; const Name:String; Buffer:Pointer; Size:LongWord):Boolean;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new block (memory) based firmware entry using the standard block firmware handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! DeviceClass  | ||
| + | | The class of device this firmware applies to (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for all devices)  | ||
| + | |-  | ||
| + | ! Buffer  | ||
| + | | A pointer to a block of memory containing the firmware to be provided to requesting devices  | ||
| + | |-  | ||
| + | ! Size  | ||
| + | | The size in bytes of the block pointed to by buffer  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | True if the new firmware entry was added or False on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Can be used by device drivers to register built in firmware as a device firmware provider. The supplied buffer can be statically or dynamically allocated but must not be freed once the device firmware has been created.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareRegister(DeviceClass:LongWord; const Name:String; Handler:TDeviceFirmwareHandler):THandle;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a new device firmware handler for acquiring device specific firmware</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! DeviceClass  | ||
| + | | The class of device this firmware applies to (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for all devices)  | ||
| + | |-  | ||
| + | ! Name  | ||
| + | | The name of the device firmware, device specific may be a filename, a device model, id or type  | ||
| + | |-  | ||
| + | ! Handler  | ||
| + | | The handler function which is to be called when a device requests this firmware  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | A handle for the new firmware handler on success or INVALID_HANDLE_VALUE on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Used by device firmware providers to register firmware for device drivers  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareDeregister(Handle:THandle):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister an existing device firmware handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | The handle returned by Register  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS on completion or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Used by device firmware providers to deregister firmware for device drivers  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareFind(DeviceClass:LongWord; const Name:String):PDeviceFirmware;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find an existing device firmware handler for a specified device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! DeviceClass  | ||
| + | | The class of device for the firmware (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for any class)  | ||
| + | |-  | ||
| + | ! Name  | ||
| + | | The name of the device firmware which is a device specific value such as a filename, a device model, id or type  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | A pointer to the device firmware entry which contains the details of the handler  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Used internally to locate compatible firmware for a device firmware open request  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareFindByHandle(Handle:THandle):PDeviceFirmware;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find an existing device firmware handler from a returned handle</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | A handle to the firmware returned by Open or Acquire  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | A pointer to the device firmware entry which contains the details of the handler  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Used internally to locate referenced firmware for a device firmware request  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareOpen(DeviceClass:LongWord; const Name:String; Timeout:LongWord; var Handle:THandle):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Open the firmware for a specified device from a registered handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! DeviceClass  | ||
| + | | The class of device for the firmware (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for any class)  | ||
| + | |-  | ||
| + | ! Name  | ||
| + | | The name of the device firmware which is a device specific value such as a filename, a device model, id or type  | ||
| + | |-  | ||
| + | ! Timeout  | ||
| + | | Number of milliseconds to wait for the device firmware to be ready (0 to not wait, INFINITE to wait forever)  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | A variable to receive a handle to the firmware on return  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS on completion, ERROR_NOT_FOUND if no handler can supply firmware or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | A handler may return ERROR_NOT_READY if the firmware may be accepted but is not available yet  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareClose(Handle:THandle):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Close a handle to the firmware for a specified device from a registered handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | The handle to the firmware as returned by Open  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS on completion, ERROR_NOT_FOUND if no handler accepts this firmware or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareSize(Handle:THandle):LongInt;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Return the size of the firmware for a specified device from a registered handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | The handle to the firmware as returned by Open  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The size of the firmware on success or -1 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareSeek(Handle:THandle; Position:LongInt):LongInt;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Seek to a position within the firmware for a specified device from a registered handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | The handle to the firmware as returned by Open  | ||
| + | |-  | ||
| + | ! Position  | ||
| + | | The byte position within the firmware to seek to  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The new position within the firmware on success or -1 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareRead(Handle:THandle; Buffer:Pointer; Count:LongInt):LongInt;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read into a buffer from the firmware for a specified device from a registered handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | The handle to the firmware as returned by Open  | ||
| + | |-  | ||
| + | ! Buffer  | ||
| + | | A pointer to a buffer to receive the data  | ||
| + | |-  | ||
| + | ! Count  | ||
| + | | The maximum number of bytes to be read  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The number of bytes read on success or -1 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareAcquire(DeviceClass:LongWord; const Name:String; Timeout:LongWord; var Handle:THandle; var Buffer:Pointer; var Size:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Acquire a memory block containing the firmware for a specified device from a registered handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! DeviceClass  | ||
| + | | The class of device for the firmware (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for any class)  | ||
| + | |-  | ||
| + | ! Name  | ||
| + | | The name of the device firmware which is a device specific value such as a filename, a device model, id or type  | ||
| + | |-  | ||
| + | ! Timeout  | ||
| + | | Number of milliseconds to wait for the device firmware to be ready (0 to not wait, INFINITE to wait forever)  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | A variable to receive a handle to the firmware on return  | ||
| + | |-  | ||
| + | ! Buffer  | ||
| + | | A variable to receive a pointer to the block of memory containing the firmware on return  | ||
| + | |-  | ||
| + | ! Size  | ||
| + | | A variable to receive the size of the memory block pointed to by buffer on return  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS on completion, ERROR_NOT_FOUND if no handler can supply firmware or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | A handler may return ERROR_NOT_READY if the firmware may be accepted but is not available yet. A handler may return ERROR_MORE_DATA if the size of the firmware is larger than can be returned in a single buffer.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceFirmwareRelease(Handle:THandle; Buffer:Pointer; Size:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Release a memory block containing the firmware for a specified device from a registered handler</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Handle  | ||
| + | | The handle to the firmware as returned by Acquire  | ||
| + | |-  | ||
| + | ! Buffer  | ||
| + | | The pointer to the block of memory containing the firmware as returned by Acquire  | ||
| + | |-  | ||
| + | ! Size  | ||
| + | | The size of the memory block as returned by Acquire  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS on completion, ERROR_NOT_FOUND if no handler accepts this firmware or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 204: | Line 3,128: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 216: | Line 3,140: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 228: | Line 3,152: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 240: | Line 3,164: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | ! '''  | + | ! Note  | 
| − | | To be documented  | + | | None documented  | 
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure NotifierRetry(Retry:PNotifierRetry);</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure NotifierWorker(Task:PNotifierTask);</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 255: | Line 3,203: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Return  | 
| Pointer to new Driver entry or nil if driver could not be created  | | Pointer to new Driver entry or nil if driver could not be created  | ||
|-  | |-  | ||
| Line 267: | Line 3,215: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Size  | 
| Size in bytes to allocate for new driver (Including the driver entry)  | | Size in bytes to allocate for new driver (Including the driver entry)  | ||
|-  | |-  | ||
| − | !   | + | ! Return  | 
| Pointer to new Driver entry or nil if driver could not be created  | | Pointer to new Driver entry or nil if driver could not be created  | ||
|-  | |-  | ||
| Line 282: | Line 3,230: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Driver  | 
| − | |   | + | | The driver to destroy  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 294: | Line 3,245: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Driver  | 
| − | |   | + | | The driver to get the name from  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | The name of the driver or a blank string on error  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 306: | Line 3,260: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Driver  | 
| − | |   | + | | The driver to set the name for  | 
| + | |-  | ||
| + | ! Name  | ||
| + | | The driver name to set  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 318: | Line 3,278: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Driver  | 
| − | |   | + | | The driver to register  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 330: | Line 3,293: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Driver  | 
| − | |   | + | | The driver to deregister  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 338: | Line 3,304: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
<pre style="border: 0; padding-bottom:0px;">function DriverFind(DriverClass,DriverId:LongWord):PDriver;</pre>  | <pre style="border: 0; padding-bottom:0px;">function DriverFind(DriverClass,DriverId:LongWord):PDriver;</pre>  | ||
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a driver by ID in the driver table</div>  | 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! DriverClass  | 
| − | |   | + | | The class of the driver to find (DRIVER_CLASS_ANY for all classes)  | 
| + | |-  | ||
| + | ! DriverId  | ||
| + | | The ID number of the driver to find  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to driver entry or nil if not found  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 350: | Line 3,322: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
<pre style="border: 0; padding-bottom:0px;">function DriverFindByName(const Name:String):PDriver;</pre>  | <pre style="border: 0; padding-bottom:0px;">function DriverFindByName(const Name:String):PDriver;</pre>  | ||
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a driver by name in the driver table</div>  | 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Name  | 
| − | |   | + | | The name of the driver to find (eg USB Hub Driver)  | 
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to driver entry or nil if not found  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 362: | Line 3,337: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
<pre style="border: 0; padding-bottom:0px;">function DriverEnumerate(DriverClass:LongWord; Callback:TDriverEnumerate; Data:Pointer):LongWord;</pre>  | <pre style="border: 0; padding-bottom:0px;">function DriverEnumerate(DriverClass:LongWord; Callback:TDriverEnumerate; Data:Pointer):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Enumerate all drivers in the driver table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! DriverClass  | ||
| + | | The class of driver to enumerate (DRIVER_CLASS_ANY for all classes)  | ||
| + | |-  | ||
| + | ! Callback  | ||
| + | | The callback function to call for each driver in the table  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A private data pointer to pass to callback for each driver in the table  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Clock device functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceStart(Clock:PClockDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Start the counter of the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to start  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceStop(Clock:PClockDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Stop the counter of the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to stop  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceRead(Clock:PClockDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read the counter value of the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to read from  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The 32 bit counter value of the clock or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceRead64(Clock:PClockDevice):Int64;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read the counter value of the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to read from  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The 64 bit counter value of the clock or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceWrite64(Clock:PClockDevice; const Value:Int64):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Write the counter value of the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to write to  | ||
| + | |-  | ||
| + | ! Value  | ||
| + | | The counter value to write  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the counter was set or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Not all clock devices support setting the counter value, will return an error if unsupported.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceGetRate(Clock:PClockDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current clock rate in Hz of the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to get the rate from  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The current clock rate in Hz or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceSetRate(Clock:PClockDevice; Rate:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current clock rate in Hz of the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to set the rate for  | ||
| + | |-  | ||
| + | ! Rate  | ||
| + | | The clock rate in Hz to set  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the clock rate was set or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Not all clock devices support setting the clock rate, will return an error if unsupported.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceProperties(Clock:PClockDevice; Properties:PClockProperties):LongWord; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the properties for the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to get properties from  | ||
| + | |-  | ||
| + | ! Properties  | ||
| + | | Pointer to a TClockProperties structure to fill in  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Replaced by ClockDeviceGetProperties for consistency  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceGetProperties(Clock:PClockDevice; Properties:PClockProperties):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the properties for the specified clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The Clock device to get properties from  | ||
| + | |-  | ||
| + | ! Properties  | ||
| + | | Pointer to a TClockProperties structure to fill in  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceCreate:PClockDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Clock entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Clock entry or nil if Clock could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceCreateEx(Size:LongWord):PClockDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Clock entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Size  | ||
| + | | Size in bytes to allocate for new Clock (Including the Clock entry)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Clock entry or nil if Clock could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceDestroy(Clock:PClockDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Destroy an existing clock entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The clock device to destroy  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceRegister(Clock:PClockDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a new clock in the clock table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The clock device to register  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceDeregister(Clock:PClockDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister a clock from the clock table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The clock device to deregister  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceFind(ClockId:LongWord):PClockDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a clock device by ID in the clock table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! ClockId  | ||
| + | | The ID number of the clock to find  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to clock device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceFindByName(const Name:String):PClockDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a clock device by name in the clock table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Name  | ||
| + | | The name of the clock to find (eg Clock0)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to clock device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceFindByDescription(const Description:String):PClockDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a clock device by description in the clock table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Description  | ||
| + | | The description of the clock to find (eg BCM2836 ARM Timer Clock)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to clock device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceEnumerate(Callback:TClockEnumerate; Data:Pointer):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Enumerate all clock devices in the clock table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Callback  | ||
| + | | The callback function to call for each clock in the table  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A private data pointer to pass to callback for each clock in the table  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceNotification(Clock:PClockDevice; Callback:TClockNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a notification for clock device changes</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Clock  | ||
| + | | The clock device to notify changes for (Optional, pass nil for all clocks)  | ||
| + | |-  | ||
| + | ! Callback  | ||
| + | | The function to call when a notification event occurs  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A private data pointer to pass to callback when a notification event occurs  | ||
| + | |-  | ||
| + | ! Notification  | ||
| + | | The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)  | ||
| + | |-  | ||
| + | ! Flags  | ||
| + | | The flags to control the notification (eg NOTIFIER_FLAG_WORKER)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Timer device functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceStart(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Start the clock and counter of the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to start  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceStop(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Stop the clock and counter of the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to stop  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceRead(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read the current value of the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to read from  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The 32 bit current value of the timer or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceRead64(Timer:PTimerDevice):Int64;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read the current value of the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to read from  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The 64 bit current value of the timer or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceWait(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Wait for the current interval to expire on the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to wait for  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the interval expired or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceEvent(Timer:PTimerDevice; Flags:LongWord; Callback:TTimerCallback; Data:Pointer):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Schedule a function to be called when the current interval expires on the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to schedule the callback for  | ||
| + | |-  | ||
| + | ! Flags  | ||
| + | | The flags to control the event (eg TIMER_EVENT_FLAG_REPEAT)  | ||
| + | |-  | ||
| + | ! Callback  | ||
| + | | The function to be called when the interval expires  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A pointer to be passed to the function when the interval expires (Optional)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the callback was scheduled successfully or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceCancel(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Cancel a previously scheduled event callback function on the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to cancel the callback for  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the callback was cancelled successfully or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceGetRate(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current clock rate in Hz of the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to get the rate from  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The current clock rate in Hz or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceSetRate(Timer:PTimerDevice; Rate:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current clock rate in Hz of the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to set the rate for  | ||
| + | |-  | ||
| + | ! Rate  | ||
| + | | The clock rate in Hz to set  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the clock rate was set or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceGetInterval(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current interval in ticks of the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to get the interval from  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The current interval in ticks or 0 on failure (or not set)  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | The tick rate is determined by the clock rate  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceSetInterval(Timer:PTimerDevice; Interval:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current interval in ticks of the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to set the interval for  | ||
| + | |-  | ||
| + | ! Interval  | ||
| + | | The interval in ticks to set  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the interval was set or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | The tick rate is determined by the clock rate  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceProperties(Timer:PTimerDevice; Properties:PTimerProperties):LongWord; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the properties for the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to get properties from  | ||
| + | |-  | ||
| + | ! Properties  | ||
| + | | Pointer to a TTimerProperties structure to fill in  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Replaced by TimerDeviceGetProperties for consistency  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceGetProperties(Timer:PTimerDevice; Properties:PTimerProperties):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the properties for the specified Timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The Timer device to get properties from  | ||
| + | |-  | ||
| + | ! Properties  | ||
| + | | Pointer to a TTimerProperties structure to fill in  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceCreate:PTimerDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Timer entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Timer entry or nil if Timer could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceCreateEx(Size:LongWord):PTimerDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Timer entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Size  | ||
| + | | Size in bytes to allocate for new Timer (Including the Timer entry)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Timer entry or nil if Timer could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceDestroy(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Destroy an existing Timer entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The timer device to destroy  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceRegister(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a new Timer in the Timer table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The timer device to register  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceDeregister(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister a Timer from the Timer table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The timer device to deregister  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceFind(TimerId:LongWord):PTimerDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a timer device by ID in the timer table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! TimerId  | ||
| + | | The ID number of the timer to find  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to timer device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceFindByName(const Name:String):PTimerDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a timer device by name in the timer table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Name  | ||
| + | | The name of the timer to find (eg Timer0)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to timer device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceFindByDescription(const Description:String):PTimerDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a timer device by description in the timer table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Description  | ||
| + | | The description of the timer to find (eg BCM2836 ARM Timer)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to timer device entry or nil if not found  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceEnumerate(Callback:TTimerEnumerate; Data:Pointer):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Enumerate all timer devices in the timer table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Callback  | ||
| + | | The callback function to call for each timer in the table  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A private data pointer to pass to callback for each timer in the table  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if completed or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceNotification(Timer:PTimerDevice; Callback:TTimerNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a notification for timer device changes</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Timer  | ||
| + | | The timer device to notify changes for (Optional, pass nil for all timers)  | ||
| + | |-  | ||
| + | ! Callback  | ||
| + | | The function to call when a notification event occurs  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A private data pointer to pass to callback when a notification event occurs  | ||
| + | |-  | ||
| + | ! Notification  | ||
| + | | The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)  | ||
| + | |-  | ||
| + | ! Flags  | ||
| + | | The flags to control the notification (eg NOTIFIER_FLAG_WORKER)  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Random device functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceStart(Random:PRandomDevice):LongWord;</pre>  | ||
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | ! '''Note'''  | + | ! Note  | 
| − | | To be documented  | + | | None documented  | 
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceStop(Random:PRandomDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceSeed(Random:PRandomDevice; Seed:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceReadByte(Random:PRandomDevice):Byte;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceReadWord(Random:PRandomDevice):Word;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceReadLongWord(Random:PRandomDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceReadQuadWord(Random:PRandomDevice):Int64;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceReadDouble(Random:PRandomDevice):Double;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceReadExtended(Random:PRandomDevice):Extended; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Replaced by RandomDeviceReadDouble  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceCreate:PRandomDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Random entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Random entry or nil if Random could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceCreateEx(Size:LongWord):PRandomDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Random entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Size  | ||
| + | | Size in bytes to allocate for new Random (Including the Random entry)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Random entry or nil if Random could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceDestroy(Random:PRandomDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Destroy an existing Random entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceRegister(Random:PRandomDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a new Random in the Random table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceDeregister(Random:PRandomDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister a Random from the Random table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceFind(RandomId:LongWord):PRandomDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceFindByName(const Name:String):PRandomDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceFindByDescription(const Description:String):PRandomDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceEnumerate(Callback:TRandomEnumerate; Data:Pointer):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceNotification(Random:PRandomDevice; Callback:TRandomNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 373: | Line 4,296: | ||
<br />  | <br />  | ||
| + | '''Mailbox device functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceStart(Mailbox:PMailboxDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceStop(Mailbox:PMailboxDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceReceive(Mailbox:PMailboxDevice; Channel:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceSend(Mailbox:PMailboxDevice; Channel,Data:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceCall(Mailbox:PMailboxDevice; Channel,Data:LongWord; var Response:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceGetTimeout(Mailbox:PMailboxDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceSetTimeout(Mailbox:PMailboxDevice; Timeout:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceCreate:PMailboxDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Mailbox entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Mailbox entry or nil if Mailbox could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceCreateEx(Size:LongWord):PMailboxDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Mailbox entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Size  | ||
| + | | Size in bytes to allocate for new Mailbox (Including the Mailbox entry)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Mailbox entry or nil if Mailbox could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceDestroy(Mailbox:PMailboxDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Destroy an existing Mailbox entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceRegister(Mailbox:PMailboxDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a new Mailbox in the Mailbox table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceDeregister(Mailbox:PMailboxDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister a Mailbox from the Mailbox table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceFind(MailboxId:LongWord):PMailboxDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceFindByName(const Name:String):PMailboxDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceFindByDescription(const Description:String):PMailboxDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceEnumerate(Callback:TMailboxEnumerate; Data:Pointer):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceNotification(Mailbox:PMailboxDevice; Callback:TMailboxNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Watchdog device functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceStart(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceStop(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceRefresh(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceGetRemain(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceGetTimeout(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceSetTimeout(Watchdog:PWatchdogDevice; Timeout:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceCreate:PWatchdogDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Watchdog entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Watchdog entry or nil if Watchdog could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceCreateEx(Size:LongWord):PWatchdogDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new Watchdog entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Size  | ||
| + | | Size in bytes to allocate for new Watchdog (Including the Watchdog entry)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | Pointer to new Watchdog entry or nil if Watchdog could not be created  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceDestroy(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Destroy an existing Watchdog entry</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceRegister(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a new Watchdog in the Watchdog table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceDeregister(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister a Watchdog from the Watchdog table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceFind(WatchdogId:LongWord):PWatchdogDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceFindByName(const Name:String):PWatchdogDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceFindByDescription(const Description:String):PWatchdogDevice; inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceEnumerate(Callback:TWatchdogEnumerate; Data:Pointer):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceNotification(Watchdog:PWatchdogDevice; Callback:TWatchdogNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''RTL clock functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysClockRead:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysClockRead64:Int64;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''RTL timer (counter) functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerAvailable:Boolean;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if a timer device is available</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerRead:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read the current value of the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The 32 bit current value of the counter  or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerRead64:Int64;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Read the current value of the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The 64 bit current value of the counter  or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerWait:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Wait for the current interval to expire on the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the interval expired or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerEvent(Callback:TTimerCallback; Data:Pointer):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Schedule a function to be called when the current interval expires on the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Callback  | ||
| + | | The function to be called when the interval expires  | ||
| + | |-  | ||
| + | ! Data  | ||
| + | | A pointer to be pass to the function when the interval expires (Optional)  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the callback was scheduled successfully or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerCancel:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Cancel a previously scheduled event callback function on the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the callback was cancelled successfully or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerGetRate:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current clock rate in Hz of the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The current clock rate in Hz or 0 on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerSetRate(Rate:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current clock rate in Hz of the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Rate  | ||
| + | | The clock rate in Hz to set  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the clock rate was set or another error code on failure  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerGetInterval:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current interval in ticks of the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The current interval in ticks or 0 on failure (or not set)  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | The tick rate is determined by the clock rate  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysTimerSetInterval(Interval:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current interval in ticks of the default counter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Interval  | ||
| + | | The interval in ticks to set  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | ERROR_SUCCESS if the interval was set or another error code on failure  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | The tick rate is determined by the clock rate  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''RTL random functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysRandomAvailable:Boolean;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if a random (RNG) device is available</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure SysRandomize;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure SysRandomSeed(Seed:LongWord);</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysRandomReadLongInt(Limit:LongInt):LongInt;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysRandomReadInt64(Limit:Int64):Int64;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysRandomReadDouble:Double;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''RTL watchdog functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysWatchdogAvailable:Boolean;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if a watchdog timer device is available</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysWatchdogStart(Milliseconds:LongWord):LongWord; </pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysWatchdogStop:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function SysWatchdogRefresh(Milliseconds:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Device helper functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceGetCount:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current device count</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceCheck(Device:PDevice):PDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Device is in the device table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function NotifierGetCount:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current notifier count</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function NotifierCheck(Notifier:PNotifier):PNotifier;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Notifier is in the notifier table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceBusToString(DeviceBus:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceStateToString(DeviceState:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DeviceClassToString(DeviceClass:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function NotificationToString(Notification:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure DeviceLog(Level:LongWord; Device:PDevice; const AText:String);</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure DeviceLogInfo(Device:PDevice; const AText:String); inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure DeviceLogWarn(Device:PDevice; const AText:String); inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure DeviceLogError(Device:PDevice; const AText:String); inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">procedure DeviceLogDebug(Device:PDevice; const AText:String); inline;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Driver helper functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DriverGetCount:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current driver count</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DriverCheck(Driver:PDriver):PDriver;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Driver is in the driver table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DriverStateToString(DriverState:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function DriverClassToString(DriverClass:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Clock device helper functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceGetCount:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current clock device count</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceGetDefault:PClockDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceSetDefault(Clock:PClockDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current default clock device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockDeviceCheck(Clock:PClockDevice):PClockDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Clock is in the Clock table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockTypeToString(ClockType:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Clock type value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function ClockStateToString(ClockState:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Clock state value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Timer device helper functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceGetCount:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current timer device count</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceGetDefault:PTimerDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceSetDefault(Timer:PTimerDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current default timer device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceCheck(Timer:PTimerDevice):PTimerDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Timer is in the Timer table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerTypeToString(TimerType:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Timer type value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerStateToString(TimerState:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Timer state value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceCreateWaiter(Timer:PTimerDevice; Callback:TTimerCallback; Data:Pointer):PTimerWaiter;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create a new waiter using the supplied parameters</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Waiter must be registered by calling TimerDeviceRegisterWaiter.  | ||
| + | Caller must hold the Timer device lock.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceDestroyWaiter(Timer:PTimerDevice; Waiter:PTimerWaiter):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Destroy an existing waiter</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Waiter must be deregistered first by calling TimerDeviceDeregisterWaiter.  | ||
| + | Caller must hold the Timer device lock.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceRegisterWaiter(Timer:PTimerDevice; Waiter:PTimerWaiter):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Register a waiter in the waiter list of the supplied Timer</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Waiter must be created by calling TimerDeviceCreateWaiter.  | ||
| + | Caller must hold the Timer device lock.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function TimerDeviceDeregisterWaiter(Timer:PTimerDevice; Waiter:PTimerWaiter):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Deregister a waiter from the waiter list of the supplied Timer</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | Waiter must be destroyed by calling TimerDeviceDestroyWaiter.  | ||
| + | Caller must hold the Timer device lock.  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Random device helper functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceGetCount:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current random device count</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceGetDefault:PRandomDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default random device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceSetDefault(Random:PRandomDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current default random device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomDeviceCheck(Random:PRandomDevice):PRandomDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Random is in the Random table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomTypeToString(RandomType:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Random type value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function RandomStateToString(RandomState:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Random state value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Mailbox device helper functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceGetCount:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current mailbox device count</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceGetDefault:PMailboxDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default mailbox device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceSetDefault(Mailbox:PMailboxDevice):LongWord; </pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current default mailbox device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxDeviceCheck(Mailbox:PMailboxDevice):PMailboxDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Mailbox is in the Mailbox table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxTypeToString(MailboxType:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Mailbox type value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function MailboxStateToString(MailboxState:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Mailbox state value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | |||
| + | '''Watchdog device helper functions'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceGetCount:LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current watchdog device count</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceGetDefault:PWatchdogDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current default watchdog device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceSetDefault(Watchdog:PWatchdogDevice):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the current default watchdog device</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogDeviceCheck(Watchdog:PWatchdogDevice):PWatchdogDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Watchdog is in the Watchdog table</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogTypeToString(WatchdogType:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Watchdog type value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">  | ||
| + | <pre style="border: 0; padding-bottom:0px;">function WatchdogStateToString(WatchdogState:LongWord):String;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Watchdog state value to a string</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Note  | ||
| + | | None documented  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
Return to [[Unit_Reference|Unit Reference]]  | Return to [[Unit_Reference|Unit Reference]]  | ||
Latest revision as of 04:55, 21 June 2023
Return to Unit Reference
Description
Ultibo Device Interface unit
Constants
 DEVICE_*  DEVICE_NAME_PREFIX = 'Device';
 | 
Name prefix for Devices | 
 
 DEVICE_SIGNATURE_*  DEVICE_SIGNATURE = $AD03FE3C;
 | 
 DEVICE_*_LENGTH  DEVICE_NAME_LENGTH = SIZE_64;
 | 
Length of device name | 
 DEVICE_DESC_LENGTH = SIZE_128;
 | 
Length of device description | 
 DEVICE_BUS_*  NONE = 0;
 | 
|
 DEVICE_BUS_PCI = 1;
 | 
|
 DEVICE_BUS_USB = 2;
 | 
|
 DEVICE_BUS_ISA = 3;
 | 
|
 DEVICE_BUS_PS2 = 4;
 | 
|
 DEVICE_BUS_FIREWIRE = 5;
 | 
|
 DEVICE_BUS_SD = 6;
 | 
SD/SDHC/SDXC/SDIO etc | 
 DEVICE_BUS_MMC = 7;
 | 
MMC/eMMC etc | 
 DEVICE_BUS_ATA = 8;
 | 
|
 DEVICE_BUS_IDE = 9;
 | 
|
 DEVICE_BUS_SCSI = 10;
 | 
|
 DEVICE_BUS_ATAPI = 11;
 | 
|
 DEVICE_BUS_SATA = 12;
 | 
|
 DEVICE_BUS_SERIAL = 13;
 | 
|
 DEVICE_BUS_SPI = 14;
 | 
Serial Peripheral Interface device | 
 DEVICE_BUS_MMIO = 15;
 | 
Memory Mapped IO device (No Bus) | 
 DEVICE_BUS_PCIE = 16;
 | 
|
 DEVICE_BUS_I2C = 17;
 | 
I2C connected device | 
 DEVICE_BUS_MAX = 17;
 | 
|
 DEVICE_STATE_*  DEVICE_STATE_UNREGISTERED = 0;
 | 
|
 DEVICE_STATE_REGISTERED = 1;
 | 
|
 DEVICE_STATE_MAX = 1;
 | 
|
 
 DEVICE_ID_*  DEVICE_ID_ANY = $FFFFFFFF;
 | 
Any Device (Pass to DeviceFind to match all devices) | 
 DEVICE_CLASS_*  DEVICE_CLASS_NONE = 0;
 | 
No Device | 
 DEVICE_CLASS_USBHOST = 1;
 | 
A USB Host Controller (eg XHCI/EHCI/UHCI/OHCI or DWCOTG etc) (Implementing a standard USB host interface) | 
 DEVICE_CLASS_PCIHOST = 2;
 | 
A PCI Host Controller (eg AHCI etc) (Implementing a standard PCI host interface) | 
 DEVICE_CLASS_USB = 3;
 | 
A USB Device (eg Hub/Keyboard/Mouse/Mass Storage/Vendor Specific etc) (Implementing a standard USB device interface) | 
 DEVICE_CLASS_PCI = 4;
 | 
A PCI Device (eg Graphics/Controller etc) (Implementing a standard PCI device interface) | 
 DEVICE_CLASS_NETWORK = 5;
 | 
A Network Device (Implementing a standard Network device interface). May also be a USB or PCI device | 
 DEVICE_CLASS_STORAGE = 6;
 | 
A Storage Device (Implementing a standard Storage device interface). May also be a USB, PCI, MMC, SCSI or ATA device | 
 DEVICE_CLASS_BLOCK = DEVICE_CLASS_STORAGE;
 | 
|
 DEVICE_CLASS_FILESYSTEM = 7;
 | 
A FileSystem Device (eg FAT/NTFS/CDFS/EXTFS etc)(Implementing a standard FileSystem device interface) | 
 DEVICE_CLASS_PROTOCOL = 8;
 | 
A Protocol Device (eg TCP/UDP/IP/ICMP etc) (Implementing a standard Protocol device interface) | 
 DEVICE_CLASS_TRANSPORT = DEVICE_CLASS_PROTOCOL;
 | 
|
 DEVICE_CLASS_KEYBOARD = 9;
 | 
A Keyboard Device (Implementing a standard Keyboard device interface) | 
 DEVICE_CLASS_MOUSE = 10;
 | 
A Mouse Device (Implementing a standard Mouse device interface) | 
 DEVICE_CLASS_BLUETOOTH = 11;
 | 
A Bluetooth Device (Implementing a standard Bluetooth device interface) | 
 DEVICE_CLASS_SERIAL = 12;
 | 
A Serial Device (Implementing a standard Serial device interface) | 
 DEVICE_CLASS_AUDIO = 13;
 | 
An Audio Device (Implementing a standard Audio device interface) | 
 DEVICE_CLASS_VIDEO = 14;
 | 
A Video Device (Implementing a standard Video device interface) | 
 DEVICE_CLASS_SCSI = 15;
 | 
A SCSI Device (Implementing a standard SCSI device interface). May also be a PCI device | 
 DEVICE_CLASS_ATA = 16;
 | 
An ATA/ATAPI Device (Implementing a standard ATA/ATAPI device interface). May also be a PCI device | 
 DEVICE_CLASS_IDE = DEVICE_CLASS_ATA;
 | 
|
 DEVICE_CLASS_ATAPI = DEVICE_CLASS_ATA;
 | 
|
 DEVICE_CLASS_IMAGE = 17;
 | 
An Image Device (eg Camera) (Implementing a standard Image device interface) | 
 DEVICE_CLASS_PRINTER = 18;
 | 
A Printer Device (Implementing a standard Printer device interface) | 
 DEVICE_CLASS_COMMUNICATIONS = 19;
 | 
A Communications Device (Implementing a standard Communications device interface) | 
 DEVICE_CLASS_SMART_CARD = 20;
 | 
A Smart Card Device (Implementing a standard Smart Card device interface) | 
 DEVICE_CLASS_MONITOR = 21;
 | 
A Monitor Device (Implementing a standard Monitor device interface) | 
 DEVICE_CLASS_DISPLAY = 22;
 | 
A Display Device (eg Billboard) (Implementing a standard Display device interface) | 
 DEVICE_CLASS_AUDIOVIDEO = 23;
 | 
An Audio/Video Device (Implementing a standard Audio/Video device interface) | 
 DEVICE_CLASS_IRDA = 24;
 | 
An Infrared Device (Implementing a standard Infrared device interface) | 
 DEVICE_CLASS_SPI = 25;
 | 
An SPI Device (Implementing a standard SPI device interface) | 
 DEVICE_CLASS_I2C = 26;
 | 
An I2C Device (Implementing a standard I2C device interface) | 
 DEVICE_CLASS_UART = 27;
 | 
A UART Device (Implementing a standard UART device interface) | 
 DEVICE_CLASS_MMC = 28;
 | 
An MMC Device (Implementing a standard MMC device interface) | 
 DEVICE_CLASS_SD = 29;
 | 
An SD Device (Implementing a standard SD device interface) | 
 DEVICE_CLASS_SDHCI = 30;
 | 
An SD/MMC Host Controller (Implementing a standard SDHCI device interface) | 
 DEVICE_CLASS_SDHOST = DEVICE_CLASS_SDHCI;
 | 
|
 DEVICE_CLASS_MMCHOST = DEVICE_CLASS_SDHCI;
 | 
|
 DEVICE_CLASS_MMCIHOST = DEVICE_CLASS_SDHCI;
 | 
|
 DEVICE_CLASS_DFU = 31;
 | 
A Device Firmware Update Device (Implementing a standard DFU device interface) | 
 DEVICE_CLASS_GPIO = 32;
 | 
A GPIO Device (Implementing a standard GPIO device interface) | 
 DEVICE_CLASS_MAILBOX = 33;
 | 
A Mailbox Device | 
 DEVICE_CLASS_OPENGL = 34;
 | 
An OpenGL Device | 
 DEVICE_CLASS_DVB = 35;
 | 
A Digital Video Broadcast (DVB) Device | 
 DEVICE_CLASS_DAB = 36;
 | 
A Digital Audio Broadcast (DAB) Device | 
 DEVICE_CLASS_DMA = 37;
 | 
A DMA Controller Device (Implementing a standard DMA controller interface) | 
 DEVICE_CLASS_SCSIHOST = 38;
 | 
A SCSI Host Device (Implementing a standard SCSI host interface) | 
 DEVICE_CLASS_ATAHOST = 39;
 | 
An ATA Host Device (Implementing a standard ATA host interface) | 
 DEVICE_CLASS_TIMER = 40;
 | 
A Timer or Counter Device | 
 DEVICE_CLASS_RANDOM = 41;
 | 
A Random Number Generator Device | 
 DEVICE_CLASS_FRAMEBUFFER = 42;
 | 
A Frame Buffer Device | 
 DEVICE_CLASS_WATCHDOG = 43;
 | 
A Watchdog Timer Device | 
 DEVICE_CLASS_CLOCK = 44;
 | 
A Clock (Date/Time) Device | 
 DEVICE_CLASS_CONSOLE = 45;
 | 
A Console Device | 
 DEVICE_CLASS_RTC = 46;
 | 
A Real Time Clock (Battery Backed) Device | 
 DEVICE_CLASS_USBHUB = 47;
 | 
A USB Hub (Implementing a standard USB hub interface) | 
 DEVICE_CLASS_LOGGING = 48;
 | 
A Logging Device (Implementing a standard Logging device interface) | 
 DEVICE_CLASS_PCM = 49;
 | 
A PCM Sound Device (Implementing a standard PCM device interface) | 
 DEVICE_CLASS_I2S = DEVICE_CLASS_PCM;
 | 
|
 DEVICE_CLASS_PWM = 50;
 | 
A Pulse Width Modulation (PWM) Device | 
 DEVICE_CLASS_1WIRE = 51;
 | 
A 1-Wire Device (Implementing a standard W1 device interface) | 
 DEVICE_CLASS_CLOCK_MANAGER = 52;
 | 
A Clock Manager Device | 
 DEVICE_CLASS_CODEC = 53;
 | 
A CODEC Device (eg Audio or Video) | 
 DEVICE_CLASS_TOUCH = 54;
 | 
A Touch Device | 
 DEVICE_CLASS_MEMORY = 55;
 | 
A Memory Device (eg OTP, NVRAM or Flash) | 
 DEVICE_CLASS_GENERIC = 56;
 | 
A Generic Device | 
 DEVICE_CLASS_VIRTIO = 57;
 | 
A VIRTIO Device (eg Block/Network/Memory/Console/Input etc) (Implementing a standard VIRTIO device interface) | 
 DEVICE_CLASS_BLUETOOTHHOST = 58;
 | 
A Bluetooth Host Controller (Implementing a standard Bluetooth host interface) | 
 DEVICE_CLASS_JOYSTICK = 59;
 | 
A Joystick or Gamepad Device | 
 DEVICE_CLASS_HID = 60;
 | 
A Human Interface Device (HID) | 
 DEVICE_CLASS_MAX = 60;
 | 
|
 DEVICE_CLASS_ANY = $FFFFFFFF;
 | 
Any Device (Pass to DeviceFind or DeviceEnumerate to match all devices) | 
| Device Class Names | |
DEVICE_CLASS_NAMES:array[DEVICE_CLASS_NONE..DEVICE_CLASS_MAX] of String = (
 | |
'DEVICE_CLASS_NONE',
 | |
'DEVICE_CLASS_USBHOST',
 | |
'DEVICE_CLASS_PCIHOST',
 | |
'DEVICE_CLASS_USB',
 | |
'DEVICE_CLASS_PCI',
 | |
'DEVICE_CLASS_NETWORK',
 | |
'DEVICE_CLASS_STORAGE',
 | |
'DEVICE_CLASS_FILESYSTEM',
 | |
'DEVICE_CLASS_PROTOCOL',
 | |
'DEVICE_CLASS_KEYBOARD',
 | |
'DEVICE_CLASS_MOUSE',
 | |
'DEVICE_CLASS_BLUETOOTH',
 | |
'DEVICE_CLASS_SERIAL',
 | |
'DEVICE_CLASS_AUDIO',
 | |
'DEVICE_CLASS_VIDEO',
 | |
'DEVICE_CLASS_SCSI',
 | |
'DEVICE_CLASS_ATA',
 | |
'DEVICE_CLASS_IMAGE',
 | |
'DEVICE_CLASS_PRINTER',
 | |
'DEVICE_CLASS_COMMUNICATIONS',
 | |
'DEVICE_CLASS_SMART_CARD',
 | |
'DEVICE_CLASS_MONITOR',
 | |
'DEVICE_CLASS_DISPLAY',
 | |
'DEVICE_CLASS_AUDIOVIDEO',
 | |
'DEVICE_CLASS_IRDA',
 | |
'DEVICE_CLASS_SPI',
 | |
'DEVICE_CLASS_I2C',
 | |
'DEVICE_CLASS_UART',
 | |
'DEVICE_CLASS_MMC',
 | |
'DEVICE_CLASS_SD',
 | |
'DEVICE_CLASS_SDHCI',
 | |
'DEVICE_CLASS_DFU',
 | |
'DEVICE_CLASS_GPIO',
 | |
'DEVICE_CLASS_MAILBOX',
 | |
'DEVICE_CLASS_OPENGL',
 | |
'DEVICE_CLASS_DVB',
 | |
'DEVICE_CLASS_DAB',
 | |
'DEVICE_CLASS_DMA',
 | |
'DEVICE_CLASS_SCSIHOST',
 | |
'DEVICE_CLASS_ATAHOST',
 | |
'DEVICE_CLASS_TIMER',
 | |
'DEVICE_CLASS_RANDOM',
 | |
'DEVICE_CLASS_FRAMEBUFFER',
 | |
'DEVICE_CLASS_WATCHDOG',
 | |
'DEVICE_CLASS_CLOCK',
 | |
'DEVICE_CLASS_CONSOLE',
 | |
'DEVICE_CLASS_RTC',
 | |
'DEVICE_CLASS_USBHUB',
 | |
'DEVICE_CLASS_LOGGING',
 | |
'DEVICE_CLASS_PCM',
 | |
'DEVICE_CLASS_PWM',
 | |
'DEVICE_CLASS_1WIRE',
 | |
'DEVICE_CLASS_CLOCK_MANAGER',
 | |
'DEVICE_CLASS_CODEC',
 | |
'DEVICE_CLASS_TOUCH',
 | |
'DEVICE_CLASS_MEMORY',
 | |
'DEVICE_CLASS_GENERIC',
 | |
'DEVICE_CLASS_VIRTIO',
 | |
'DEVICE_CLASS_BLUETOOTHHOST',
 | |
'DEVICE_CLASS_JOYSTICK',
 | |
'DEVICE_CLASS_HID');
 | |
 DEVICE_NOTIFICATION_*  DEVICE_NOTIFICATION_NONE = $00000000;
 | 
Pass to DeviceNotification to cancel an existing Notification | 
 DEVICE_NOTIFICATION_REGISTER = $00000001;
 | 
|
 DEVICE_NOTIFICATION_DEREGISTER = $00000002;
 | 
|
 DEVICE_NOTIFICATION_OPEN = $00000004;
 | 
|
 DEVICE_NOTIFICATION_CLOSE = $00000008;
 | 
|
 DEVICE_NOTIFICATION_UP = $00000010;
 | 
|
 DEVICE_NOTIFICATION_DOWN = $00000020;
 | 
|
 DEVICE_NOTIFICATION_INSERT = $00000040;
 | 
|
 DEVICE_NOTIFICATION_EJECT = $00000080;
 | 
|
 DEVICE_NOTIFICATION_ATTACH = $00000100;
 | 
|
 DEVICE_NOTIFICATION_DETACH = $00000200;
 | 
|
 DEVICE_NOTIFICATION_ENABLE = $00000400;
 | 
|
 DEVICE_NOTIFICATION_DISABLE = $00000800;
 | 
|
 DEVICE_NOTIFICATION_BIND = $00001000;
 | 
|
 DEVICE_NOTIFICATION_UNBIND = $00002000;
 | 
|
 DEVICE_NOTIFICATION_ATTACHING = $00004000;
 | 
|
 DEVICE_NOTIFICATION_DETACHING = $00008000;
 | 
|
 DEVICE_NOTIFICATION_INSERTING = $00010000;
 | 
|
 DEVICE_NOTIFICATION_EJECTING = $00020000;
 | 
|
 DEVICE_NOTIFICATION_OPENING = $00040000;
 | 
|
 DEVICE_NOTIFICATION_CLOSING = $00080000;
 | 
|
 DEVICE_NOTIFICATION_RESIZE = $00100000;
 | 
|
 DEVICE_NOTIFICATION_RESIZING = $00200000;
 | 
 FIRMWARE_NAME_*  FIRMWARE_NAME_LENGTH = SIZE_256;
 | 
Length of firmware name | 
 FIRMWARE_ACTION_*  FIRMWARE_ACTION_NONE = 0;
 | 
|
 FIRMWARE_ACTION_SIZE = 1;
 | 
Return the size in bytes of the firmware item | 
 FIRMWARE_ACTION_OPEN = 2;
 | 
Open the firmware item and return a handle | 
 FIRMWARE_ACTION_READ = 3;
 | 
Read from the firmware item specified by a given handle | 
 FIRMWARE_ACTION_SEEK = 4;
 | 
Seek to a location in the firmware item specified by a given handle | 
 FIRMWARE_ACTION_CLOSE = 5;
 | 
Close a handle to the firmware item | 
 FIRMWARE_ACTION_ACQUIRE = 6;
 | 
Acquire a memory block containing the firmware item | 
 FIRMWARE_ACTION_RELEASE = 7;
 | 
Release a memory block containing the firmware item | 
 
 FIRMWARE_*  FIRMWARE_WAIT_DELAY = 100;
 | 
Delay between retries for firmware while waiting for timeout (Milliseconds) | 
 FIRMWARE_MAX_BUFFER = SIZE_4M;
 | 
Maximum size buffer able to be allocated for firmware by acquire | 
 
 NOTIFIER_SIGNATURE_*  NOTIFIER_SIGNATURE = $6FA1BEC9;
 | 
 
 NOTIFIER_STATE_*  NOTIFIER_STATE_UNREGISTERED = 0;
 | 
|
 NOTIFIER_STATE_REGISTERED = 1;
 | 
 
 NOTIFIER_FLAG_*  NOTIFIER_FLAG_NONE = $00000000;
 | 
|
 NOTIFIER_FLAG_WORKER = $00000001;
 | 
If set, notification callback event will be scheduled on a worker thread | 
 NOTIFIER_FLAG_UNLOCK = $00000002;
 | 
If set, the notifier table lock will be released before calling the notification callback event | 
 
 DEVICE_LOG_*  DEVICE_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG;
 | 
Device debugging messages | 
 DEVICE_LOG_LEVEL_INFO = LOG_LEVEL_INFO;
 | 
Device informational messages, such as a device being attached or detached | 
 DEVICE_LOG_LEVEL_WARN = LOG_LEVEL_WARN;
 | 
Device warning messages | 
 DEVICE_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;
 | 
Device error messages | 
 DEVICE_LOG_LEVEL_NONE = LOG_LEVEL_NONE;
 | 
No Device messages | 
 
 DRIVER_*  DRIVER_NAME_PREFIX = 'Driver';
 | 
Name prefix for Drivers | 
 DRIVER_SIGNATURE_*  DRIVER_SIGNATURE = $1EB4980A;
 | 
 
 DRIVER_NAME_*  DRIVER_NAME_LENGTH = SIZE_64;
 | 
Length of driver name | 
 
 DRIVER_STATE_*  DRIVER_STATE_UNREGISTERED = 0;
 | 
|
 DRIVER_STATE_REGISTERED = 1;
 | 
|
 DRIVER_STATE_MAX = 1;
 | 
|
 
 DRIVER_ID_*  DRIVER_ID_ANY = $FFFFFFFF;
 | 
Any Driver (Pass to DriverFind to match all drivers) | 
  
 DRIVER_CLASS_*  DRIVER_CLASS_NONE = 0;
 | 
No Driver | 
 DRIVER_CLASS_USB = 1;
 | 
A USB Driver (Implementing a standard USB driver interface) | 
 DRIVER_CLASS_PCI = 2;
 | 
A PCI Driver (Implementing a standard PCI driver interface) | 
 DRIVER_CLASS_SDIO = 3;
 | 
An SDIO Driver (Implementing a standard SDIO driver interface) | 
 DRIVER_CLASS_BLUETOOTH = 4;
 | 
A Bluetooth Driver (Implementing a standard Bluetooth driver interface) | 
 DRIVER_CLASS_VIRTIO = 5;
 | 
A VIRTIO Driver (Implementing a standard VIRTIO driver interface) | 
 DRIVER_CLASS_HID = 6;
 | 
A Human Interface Device (HID) Driver (Implementing a standard HID driver interface) | 
 DRIVER_CLASS_MAX = 6;
 | 
|
 DRIVER_CLASS_ANY = $FFFFFFFF;
 | 
Any Driver (Pass to DriverFind or DriverEnumerate to match all drivers) | 
| Driver Class Names | |
DRIVER_CLASS_NAMES:array[DRIVER_CLASS_NONE..DRIVER_CLASS_MAX] of String = (
 | |
'DRIVER_CLASS_NONE',
 | |
'DRIVER_CLASS_USB',
 | |
'DRIVER_CLASS_PCI',
 | |
'DRIVER_CLASS_SDIO',
 | |
'DRIVER_CLASS_BLUETOOTH',
 | |
'DRIVER_CLASS_VIRTIO',
 | |
'DRIVER_CLASS_HID');
 | |
 HOST_*  HOST_NAME_PREFIX = 'Host';
 | 
Name prefix for Hosts | 
 
 HOST_SIGNATURE_*  HOST_SIGNATURE = $F45D30FE;
 | 
 
 HOST_NAME_*  HOST_NAME_LENGTH = SIZE_64;
 | 
Length of host name | 
 
 HOST_STATE_*  HOST_STATE_UNREGISTERED = 0;
 | 
|
 HOST_STATE_REGISTERED = 1;
 | 
|
 HOST_STATE_MAX = 1;
 | 
|
 
 HOST_ID_*  HOST_ID_ANY = $FFFFFFFF;
 | 
Any Host (Pass to HostFind to match all hosts) | 
 
 HOST_CLASS_*  HOST_CLASS_NONE = 0;
 | 
No Host} | 
 HOST_CLASS_USB = 1;
 | 
A USB Host (eg XHCI/EHCI/UHCI/OHCI or DWCOTG etc) (Implementing a standard USB host interface) | 
 HOST_CLASS_PCI = 2;
 | 
A PCI Host (eg AHCI etc) (Implementing a standard PCI host interface) | 
 HOST_CLASS_SD = 3;
 | 
An SD Host (eg MMC/SDIO etc) (Implementing a standard SD host interface) | 
 HOST_CLASS_BLUETOOTH = 4;
 | 
A Bluetooth Host (Implementing a standard Bluetooth host interface) | 
 HOST_CLASS_MAX = 4;
 | 
|
 HOST_CLASS_ANY = $FFFFFFFF;
 | 
Any Host (Pass to HostFind or HostEnumerate to match all hosts) | 
 
 CLOCK_*  CLOCK_NAME_PREFIX = 'Clock';
 | 
Name prefix for Clock Devices | 
 
 CLOCK_TYPE_*  CLOCK_TYPE_NONE = 0;
 | 
|
 CLOCK_TYPE_HARDWARE = 1;
 | 
|
 CLOCK_TYPE_MAX = 1;
 | 
|
 
 CLOCK_STATE_*  CLOCK_STATE_DISABLED = 0;
 | 
|
 CLOCK_STATE_ENABLED = 1;
 | 
|
 CLOCK_STATE_MAX = 1;
 | 
|
 
 CLOCK_FLAG_*  CLOCK_FLAG_NONE = $00000000;
 | 
|
 CLOCK_FLAG_WRITABLE = $00000001;
 | 
Device supports writing the clock value | 
 CLOCK_FLAG_VARIABLE = $00000002;
 | 
Device supports setting the clock rate | 
 
 TIMER_*  TIMER_NAME_PREFIX = 'Timer';
 | 
Name prefix for Timer Devices | 
 
 TIMER_TYPE_*  TIMER_TYPE_NONE = 0;
 | 
|
 TIMER_TYPE_HARDWARE = 1;
 | 
|
 TIMER_TYPE_MAX = 1;
 | 
|
 
 TIMER_STATE_*  TIMER_STATE_DISABLED = 0;
 | 
|
 TIMER_STATE_ENABLED = 1;
 | 
|
 TIMER_STATE_MAX = 1;
 | 
|
 
 TIMER_FLAG_*  TIMER_FLAG_NONE = $00000000;
 | 
|
 TIMER_FLAG_WRAPPING = $00000001;
 | 
Device provides a wrapping or self reloading counter | 
 TIMER_FLAG_COUNTER = $00000002;
 | 
Device will appear as a continuously incrementing counter when read | 
 TIMER_FLAG_DOWN = $00000004;
 | 
Device counts down from the starting value to zero (And optionally triggers an event) | 
 
 TIMER_EVENT_FLAG_*  TIMER_EVENT_FLAG_NONE = $00000000;
 | 
|
 TIMER_EVENT_FLAG_REPEAT = $00000001;
 | 
Event will be repeated until cancelled | 
 TIMER_EVENT_FLAG_INTERRUPT = $00000002;
 | 
Event will be dispatched by interrupt handler (If applicable). Caution: Events called by the interrupt handler must obey interrupt rules with regard to locks, memory allocation and latency. | 
 RANDOM_*  RANDOM_NAME_PREFIX = 'Random';
 | 
Name prefix for Random Devices | 
 RANDOM_TYPE_*  RANDOM_TYPE_NONE = 0;
 | 
|
 RANDOM_TYPE_HARDWARE = 1;
 | 
|
 RANDOM_TYPE_SOFTWARE = 2;
 | 
|
 RANDOM_TYPE_MAX = 2;
 | 
|
 
 RANDOM_STATE_*  RANDOM_STATE_DISABLED = 0;
 | 
|
 RANDOM_STATE_ENABLED = 1;
 | 
|
 RANDOM_STATE_MAX = 1;
 | 
|
 RANDOM_FLAG_*  RANDOM_FLAG_NONE = $00000000;
 | 
 
 MAILBOX_*  MAILBOX_NAME_PREFIX = 'Mailbox';
 | 
Name prefix for Mailbox Devices | 
 
 MAILBOX_TYPE_*  MAILBOX_TYPE_NONE = 0;
 | 
|
 MAILBOX_TYPE_GPU = 1;
 | 
|
 MAILBOX_TYPE_LOCAL = 2;
 | 
|
 MAILBOX_TYPE_MAX = 2;
 | 
|
 
 MAILBOX_STATE_*  MAILBOX_STATE_DISABLED = 0;
 | 
|
 MAILBOX_STATE_ENABLED = 1;
 | 
|
 MAILBOX_STATE_MAX = 1;
 | 
|
 
 MAILBOX_FLAG_*  MAILBOX_FLAG_NONE = $00000000;
 | 
 
 WATCHDOG_*  WATCHDOG_NAME_PREFIX = 'Watchdog';
 | 
Name prefix for Watchdog Devices | 
 
 WATCHDOG_TYPE_*  WATCHDOG_TYPE_NONE = 0;
 | 
|
 WATCHDOG_TYPE_HARDWARE = 1;
 | 
|
 WATCHDOG_TYPE_MAX = 1;
 | 
|
 
 WATCHDOG_STATE_*  WATCHDOG_STATE_DISABLED = 0;
 | 
|
 WATCHDOG_STATE_ENABLED = 1;
 | 
|
 WATCHDOG_STATE_MAX = 1;
 | 
|
 WATCHDOG_FLAG_*  WATCHDOG_FLAG_NONE = $00000000;
 | 
   
Type definitions
Device enumeration callback
 TDeviceEnumerate = function(Device:PDevice; Data:Pointer):LongWord;
 | 
Device notification callback
 TDeviceNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
 | 
Device entry
PDevice = ^TDevice;
TDevice = record
| Device Properties | |
 Signature:LongWord;
 | 
Signature for entry validation | 
 DeviceId:LongWord;
 | 
Unique Id of this Device in the Device table | 
 DeviceState:LongWord;
 | 
Device state (eg Registered/Unregistered) | 
 DeviceName:array[0..DEVICE_NAME_LENGTH - 1] of Char;
 | 
The name of the Device (eg Keyboard0, Storage0 or Network0 etc) | 
 DeviceClass:LongWord;
 | 
The class of this Device (eg DEVICE_CLASS_USB, DEVICE_CLASS_NETWORK, DEVICE_CLASS_STORAGE etc) | 
 DeviceBus:LongWord;
 | 
The Bus type for the Device (eg DEVICE_BUS_USB) | 
 DeviceType:LongWord;
 | 
A class specific Device type (eg KEYBOARD_TYPE_USB, MOUSE_TYPE_USB, NETWORK_TYPE_ETHERNET etc) | 
 DeviceFlags:LongWord;
 | 
The class specific Device flags | 
 DeviceData:Pointer;
 | 
A pointer to a class specific Device interface (eg PUSBDevice, PNetworkDevice or PStorageDevice etc) (Used by Drivers) | 
 DeviceDescription:array[0..DEVICE_DESC_LENGTH - 1] of Char;
 | 
A description of the Device (eg BCM2835 PL011 UART) | 
| Internal Properties | |
 Prev:PDevice;
 | 
Previous entry in Device table | 
 Next:PDevice;
 | 
Next entry in Device table | 
Device firmware
PDeviceFirmware = ^TDeviceFirmware;
TDeviceFirmware = record
 DeviceClass:LongWord;
 | 
The Device class supported by this firmware (or DEVICE_CLASS_ANY for all devices) | 
 Name:array[0..FIRMWARE_NAME_LENGTH - 1] of Char;
 | 
The device specific name of the firmware which may be a filename, a device model, id or type | 
 Size:LongWord;
 | 
For block (memory) based firmware, the size passed to Create or 0 for other firmware types | 
 Buffer:Pointer;
 | 
For block (memory) based firmware, the buffer passed to Create or nil for other firmware types | 
 Handles:PFirmwareHandle;
 | 
List of currently open handles for this firmware | 
 Handler:TDeviceFirmwareHandler;
 | 
The device specific callback for the handler which provides this firmware | 
| Internal Properties | |
 Prev:PDeviceFirmware;
 | 
Previous entry in Device firmware table} | 
 Next:PDeviceFirmware;
 | 
Next entry in Device firmware table | 
Device firmware handler
 TDeviceFirmwareHandler = function(Firmware:PDeviceFirmware; Action:LongWord; var Handle:THandle; var Buffer:Pointer; var Value:LongWord):LongWord;
 | 
Firmware handle
PFirmwareHandle = ^TFirmwareHandle;
TFirmwareHandle = record
 Handle:THandle;
 | 
|
 Next:PFirmwareHandle;
 | 
Notifier entry
PNotifier = ^TNotifier;
TNotifier = record
| Notifier Properties | |
 Signature:LongWord;
 | 
Signature for entry validation | 
 NotifierState:LongWord;
 | 
Notifier state (eg Registered/Unregistered) | 
 NotifierFlags:LongWord;
 | 
Notifier flags (eg NOTIFIER_FLAG_WORKER) | 
 Device:PDevice;
 | 
The Device to notify on (or nil for all devices) | 
 DeviceClass:LongWord;
 | 
The Device class to notify on (or DEVICE_CLASS_ANY for all devices) | 
 Callback:TDeviceNotification;
 | 
The callback for device notifications | 
 Data:Pointer;
 | 
A pointer to callback specific data to be passed with notifications (Optional) | 
 Notification:LongWord;
 | 
The mask of events to notify on (eg DEVICE_NOTIFICATION_REGISTER etc) | 
| Internal Properties | |
 Prev:PNotifier;
 | 
Previous entry in Notifier table | 
 Next:PNotifier;
 | 
Next entry in Notifier table | 
Notifier task
PNotifierTask = ^TNotifierTask;
TNotifierTask = record
 Device:PDevice;
 | 
|
 Callback:TDeviceNotification;
 | 
|
 Data:Pointer;
 | 
|
 Notification:LongWord;
 | 
|
 Next:PNotifierTask;
 | 
Notifier retry
PNotifierRetry = ^TNotifierRetry;
TNotifierRetry = record
 Device:PDevice;
 | 
|
 Notification:LongWord;
 | 
Driver enumeration callback
 TDriverEnumerate = function(Driver:PDriver; Data:Pointer):LongWord;
 | 
Driver entry
PDriver = ^TDriver;
TDriver = record
| Driver Properties | |
 Signature:LongWord;
 | 
Signature for entry validation | 
 DriverId:LongWord;
 | 
Unique Id of this Driver in the Driver table | 
 DriverState:LongWord;
 | 
Driver state (eg Registered/Unregistered) | 
 DriverName:array[0..DRIVER_NAME_LENGTH - 1] of Char;
 | 
Descriptive name for the Driver (eg USB Mouse Driver) | 
 DriverClass:LongWord;
 | 
The class of this Driver (eg DRIVER_CLASS_USB etc) | 
| Internal Properties | |
 Prev:PDriver;
 | 
Previous entry in Driver table | 
 Next:PDriver;
 | 
Next entry in Driver table | 
Host enumeration callback
 THostEnumerate = function(Host:PHost; Data:Pointer):LongWord;
 | 
Host entry
PHost = ^THost;
THost = record
| Host Properties | |
 Signature:LongWord;
 | 
Signature for entry validation | 
 HostId:LongWord;
 | 
Unique Id of this Host in the Host table | 
 HostState:LongWord;
 | 
Host state (eg Registered/Unregistered) | 
 HostName:array[0..HOST_NAME_LENGTH - 1] of Char;
 | 
Descriptive name for the Host (eg DWC OTG Host) | 
 HostClass:LongWord;
 | 
The class of this Host (eg HOST_CLASS_USB etc) | 
| Internal Properties | |
 Prev:PHost;
 | 
Previous entry in Host table | 
 Next:PHost;
 | 
Next entry in Host table | 
Clock properties
PClockProperties = ^TClockProperties;
TClockProperties = record
 Flags:LongWord;
 | 
Device flags (eg CLOCK_FLAG_WRITABLE) | 
 Rate:LongWord;
 | 
Device current clock rate (Hz) | 
 MinRate:LongWord;
 | 
Device minimum clock rate (Hz) | 
 MaxRate:LongWord;
 | 
Device maximum clock rate (Hz) | 
Clock enumeration callback
 TClockEnumerate = function(Clock:PClockDevice; Data:Pointer):LongWord;
 | 
Clock notification callback
 TClockNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
 | 
Clock device start
 TClockDeviceStart = function(Clock:PClockDevice):LongWord;
 | 
Clock device stop
 TClockDeviceStop = function(Clock:PClockDevice):LongWord;
 | 
Clock device read
 TClockDeviceRead = function(Clock:PClockDevice):LongWord;
 | 
Clock device read 64
 TClockDeviceRead64 = function(Clock:PClockDevice):Int64;
 | 
Clock device write 64
 TClockDeviceWrite64 = function(Clock:PClockDevice; const Value:Int64):LongWord;
 | 
Clock device get rate
 TClockDeviceGetRate = function(Clock:PClockDevice):LongWord;
 | 
Clock device set rate
 TClockDeviceSetRate = function(Clock:PClockDevice; Rate:LongWord):LongWord;
 | 
Clock device get properties
 TClockDeviceGetProperties = function(Clock:PClockDevice; Properties:PClockProperties):LongWord;
 | 
Clock device
PClockDevice = ^TClockDevice;
TClockDevice = record
| Device Properties | |
 Device:TDevice;
 | 
The Device entry for this Clock device | 
| Clock Properties | |
 ClockId:LongWord;
 | 
Unique Id of this Clock device in the Clock device table | 
 ClockState:LongWord;
 | 
Clock device state (eg CLOCK_STATE_ENABLED) | 
 DeviceStart:TClockDeviceStart;
 | 
A device specific DeviceStart method implementing a standard clock device interface (Or nil if the default method is suitable) | 
 DeviceStop:TClockDeviceStop;
 | 
A device specific DeviceStop method implementing a standard clock device interface (Or nil if the default method is suitable) | 
 DeviceRead:TClockDeviceRead;
 | 
A device specific DeviceRead method implementing a standard clock device interface (Or nil if the default method is suitable) | 
 DeviceRead64:TClockDeviceRead64;
 | 
A device specific DeviceRead64 method implementing a standard clock device interface (Mandatory) | 
 DeviceWrite64:TClockDeviceWrite64;
 | 
A device specific DeviceWrite64 method implementing a standard clock device interface (Optional) | 
 DeviceGetRate:TClockDeviceGetRate;
 | 
A device specific DeviceGetRate method implementing a standard clock device interface (Or nil if the default method is suitable) | 
 DeviceSetRate:TClockDeviceSetRate;
 | 
A device specific DeviceSetRate method implementing a standard clock device interface (Optional) | 
 DeviceGetProperties:TClockDeviceGetProperties;
 | 
A device specific DeviceGetProperties method implementing a standard clock device interface (Or nil if the default method is suitable) | 
| Statistics Properties | |
 ReadCount:LongWord;
 | 
|
| Driver Properties | |
 Lock:TMutexHandle;
 | 
Device lock | 
 Address:Pointer;
 | 
Device register base address | 
 Rate:LongWord;
 | 
Device rate (Hz) | 
 MinRate:LongWord;
 | 
Device minimum rate (Hz) | 
 MaxRate:LongWord;
 | 
Device maximum rate (Hz) | 
| Internal Properties | |
 Prev:PClockDevice;
 | 
Previous entry in Clock device table | 
 Next:PClockDevice;
 | 
Next entry in Clock device table | 
Timer callback
 TTimerCallback = TCounterCallback;
 | 
Counter callback from Platform | 
Timer properties
PTimerProperties = ^TTimerProperties;
TTimerProperties = record
 Flags:LongWord;
 | 
Device flags (eg TIMER_FLAG_WRAPPING) | 
 Bits:LongWord;
 | 
Number of valid bits in timer read (eg 32 or 64) | 
 MinRate:LongWord;
 | 
Device minimum clock rate (Hz) | 
 MaxRate:LongWord;
 | 
Device maximum clock rate (Hz) | 
 MinInterval:LongWord;
 | 
Device minimum interval (Ticks) | 
 MaxInterval:LongWord;
 | 
Device maximum interval (Ticks) | 
Timer waiter
PTimerWaiter = ^TTimerWaiter;
TTimerWaiter = record
| Note: TTimerEvent is used already by the Threads unit | |
 Timer:PTimerDevice;
 | 
Timer device this waiter belongs to | 
 Callback:TTimerCallback;
 | 
Callback function to call when event occurs | 
 Data:Pointer;
 | 
Pointer to pass to the callback function when event occurs | 
 Prev:PTimerWaiter;
 | 
Previous event in the list | 
 Next:PTimerWaiter;
 | 
Next event in the list | 
Timer enumeration callback
 TTimerEnumerate = function(Timer:PTimerDevice; Data:Pointer):LongWord;
 | 
Timer notification callback
 TTimerNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
 | 
TImer device start
 TTimerDeviceStart = function(Timer:PTimerDevice):LongWord;
 | 
Timer device stop
 TTimerDeviceStop = function(Timer:PTimerDevice):LongWord;
 | 
Timer device read
 TTimerDeviceRead = function(Timer:PTimerDevice):LongWord;
 | 
Timer device read 64
 TTimerDeviceRead64 = function(Timer:PTimerDevice):Int64;
 | 
Timer device wait
 TTimerDeviceWait = function(Timer:PTimerDevice):LongWord;
 | 
Timer device event
 TTimerDeviceEvent = function(Timer:PTimerDevice; Flags:LongWord; Callback:TTimerCallback; Data:Pointer):LongWord;
 | 
Timer device cancel
 TTimerDeviceCancel = function(Timer:PTimerDevice):LongWord;
 | 
Timer device get rate
 TTimerDeviceGetRate = function(Timer:PTimerDevice):LongWord;
 | 
Timer device set rate
 TTimerDeviceSetRate = function(Timer:PTimerDevice; Rate:LongWord):LongWord;
 | 
Timer device get interval
 TTimerDeviceGetInterval = function(Timer:PTimerDevice):LongWord;
 | 
Timer device set interval
 TTimerDeviceSetInterval = function(Timer:PTimerDevice; Interval:LongWord):LongWord;
 | 
Timer device get properties
 TTimerDeviceGetProperties = function(Timer:PTimerDevice; Properties:PTimerProperties):LongWord;
 | 
Timer device
PTimerDevice = ^TTimerDevice;
TTimerDevice = record
| Note: Forward declared for TimerWaiter | |
| Device Properties | |
 Device:TDevice;
 | 
The Device entry for this Timer device | 
| Timer Properties | |
 TimerId:LongWord;
 | 
Unique Id of this Timer device in the Timer device table | 
 TimerState:LongWord;
 | 
Timer device state (eg TIMER_STATE_ENABLED) | 
 DeviceStart:TTimerDeviceStart;
 | 
A device specific DeviceStart method implementing a standard timer device interface (Mandatory) | 
 DeviceStop:TTimerDeviceStop;
 | 
A device specific DeviceStop method implementing a standard timer device interface (Mandatory) | 
 DeviceRead:TTimerDeviceRead;
 | 
A device specific DeviceRead method implementing a standard timer device interface (One of Read or Read64 is Mandatory) | 
 DeviceRead64:TTimerDeviceRead64;
 | 
A device specific DeviceRead64 method implementing a standard timer device interface (One of Read or Read64 is Mandatory | 
 DeviceWait:TTimerDeviceWait;
 | 
A device specific DeviceWait method implementing a standard timer device interface (Or nil if the operation is not supported) | 
 DeviceEvent:TTimerDeviceEvent;
 | 
A device specific DeviceEvent method implementing a standard timer device interface (Or nil if the operation is not supported) | 
 DeviceCancel:TTimerDeviceCancel;
 | 
A device specific DeviceCancel method implementing a standard timer device interface (Or nil if the operation is not supported) | 
 DeviceGetRate:TTimerDeviceGetRate;
 | 
A device specific DeviceGetRate method implementing a standard timer device interface (Or nil if the default method is suitable) | 
 DeviceSetRate:TTimerDeviceSetRate;
 | 
A device specific DeviceSetRate method implementing a standard timer device interface (Or nil if the default method is suitable) | 
 DeviceGetInterval:TTimerDeviceGetInterval;
 | 
A device specific DeviceGetInterval method implementing a standard timer device interface (Or nil if the default method is suitable) | 
 DeviceSetInterval:TTimerDeviceSetInterval;
 | 
A device specific DeviceSetInterval method implementing a standard timer device interface (Or nil if the default method is suitable) | 
 DeviceGetProperties:TTimerDeviceGetProperties;
 | 
A device specific DeviceGetProperties method implementing a standard timer device interface (Or nil if the default method is suitable) | 
| Statistics Properties | |
 ReadCount:LongWord;
 | 
|
 WaitCount:LongWord;
 | 
|
 EventCount:LongWord;
 | 
|
| Driver Properties | |
 Lock:TMutexHandle;
 | 
Device lock | 
 Address:Pointer;
 | 
Device register base address | 
 Rate:LongWord;
 | 
Device rate (Hz) | 
 Interval:LongWord;
 | 
Device interval (Ticks) | 
 Properties:TTimerProperties;
 | 
Device properties | 
| Event Properties | |
 Flags:LongWord;
 | 
Event flags for this timer (eg TIMER_EVENT_FLAG_REPEAT) | 
 Count:Longword;
 | 
Count of threads and events waiting for this timer | 
 Event:TEventHandle;
 | 
Event for threads waiting for this timer | 
 Waiters:PTimerWaiter;
 | 
List of events waiting for this timer | 
| Internal Properties | |
 Prev:PTimerDevice;
 | 
Previous entry in Timer device table | 
 Next:PTimerDevice;
 | 
Next entry in Timer device table | 
Random enumeration callback
 TRandomEnumerate = function(Random:PRandomDevice; Data:Pointer):LongWord;
 | 
Random notification callback
 TRandomNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
 | 
Random device start
 TRandomDeviceStart = function(Random:PRandomDevice):LongWord;
 | 
Random device stop
 TRandomDeviceStop = function(Random:PRandomDevice):LongWord;
 | 
Random device seed
 TRandomDeviceSeed = function(Random:PRandomDevice; Seed:LongWord):LongWord;
 | 
Random device read byte
 TRandomDeviceReadByte = function(Random:PRandomDevice):Byte;
 | 
Random device read word
 TRandomDeviceReadWord = function(Random:PRandomDevice):Word;
 | 
Random device read long word
 TRandomDeviceReadLongWord = function(Random:PRandomDevice):LongWord;
 | 
Random device read quad word
 TRandomDeviceReadQuadWord = function(Random:PRandomDevice):Int64;
 | 
Random device read double
 TRandomDeviceReadDouble = function(Random:PRandomDevice):Double;
 | 
Random device
PRandomDevice = ^TRandomDevice;
TRandomDevice = record
| Device Properties | |
 Device:TDevice;
 | 
The Device entry for this Random device | 
| Random Properties | |
 RandomId:LongWord;
 | 
Unique Id of this Random device in the Random device table | 
 RandomState:LongWord;
 | 
Random device state (eg RANDOM_STATE_ENABLED) | 
 DeviceStart:TRandomDeviceStart;
 | 
A device specific DeviceStart method implementing a standard random device interface (Mandatory) | 
 DeviceStop:TRandomDeviceStop;
 | 
A device specific DeviceStop method implementing a standard random device interface (Or nil if the default method is suitable) | 
 DeviceSeed:TRandomDeviceSeed;
 | 
A device specific DeviceSeed method implementing a standard random device interface (Or nil if the default method is suitable) | 
 DeviceReadByte:TRandomDeviceReadByte;
 | 
A device specific DeviceReadByte method implementing a standard random device interface (Or nil if the default method is suitable) | 
 DeviceReadWord:TRandomDeviceReadWord;
 | 
A device specific DeviceReadWord method implementing a standard random device interface (Or nil if the default method is suitable) | 
 DeviceReadLongWord:TRandomDeviceReadLongWord;
 | 
A device specific DeviceReadLongWord method implementing a standard random device interface (Mandatory) | 
 DeviceReadQuadWord:TRandomDeviceReadQuadWord;
 | 
A device specific DeviceReadQuadWord method implementing a standard random device interface (Or nil if the default method is suitable) | 
 DeviceReadDouble:TRandomDeviceReadDouble;
 | 
A device specific DeviceReadDouble method implementing a standard random device interface (Or nil if the default method is suitable) | 
| Statistics Properties | |
 SeedCount:LongWord;
 | 
|
 ReadCount:LongWord;
 | 
|
| Driver Properties | |
 Lock:TMutexHandle;
 | 
Device lock | 
 Address:Pointer;
 | 
Device register base address | 
| Internal Properties | |
 Prev:PRandomDevice;
 | 
Previous entry in Random device table | 
 Next:PRandomDevice;
 | 
Next entry in Random device table | 
Mailbox enumeration callback
 TMailboxEnumerate = function(Mailbox:PMailboxDevice; Data:Pointer):LongWord;
 | 
Mailbox notification callback
 TMailboxNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
 | 
Mailbox device start
 TMailboxDeviceStart = function(Mailbox:PMailboxDevice):LongWord;
 | 
Mailbox device stop
 TMailboxDeviceStop = function(Mailbox:PMailboxDevice):LongWord;
 | 
Mailbox device receive
 TMailboxDeviceReceive = function(Mailbox:PMailboxDevice; Channel:LongWord):LongWord;
 | 
Mailbox device send
 TMailboxDeviceSend = function(Mailbox:PMailboxDevice; Channel,Data:LongWord):LongWord;
 | 
Mailbox device call
 TMailboxDeviceCall = function(Mailbox:PMailboxDevice; Channel,Data:LongWord; var Response:LongWord):LongWord;
 | 
Mailbox device get timeout
 TMailboxDeviceGetTimeout = function(Mailbox:PMailboxDevice):LongWord;
 | 
Mailbox device set timeout
 TMailboxDeviceSetTimeout = function(Mailbox:PMailboxDevice; Timeout:LongWord):LongWord;
 | 
Mailbox device
PMailboxDevice = ^TMailboxDevice;
TMailboxDevice = record
| Device Properties | |
 Device:TDevice;
 | 
The Device entry for this Mailbox device | 
| Mailbox Properties | |
 MailboxId:LongWord;
 | 
Unique Id of this Mailbox device in the Mailbox device table | 
 MailboxState:LongWord;
 | 
Mailbox device state (eg MAILBOX_STATE_ENABLED) | 
 DeviceStart:TMailboxDeviceStart;
 | 
A device specific DeviceStart method implementing a standard mailbox device interface (Or nil if the default method is suitable) | 
 DeviceStop:TMailboxDeviceStop;
 | 
A device specific DeviceStop method implementing a standard mailbox device interface (Or nil if the default method is suitable) | 
 DeviceReceive:TMailboxDeviceReceive;
 | 
A device specific DeviceReceive method implementing a standard mailbox device interface (Mandatory) | 
 DeviceSend:TMailboxDeviceSend;
 | 
A device specific DeviceSend method implementing a standard mailbox device interface (Mandatory) | 
 DeviceCall:TMailboxDeviceCall;
 | 
A device specific DeviceCall method implementing a standard mailbox device interface (Mandatory) | 
 DeviceGetTimeout:TMailboxDeviceGetTimeout;
 | 
A device specific DeviceGetTimeout method implementing a standard mailbox device interface (Or nil if the default method is suitable) | 
 DeviceSetTimeout:TMailboxDeviceSetTimeout;
 | 
A device specific DeviceSetTimeout method implementing a standard mailbox device interface (Or nil if the default method is suitable) | 
| Statistics Properties | |
 ReceiveCount:LongWord;
 | 
|
 SendCount:LongWord;
 | 
|
 CallCount:LongWord;
 | 
|
| Driver Properties | |
 Lock:TMutexHandle;
 | 
Device lock | 
 Address:Pointer;
 | 
Device register base address | 
 Timeout:LongWord;
 | 
Device timeout (Milliseconds) | 
| Internal Properties | |
 Prev:PMailboxDevice;
 | 
Previous entry in Mailbox device table | 
 Next:PMailboxDevice;
 | 
Next entry in Mailbox device table | 
Watchdog enumeration callback
 TWatchdogEnumerate = function(Watchdog:PWatchdogDevice; Data:Pointer):LongWord;
 | 
Watchdog notification callback
 TWatchdogNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
 | 
Watchdog device start
 TWatchdogDeviceStart = function(Watchdog:PWatchdogDevice):LongWord;
 | 
Watchdog device stop
 TWatchdogDeviceStop = function(Watchdog:PWatchdogDevice):LongWord;
 | 
Watchdog device refresh
 TWatchdogDeviceRefresh = function(Watchdog:PWatchdogDevice):LongWord;
 | 
Watchdog device get remain
 TWatchdogDeviceGetRemain = function(Watchdog:PWatchdogDevice):LongWord;
 | 
Watchdog device get timeout
 TWatchdogDeviceGetTimeout = function(Watchdog:PWatchdogDevice):LongWord;
 | 
Watchdog device set timeout
 TWatchdogDeviceSetTimeout = function(Watchdog:PWatchdogDevice; Timeout:LongWord):LongWord;
 | 
Watchdog device
PWatchdogDevice = ^TWatchdogDevice;
TWatchdogDevice = record
| Device Properties | |
 Device:TDevice;
 | 
The Device entry for this Watchdog device | 
| Watchdog Properties | |
 WatchdogId:LongWord;
 | 
Unique Id of this Watchdog device in the Watchdog device table | 
 WatchdogState:LongWord;
 | 
Watchdog device state (eg WATCHDOG_STATE_ENABLED) | 
 DeviceStart:TWatchdogDeviceStart;
 | 
A device specific DeviceStart method implementing a standard watchdog device interface (Mandatory) | 
 DeviceStop:TWatchdogDeviceStop;
 | 
A device specific DeviceStop method implementing a standard watchdog device interface (Mandatory) | 
 DeviceRefresh:TWatchdogDeviceRefresh;
 | 
A device specific DeviceRefresh method implementing a standard watchdog device interface (Mandatory) | 
 DeviceGetRemain:TWatchdogDeviceGetRemain;
 | 
A device specific DeviceGetRemain method implementing a standard watchdog device interface (Mandatory) | 
 DeviceGetTimeout:TWatchdogDeviceGetTimeout;
 | 
A device specific DeviceGetTimeout method implementing a standard watchdog device interface (Or nil if the default method is suitable) | 
 DeviceSetTimeout:TWatchdogDeviceSetTimeout;
 | 
A device specific DeviceSetTimeout method implementing a standard watchdog device interface (Or nil if the default method is suitable) | 
| Statistics Properties | |
 StartCount:LongWord;
 | 
|
 StopCount:LongWord;
 | 
|
 RefreshCount:LongWord;
 | 
|
| Driver Properties | |
 Lock:TMutexHandle;
 | 
Device lock | 
 Address:Pointer;
 | 
Device register base address | 
 Timeout:LongWord;
 | 
Device timeout (Milliseconds) | 
| Internal Properties | |
 Prev:PWatchdogDevice;
 | 
Previous entry in Watchdog device table | 
 Next:PWatchdogDevice;
 | 
Next entry in Watchdog device table | 
Public variables
Device logging
 DEVICE_DEFAULT_LOG_LEVEL:LongWord = DEVICE_LOG_LEVEL_DEBUG;
 | 
Minimum level for Device messages. Only messages with level greater than or equal to this will be printed. | 
 DEVICE_LOG_ENABLED:Boolean;
 | 
 
Function declarations
Initialization functions
procedure DevicesInit;
| Note | Called only during system startup | 
|---|
Device functions
function DeviceCreate:PDevice;
| Return | Pointer to new Device entry or nil if device could not be created | 
|---|
function DeviceCreateEx(Size:LongWord):PDevice;
| Size | Size in bytes to allocate for new device (Including the device entry) | 
|---|---|
| Return | Pointer to new Device entry or nil if device could not be created | 
function DeviceDestroy(Device:PDevice):LongWord;
| Device | The device to destroy | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DeviceGetName(Device:PDevice):String;
| Device | The device to get the name from | 
|---|---|
| Return | The name of the device or a blank string on error | 
function DeviceSetName(Device:PDevice; const Name:String):LongWord;
| Device | The device to set the name for | 
|---|---|
| Name | The device name to set | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DeviceGetDescription(Device:PDevice):String;
| Device | The device to get the description from | 
|---|---|
| Return | The description of the device or a blank string on error | 
function DeviceSetDescription(Device:PDevice; const Description:String):LongWord;
| Device | The device to set the description for | 
|---|---|
| Description | The device description to set | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DeviceRegister(Device:PDevice):LongWord;
| Device | The device to register | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DeviceDeregister(Device:PDevice):LongWord;
| Device | The device to deregister | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DeviceFind(DeviceClass,DeviceId:LongWord):PDevice;
| DeviceClass | The class of the device to find (DEVICE_CLASS_ANY for all classes) | 
|---|---|
| DeviceId | The ID number of the device to find | 
| Return | Pointer to device entry or nil if not found | 
function DeviceFindByDeviceData(DeviceData:Pointer):PDevice;
| DeviceData | The value to match against the DeviceData property | 
|---|---|
| Return | Pointer to device entry or nil if not found | 
function DeviceFindByName(const Name:String):PDevice; inline;
| Name | The name of the device to find (eg Timer0) | 
|---|---|
| Return | Pointer to device entry or nil if not found | 
function DeviceFindByNameEx(DeviceClass:LongWord; const Name:String):PDevice;
| DeviceClass | The class of the device to find (eg DEVICE_CLASS_USB) (DEVICE_CLASS_ANY for all classes) | 
|---|---|
| Name | The name of the device to find (eg USB0) | 
| Return | Pointer to device entry or nil if not found | 
function DeviceFindByDescription(const Description:String):PDevice; inline;
| Description | The description of the device to find (eg BCM2836 ARM Timer) | 
|---|---|
| Return | Pointer to device entry or nil if not found | 
function DeviceFindByDescriptionEx(DeviceClass:LongWord; const Description:String):PDevice;
| DeviceClass | The class of the device to find (eg DEVICE_CLASS_USB) (DEVICE_CLASS_ANY for all classes) | 
|---|---|
| Description | The description of the device to find (eg BCM2836 ARM Timer) | 
| Return | Pointer to device entry or nil if not found | 
function DeviceEnumerate(DeviceClass:LongWord; Callback:TDeviceEnumerate; Data:Pointer):LongWord;
| DeviceClass | The class of device to enumerate (DEVICE_CLASS_ANY for all classes) | 
|---|---|
| Callback | The callback function to call for each device in the table | 
| Data | A private data pointer to pass to callback for each device in the table | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DeviceNotification(Device:PDevice; DeviceClass:LongWord; Callback:TDeviceNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
| Device | The device to notify changes for (Optional, pass nil for all devices) | 
|---|---|
| DeviceClass | The class of device to notify changes for (DEVICE_CLASS_ANY for all classes) | 
| Callback | The function to call when a notification event occurs | 
| Data | A private data pointer to pass to callback when a notification event occurs | 
| Notification | The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER) | 
| Flags | The flags to control the notification (eg NOTIFIER_FLAG_WORKER) | 
function DeviceFirmwareCreate(DeviceClass:LongWord; const Name:String; Buffer:Pointer; Size:LongWord):Boolean;
| DeviceClass | The class of device this firmware applies to (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for all devices) | 
|---|---|
| Buffer | A pointer to a block of memory containing the firmware to be provided to requesting devices | 
| Size | The size in bytes of the block pointed to by buffer | 
| Return | True if the new firmware entry was added or False on failure | 
| Note | Can be used by device drivers to register built in firmware as a device firmware provider. The supplied buffer can be statically or dynamically allocated but must not be freed once the device firmware has been created. | 
function DeviceFirmwareRegister(DeviceClass:LongWord; const Name:String; Handler:TDeviceFirmwareHandler):THandle;
| DeviceClass | The class of device this firmware applies to (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for all devices) | 
|---|---|
| Name | The name of the device firmware, device specific may be a filename, a device model, id or type | 
| Handler | The handler function which is to be called when a device requests this firmware | 
| Return | A handle for the new firmware handler on success or INVALID_HANDLE_VALUE on failure | 
| Note | Used by device firmware providers to register firmware for device drivers | 
function DeviceFirmwareDeregister(Handle:THandle):LongWord;
| Handle | The handle returned by Register | 
|---|---|
| Return | ERROR_SUCCESS on completion or another error code on failure | 
| Note | Used by device firmware providers to deregister firmware for device drivers | 
function DeviceFirmwareFind(DeviceClass:LongWord; const Name:String):PDeviceFirmware;
| DeviceClass | The class of device for the firmware (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for any class) | 
|---|---|
| Name | The name of the device firmware which is a device specific value such as a filename, a device model, id or type | 
| Return | A pointer to the device firmware entry which contains the details of the handler | 
| Note | Used internally to locate compatible firmware for a device firmware open request | 
function DeviceFirmwareFindByHandle(Handle:THandle):PDeviceFirmware;
| Handle | A handle to the firmware returned by Open or Acquire | 
|---|---|
| Return | A pointer to the device firmware entry which contains the details of the handler | 
| Note | Used internally to locate referenced firmware for a device firmware request | 
function DeviceFirmwareOpen(DeviceClass:LongWord; const Name:String; Timeout:LongWord; var Handle:THandle):LongWord;
| DeviceClass | The class of device for the firmware (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for any class) | 
|---|---|
| Name | The name of the device firmware which is a device specific value such as a filename, a device model, id or type | 
| Timeout | Number of milliseconds to wait for the device firmware to be ready (0 to not wait, INFINITE to wait forever) | 
| Handle | A variable to receive a handle to the firmware on return | 
| Return | ERROR_SUCCESS on completion, ERROR_NOT_FOUND if no handler can supply firmware or another error code on failure | 
| Note | A handler may return ERROR_NOT_READY if the firmware may be accepted but is not available yet | 
function DeviceFirmwareClose(Handle:THandle):LongWord;
| Handle | The handle to the firmware as returned by Open | 
|---|---|
| Return | ERROR_SUCCESS on completion, ERROR_NOT_FOUND if no handler accepts this firmware or another error code on failure | 
function DeviceFirmwareSize(Handle:THandle):LongInt;
| Handle | The handle to the firmware as returned by Open | 
|---|---|
| Return | The size of the firmware on success or -1 on failure | 
function DeviceFirmwareSeek(Handle:THandle; Position:LongInt):LongInt;
| Handle | The handle to the firmware as returned by Open | 
|---|---|
| Position | The byte position within the firmware to seek to | 
| Return | The new position within the firmware on success or -1 on failure | 
function DeviceFirmwareRead(Handle:THandle; Buffer:Pointer; Count:LongInt):LongInt;
| Handle | The handle to the firmware as returned by Open | 
|---|---|
| Buffer | A pointer to a buffer to receive the data | 
| Count | The maximum number of bytes to be read | 
| Return | The number of bytes read on success or -1 on failure | 
function DeviceFirmwareAcquire(DeviceClass:LongWord; const Name:String; Timeout:LongWord; var Handle:THandle; var Buffer:Pointer; var Size:LongWord):LongWord;
| DeviceClass | The class of device for the firmware (eg DEVICE_CLASS_NETWORK)(or DEVICE_CLASS_ANY for any class) | 
|---|---|
| Name | The name of the device firmware which is a device specific value such as a filename, a device model, id or type | 
| Timeout | Number of milliseconds to wait for the device firmware to be ready (0 to not wait, INFINITE to wait forever) | 
| Handle | A variable to receive a handle to the firmware on return | 
| Buffer | A variable to receive a pointer to the block of memory containing the firmware on return | 
| Size | A variable to receive the size of the memory block pointed to by buffer on return | 
| Return | ERROR_SUCCESS on completion, ERROR_NOT_FOUND if no handler can supply firmware or another error code on failure | 
| Note | A handler may return ERROR_NOT_READY if the firmware may be accepted but is not available yet. A handler may return ERROR_MORE_DATA if the size of the firmware is larger than can be returned in a single buffer. | 
function DeviceFirmwareRelease(Handle:THandle; Buffer:Pointer; Size:LongWord):LongWord;
| Handle | The handle to the firmware as returned by Acquire | 
|---|---|
| Buffer | The pointer to the block of memory containing the firmware as returned by Acquire | 
| Size | The size of the memory block as returned by Acquire | 
| Return | ERROR_SUCCESS on completion, ERROR_NOT_FOUND if no handler accepts this firmware or another error code on failure | 
function NotifierAllocate(Device:PDevice; DeviceClass:LongWord; Callback:TDeviceNotification; Data:Pointer; Notification,Flags:LongWord):PNotifier;
| Note | None documented | 
|---|
function NotifierRelease(Notifier:PNotifier):LongWord;
| Note | None documented | 
|---|
function NotifierFind(Device:PDevice; DeviceClass:LongWord; Callback:TDeviceNotification; Data:Pointer):PNotifier;
| Note | None documented | 
|---|
function NotifierNotify(Device:PDevice; Notification:LongWord):LongWord;
| Note | None documented | 
|---|
procedure NotifierRetry(Retry:PNotifierRetry);
| Note | None documented | 
|---|
procedure NotifierWorker(Task:PNotifierTask);
| Note | None documented | 
|---|
Driver functions
function DriverCreate:PDriver;
| Return | Pointer to new Driver entry or nil if driver could not be created | 
|---|
function DriverCreateEx(Size:LongWord):PDriver;
| Size | Size in bytes to allocate for new driver (Including the driver entry) | 
|---|---|
| Return | Pointer to new Driver entry or nil if driver could not be created | 
function DriverDestroy(Driver:PDriver):LongWord;
| Driver | The driver to destroy | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DriverGetName(Driver:PDriver):String;
| Driver | The driver to get the name from | 
|---|---|
| Return | The name of the driver or a blank string on error | 
function DriverSetName(Driver:PDriver; const Name:String):LongWord;
| Driver | The driver to set the name for | 
|---|---|
| Name | The driver name to set | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DriverRegister(Driver:PDriver):LongWord;
| Driver | The driver to register | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DriverDeregister(Driver:PDriver):LongWord;
| Driver | The driver to deregister | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function DriverFind(DriverClass,DriverId:LongWord):PDriver;
| DriverClass | The class of the driver to find (DRIVER_CLASS_ANY for all classes) | 
|---|---|
| DriverId | The ID number of the driver to find | 
| Return | Pointer to driver entry or nil if not found | 
function DriverFindByName(const Name:String):PDriver;
| Name | The name of the driver to find (eg USB Hub Driver) | 
|---|---|
| Return | Pointer to driver entry or nil if not found | 
function DriverEnumerate(DriverClass:LongWord; Callback:TDriverEnumerate; Data:Pointer):LongWord;
| DriverClass | The class of driver to enumerate (DRIVER_CLASS_ANY for all classes) | 
|---|---|
| Callback | The callback function to call for each driver in the table | 
| Data | A private data pointer to pass to callback for each driver in the table | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
Clock device functions
function ClockDeviceStart(Clock:PClockDevice):LongWord;
| Clock | The Clock device to start | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function ClockDeviceStop(Clock:PClockDevice):LongWord;
| Clock | The Clock device to stop | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function ClockDeviceRead(Clock:PClockDevice):LongWord;
| Clock | The Clock device to read from | 
|---|---|
| Return | The 32 bit counter value of the clock or 0 on failure | 
function ClockDeviceRead64(Clock:PClockDevice):Int64;
| Clock | The Clock device to read from | 
|---|---|
| Return | The 64 bit counter value of the clock or 0 on failure | 
function ClockDeviceWrite64(Clock:PClockDevice; const Value:Int64):LongWord;
| Clock | The Clock device to write to | 
|---|---|
| Value | The counter value to write | 
| Return | ERROR_SUCCESS if the counter was set or another error code on failure | 
| Note | Not all clock devices support setting the counter value, will return an error if unsupported. | 
function ClockDeviceGetRate(Clock:PClockDevice):LongWord;
| Clock | The Clock device to get the rate from | 
|---|---|
| Return | The current clock rate in Hz or 0 on failure | 
function ClockDeviceSetRate(Clock:PClockDevice; Rate:LongWord):LongWord;
| Clock | The Clock device to set the rate for | 
|---|---|
| Rate | The clock rate in Hz to set | 
| Return | ERROR_SUCCESS if the clock rate was set or another error code on failure | 
| Note | Not all clock devices support setting the clock rate, will return an error if unsupported. | 
function ClockDeviceProperties(Clock:PClockDevice; Properties:PClockProperties):LongWord; inline;
| Clock | The Clock device to get properties from | 
|---|---|
| Properties | Pointer to a TClockProperties structure to fill in | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
| Note | Replaced by ClockDeviceGetProperties for consistency | 
function ClockDeviceGetProperties(Clock:PClockDevice; Properties:PClockProperties):LongWord;
| Clock | The Clock device to get properties from | 
|---|---|
| Properties | Pointer to a TClockProperties structure to fill in | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function ClockDeviceCreate:PClockDevice;
| Return | Pointer to new Clock entry or nil if Clock could not be created | 
|---|
function ClockDeviceCreateEx(Size:LongWord):PClockDevice;
| Size | Size in bytes to allocate for new Clock (Including the Clock entry) | 
|---|---|
| Return | Pointer to new Clock entry or nil if Clock could not be created | 
function ClockDeviceDestroy(Clock:PClockDevice):LongWord;
| Clock | The clock device to destroy | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function ClockDeviceRegister(Clock:PClockDevice):LongWord;
| Clock | The clock device to register | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function ClockDeviceDeregister(Clock:PClockDevice):LongWord;
| Clock | The clock device to deregister | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function ClockDeviceFind(ClockId:LongWord):PClockDevice;
| ClockId | The ID number of the clock to find | 
|---|---|
| Return | Pointer to clock device entry or nil if not found | 
function ClockDeviceFindByName(const Name:String):PClockDevice; inline;
| Name | The name of the clock to find (eg Clock0) | 
|---|---|
| Return | Pointer to clock device entry or nil if not found | 
function ClockDeviceFindByDescription(const Description:String):PClockDevice; inline;
| Description | The description of the clock to find (eg BCM2836 ARM Timer Clock) | 
|---|---|
| Return | Pointer to clock device entry or nil if not found | 
function ClockDeviceEnumerate(Callback:TClockEnumerate; Data:Pointer):LongWord;
| Callback | The callback function to call for each clock in the table | 
|---|---|
| Data | A private data pointer to pass to callback for each clock in the table | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function ClockDeviceNotification(Clock:PClockDevice; Callback:TClockNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
| Clock | The clock device to notify changes for (Optional, pass nil for all clocks) | 
|---|---|
| Callback | The function to call when a notification event occurs | 
| Data | A private data pointer to pass to callback when a notification event occurs | 
| Notification | The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER) | 
| Flags | The flags to control the notification (eg NOTIFIER_FLAG_WORKER) | 
Timer device functions
function TimerDeviceStart(Timer:PTimerDevice):LongWord;
| Timer | The Timer device to start | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function TimerDeviceStop(Timer:PTimerDevice):LongWord;
| Timer | The Timer device to stop | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function TimerDeviceRead(Timer:PTimerDevice):LongWord;
| Timer | The Timer device to read from | 
|---|---|
| Return | The 32 bit current value of the timer or 0 on failure | 
function TimerDeviceRead64(Timer:PTimerDevice):Int64;
| Timer | The Timer device to read from | 
|---|---|
| Return | The 64 bit current value of the timer or 0 on failure | 
function TimerDeviceWait(Timer:PTimerDevice):LongWord;
| Timer | The Timer device to wait for | 
|---|---|
| Return | ERROR_SUCCESS if the interval expired or another error code on failure | 
function TimerDeviceEvent(Timer:PTimerDevice; Flags:LongWord; Callback:TTimerCallback; Data:Pointer):LongWord;
| Timer | The Timer device to schedule the callback for | 
|---|---|
| Flags | The flags to control the event (eg TIMER_EVENT_FLAG_REPEAT) | 
| Callback | The function to be called when the interval expires | 
| Data | A pointer to be passed to the function when the interval expires (Optional) | 
| Return | ERROR_SUCCESS if the callback was scheduled successfully or another error code on failure | 
function TimerDeviceCancel(Timer:PTimerDevice):LongWord;
| Timer | The Timer device to cancel the callback for | 
|---|---|
| Return | ERROR_SUCCESS if the callback was cancelled successfully or another error code on failure | 
function TimerDeviceGetRate(Timer:PTimerDevice):LongWord;
| Timer | The Timer device to get the rate from | 
|---|---|
| Return | The current clock rate in Hz or 0 on failure | 
function TimerDeviceSetRate(Timer:PTimerDevice; Rate:LongWord):LongWord;
| Timer | The Timer device to set the rate for | 
|---|---|
| Rate | The clock rate in Hz to set | 
| Return | ERROR_SUCCESS if the clock rate was set or another error code on failure | 
function TimerDeviceGetInterval(Timer:PTimerDevice):LongWord;
| Timer | The Timer device to get the interval from | 
|---|---|
| Return | The current interval in ticks or 0 on failure (or not set) | 
| Note | The tick rate is determined by the clock rate | 
function TimerDeviceSetInterval(Timer:PTimerDevice; Interval:LongWord):LongWord;
| Timer | The Timer device to set the interval for | 
|---|---|
| Interval | The interval in ticks to set | 
| Return | ERROR_SUCCESS if the interval was set or another error code on failure | 
| Note | The tick rate is determined by the clock rate | 
function TimerDeviceProperties(Timer:PTimerDevice; Properties:PTimerProperties):LongWord; inline;
| Timer | The Timer device to get properties from | 
|---|---|
| Properties | Pointer to a TTimerProperties structure to fill in | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
| Note | Replaced by TimerDeviceGetProperties for consistency | 
function TimerDeviceGetProperties(Timer:PTimerDevice; Properties:PTimerProperties):LongWord;
| Timer | The Timer device to get properties from | 
|---|---|
| Properties | Pointer to a TTimerProperties structure to fill in | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function TimerDeviceCreate:PTimerDevice;
| Return | Pointer to new Timer entry or nil if Timer could not be created | 
|---|
function TimerDeviceCreateEx(Size:LongWord):PTimerDevice;
| Size | Size in bytes to allocate for new Timer (Including the Timer entry) | 
|---|---|
| Return | Pointer to new Timer entry or nil if Timer could not be created | 
function TimerDeviceDestroy(Timer:PTimerDevice):LongWord;
| Timer | The timer device to destroy | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function TimerDeviceRegister(Timer:PTimerDevice):LongWord;
| Timer | The timer device to register | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function TimerDeviceDeregister(Timer:PTimerDevice):LongWord;
| Timer | The timer device to deregister | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function TimerDeviceFind(TimerId:LongWord):PTimerDevice;
| TimerId | The ID number of the timer to find | 
|---|---|
| Return | Pointer to timer device entry or nil if not found | 
function TimerDeviceFindByName(const Name:String):PTimerDevice; inline;
| Name | The name of the timer to find (eg Timer0) | 
|---|---|
| Return | Pointer to timer device entry or nil if not found | 
function TimerDeviceFindByDescription(const Description:String):PTimerDevice; inline;
| Description | The description of the timer to find (eg BCM2836 ARM Timer) | 
|---|---|
| Return | Pointer to timer device entry or nil if not found | 
function TimerDeviceEnumerate(Callback:TTimerEnumerate; Data:Pointer):LongWord;
| Callback | The callback function to call for each timer in the table | 
|---|---|
| Data | A private data pointer to pass to callback for each timer in the table | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function TimerDeviceNotification(Timer:PTimerDevice; Callback:TTimerNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
| Timer | The timer device to notify changes for (Optional, pass nil for all timers) | 
|---|---|
| Callback | The function to call when a notification event occurs | 
| Data | A private data pointer to pass to callback when a notification event occurs | 
| Notification | The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER) | 
| Flags | The flags to control the notification (eg NOTIFIER_FLAG_WORKER) | 
Random device functions
function RandomDeviceStart(Random:PRandomDevice):LongWord;
| Note | None documented | 
|---|
function RandomDeviceStop(Random:PRandomDevice):LongWord;
| Note | None documented | 
|---|
function RandomDeviceSeed(Random:PRandomDevice; Seed:LongWord):LongWord;
| Note | None documented | 
|---|
function RandomDeviceReadByte(Random:PRandomDevice):Byte;
| Note | None documented | 
|---|
function RandomDeviceReadWord(Random:PRandomDevice):Word;
| Note | None documented | 
|---|
function RandomDeviceReadLongWord(Random:PRandomDevice):LongWord;
| Note | None documented | 
|---|
function RandomDeviceReadQuadWord(Random:PRandomDevice):Int64;
| Note | None documented | 
|---|
function RandomDeviceReadDouble(Random:PRandomDevice):Double;
| Note | None documented | 
|---|
function RandomDeviceReadExtended(Random:PRandomDevice):Extended; inline;
| Note | Replaced by RandomDeviceReadDouble | 
|---|
function RandomDeviceCreate:PRandomDevice;
| Return | Pointer to new Random entry or nil if Random could not be created | 
|---|
function RandomDeviceCreateEx(Size:LongWord):PRandomDevice;
| Size | Size in bytes to allocate for new Random (Including the Random entry) | 
|---|---|
| Return | Pointer to new Random entry or nil if Random could not be created | 
function RandomDeviceDestroy(Random:PRandomDevice):LongWord;
| Note | None documented | 
|---|
function RandomDeviceRegister(Random:PRandomDevice):LongWord;
| Note | None documented | 
|---|
function RandomDeviceDeregister(Random:PRandomDevice):LongWord;
| Note | None documented | 
|---|
function RandomDeviceFind(RandomId:LongWord):PRandomDevice;
| Note | None documented | 
|---|
function RandomDeviceFindByName(const Name:String):PRandomDevice; inline;
| Note | None documented | 
|---|
function RandomDeviceFindByDescription(const Description:String):PRandomDevice; inline;
| Note | None documented | 
|---|
function RandomDeviceEnumerate(Callback:TRandomEnumerate; Data:Pointer):LongWord;
| Note | None documented | 
|---|
function RandomDeviceNotification(Random:PRandomDevice; Callback:TRandomNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
| Note | None documented | 
|---|
Mailbox device functions
function MailboxDeviceStart(Mailbox:PMailboxDevice):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceStop(Mailbox:PMailboxDevice):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceReceive(Mailbox:PMailboxDevice; Channel:LongWord):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceSend(Mailbox:PMailboxDevice; Channel,Data:LongWord):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceCall(Mailbox:PMailboxDevice; Channel,Data:LongWord; var Response:LongWord):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceGetTimeout(Mailbox:PMailboxDevice):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceSetTimeout(Mailbox:PMailboxDevice; Timeout:LongWord):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceCreate:PMailboxDevice;
| Return | Pointer to new Mailbox entry or nil if Mailbox could not be created | 
|---|
function MailboxDeviceCreateEx(Size:LongWord):PMailboxDevice;
| Size | Size in bytes to allocate for new Mailbox (Including the Mailbox entry) | 
|---|---|
| Return | Pointer to new Mailbox entry or nil if Mailbox could not be created | 
function MailboxDeviceDestroy(Mailbox:PMailboxDevice):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceRegister(Mailbox:PMailboxDevice):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceDeregister(Mailbox:PMailboxDevice):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceFind(MailboxId:LongWord):PMailboxDevice;
| Note | None documented | 
|---|
function MailboxDeviceFindByName(const Name:String):PMailboxDevice; inline;
| Note | None documented | 
|---|
function MailboxDeviceFindByDescription(const Description:String):PMailboxDevice; inline;
| Note | None documented | 
|---|
function MailboxDeviceEnumerate(Callback:TMailboxEnumerate; Data:Pointer):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceNotification(Mailbox:PMailboxDevice; Callback:TMailboxNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
| Note | None documented | 
|---|
Watchdog device functions
function WatchdogDeviceStart(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceStop(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceRefresh(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceGetRemain(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceGetTimeout(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceSetTimeout(Watchdog:PWatchdogDevice; Timeout:LongWord):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceCreate:PWatchdogDevice;
| Return | Pointer to new Watchdog entry or nil if Watchdog could not be created | 
|---|
function WatchdogDeviceCreateEx(Size:LongWord):PWatchdogDevice;
| Size | Size in bytes to allocate for new Watchdog (Including the Watchdog entry) | 
|---|---|
| Return | Pointer to new Watchdog entry or nil if Watchdog could not be created | 
function WatchdogDeviceDestroy(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceRegister(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceDeregister(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceFind(WatchdogId:LongWord):PWatchdogDevice;
| Note | None documented | 
|---|
function WatchdogDeviceFindByName(const Name:String):PWatchdogDevice; inline;
| Note | None documented | 
|---|
function WatchdogDeviceFindByDescription(const Description:String):PWatchdogDevice; inline;
| Note | None documented | 
|---|
function WatchdogDeviceEnumerate(Callback:TWatchdogEnumerate; Data:Pointer):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceNotification(Watchdog:PWatchdogDevice; Callback:TWatchdogNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
| Note | None documented | 
|---|
RTL clock functions
function SysClockRead:LongWord;
| Note | None documented | 
|---|
function SysClockRead64:Int64;
| Note | None documented | 
|---|
RTL timer (counter) functions
function SysTimerAvailable:Boolean;
| Note | None documented | 
|---|
function SysTimerRead:LongWord;
| Return | The 32 bit current value of the counter or 0 on failure | 
|---|
function SysTimerRead64:Int64;
| Return | The 64 bit current value of the counter or 0 on failure | 
|---|
function SysTimerWait:LongWord;
| Return | ERROR_SUCCESS if the interval expired or another error code on failure | 
|---|
function SysTimerEvent(Callback:TTimerCallback; Data:Pointer):LongWord;
| Callback | The function to be called when the interval expires | 
|---|---|
| Data | A pointer to be pass to the function when the interval expires (Optional) | 
| Return | ERROR_SUCCESS if the callback was scheduled successfully or another error code on failure | 
function SysTimerCancel:LongWord;
| Return | ERROR_SUCCESS if the callback was cancelled successfully or another error code on failure | 
|---|
function SysTimerGetRate:LongWord;
| Return | The current clock rate in Hz or 0 on failure | 
|---|
function SysTimerSetRate(Rate:LongWord):LongWord;
| Rate | The clock rate in Hz to set | 
|---|---|
| Return | ERROR_SUCCESS if the clock rate was set or another error code on failure | 
function SysTimerGetInterval:LongWord;
| Return | The current interval in ticks or 0 on failure (or not set) | 
|---|---|
| Note | The tick rate is determined by the clock rate | 
function SysTimerSetInterval(Interval:LongWord):LongWord;
| Interval | The interval in ticks to set | 
|---|---|
| Return | ERROR_SUCCESS if the interval was set or another error code on failure | 
| Note | The tick rate is determined by the clock rate | 
RTL random functions
function SysRandomAvailable:Boolean;
| Note | None documented | 
|---|
procedure SysRandomize;
| Note | None documented | 
|---|
procedure SysRandomSeed(Seed:LongWord);
| Note | None documented | 
|---|
function SysRandomReadLongInt(Limit:LongInt):LongInt;
| Note | None documented | 
|---|
function SysRandomReadInt64(Limit:Int64):Int64;
| Note | None documented | 
|---|
function SysRandomReadDouble:Double;
| Note | None documented | 
|---|
RTL watchdog functions
function SysWatchdogAvailable:Boolean;
| Note | None documented | 
|---|
function SysWatchdogStart(Milliseconds:LongWord):LongWord;
| Note | None documented | 
|---|
function SysWatchdogStop:LongWord;
| Note | None documented | 
|---|
function SysWatchdogRefresh(Milliseconds:LongWord):LongWord;
| Note | None documented | 
|---|
Device helper functions
function DeviceGetCount:LongWord;
| Note | None documented | 
|---|
function DeviceCheck(Device:PDevice):PDevice;
| Note | None documented | 
|---|
function NotifierGetCount:LongWord;
| Note | None documented | 
|---|
function NotifierCheck(Notifier:PNotifier):PNotifier;
| Note | None documented | 
|---|
function DeviceBusToString(DeviceBus:LongWord):String;
| Note | None documented | 
|---|
function DeviceStateToString(DeviceState:LongWord):String;
| Note | None documented | 
|---|
function DeviceClassToString(DeviceClass:LongWord):String;
| Note | None documented | 
|---|
function NotificationToString(Notification:LongWord):String;
| Note | None documented | 
|---|
procedure DeviceLog(Level:LongWord; Device:PDevice; const AText:String);
| Note | None documented | 
|---|
procedure DeviceLogInfo(Device:PDevice; const AText:String); inline;
| Note | None documented | 
|---|
procedure DeviceLogWarn(Device:PDevice; const AText:String); inline;
| Note | None documented | 
|---|
procedure DeviceLogError(Device:PDevice; const AText:String); inline;
| Note | None documented | 
|---|
procedure DeviceLogDebug(Device:PDevice; const AText:String); inline;
| Note | None documented | 
|---|
Driver helper functions
function DriverGetCount:LongWord;
| Note | None documented | 
|---|
function DriverCheck(Driver:PDriver):PDriver;
| Note | None documented | 
|---|
function DriverStateToString(DriverState:LongWord):String;
| Note | None documented | 
|---|
function DriverClassToString(DriverClass:LongWord):String;
| Note | None documented | 
|---|
Clock device helper functions
function ClockDeviceGetCount:LongWord;
| Note | None documented | 
|---|
function ClockDeviceGetDefault:PClockDevice;
| Note | None documented | 
|---|
function ClockDeviceSetDefault(Clock:PClockDevice):LongWord;
| Note | None documented | 
|---|
function ClockDeviceCheck(Clock:PClockDevice):PClockDevice;
| Note | None documented | 
|---|
function ClockTypeToString(ClockType:LongWord):String;
| Note | None documented | 
|---|
function ClockStateToString(ClockState:LongWord):String;
| Note | None documented | 
|---|
Timer device helper functions
function TimerDeviceGetCount:LongWord;
| Note | None documented | 
|---|
function TimerDeviceGetDefault:PTimerDevice;
| Note | None documented | 
|---|
function TimerDeviceSetDefault(Timer:PTimerDevice):LongWord;
| Note | None documented | 
|---|
function TimerDeviceCheck(Timer:PTimerDevice):PTimerDevice;
| Note | None documented | 
|---|
function TimerTypeToString(TimerType:LongWord):String;
| Note | None documented | 
|---|
function TimerStateToString(TimerState:LongWord):String;
| Note | None documented | 
|---|
function TimerDeviceCreateWaiter(Timer:PTimerDevice; Callback:TTimerCallback; Data:Pointer):PTimerWaiter;
| Note |  Waiter must be registered by calling TimerDeviceRegisterWaiter.
 Caller must hold the Timer device lock.  | 
|---|
function TimerDeviceDestroyWaiter(Timer:PTimerDevice; Waiter:PTimerWaiter):LongWord;
| Note |  Waiter must be deregistered first by calling TimerDeviceDeregisterWaiter.
 Caller must hold the Timer device lock.  | 
|---|
function TimerDeviceRegisterWaiter(Timer:PTimerDevice; Waiter:PTimerWaiter):LongWord;
| Note |  Waiter must be created by calling TimerDeviceCreateWaiter.
 Caller must hold the Timer device lock.  | 
|---|
function TimerDeviceDeregisterWaiter(Timer:PTimerDevice; Waiter:PTimerWaiter):LongWord;
| Note |  Waiter must be destroyed by calling TimerDeviceDestroyWaiter.
 Caller must hold the Timer device lock.  | 
|---|
Random device helper functions
function RandomDeviceGetCount:LongWord;
| Note | None documented | 
|---|
function RandomDeviceGetDefault:PRandomDevice;
| Note | None documented | 
|---|
function RandomDeviceSetDefault(Random:PRandomDevice):LongWord;
| Note | None documented | 
|---|
function RandomDeviceCheck(Random:PRandomDevice):PRandomDevice;
| Note | None documented | 
|---|
function RandomTypeToString(RandomType:LongWord):String;
| Note | None documented | 
|---|
function RandomStateToString(RandomState:LongWord):String;
| Note | None documented | 
|---|
Mailbox device helper functions
function MailboxDeviceGetCount:LongWord;
| Note | None documented | 
|---|
function MailboxDeviceGetDefault:PMailboxDevice;
| Note | None documented | 
|---|
function MailboxDeviceSetDefault(Mailbox:PMailboxDevice):LongWord;
| Note | None documented | 
|---|
function MailboxDeviceCheck(Mailbox:PMailboxDevice):PMailboxDevice;
| Note | None documented | 
|---|
function MailboxTypeToString(MailboxType:LongWord):String;
| Note | None documented | 
|---|
function MailboxStateToString(MailboxState:LongWord):String;
| Note | None documented | 
|---|
Watchdog device helper functions
function WatchdogDeviceGetCount:LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceGetDefault:PWatchdogDevice;
| Note | None documented | 
|---|
function WatchdogDeviceSetDefault(Watchdog:PWatchdogDevice):LongWord;
| Note | None documented | 
|---|
function WatchdogDeviceCheck(Watchdog:PWatchdogDevice):PWatchdogDevice;
| Note | None documented | 
|---|
function WatchdogTypeToString(WatchdogType:LongWord):String;
| Note | None documented | 
|---|
function WatchdogStateToString(WatchdogState:LongWord):String;
| Note | None documented | 
|---|
Return to Unit Reference