Difference between revisions of "Unit Storage"
From Ultibo.org
								
												
				| (24 intermediate revisions by the same user not shown) | |||
| Line 5: | Line 5: | ||
----  | ----  | ||
| − | '''Storage   | + | '''Ultibo Storage Interface unit'''  | 
| − | This unit provides   | + | This unit provides the generic Storage device interface used by all storage drivers.  | 
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
=== 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;">'''Storage specific constants''' <code> STORAGE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>STORAGE_NAME_PREFIX = 'Storage';</code>  | ||
| + | | Name prefix for Storage Devices  | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>STORAGE_STATUS_TIMER_INTERVAL = 1000;</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;">'''Storage device type''' <code> STORAGE_TYPE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>STORAGE_TYPE_NONE = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>STORAGE_TYPE_HDD = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_TYPE_FDD = 2;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_TYPE_CDROM = 3;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_TYPE_OPTICAL = 4;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_TYPE_TAPE = 5;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_TYPE_REMOVABLE = 6;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>STORAGE_TYPE_MAX = 6;</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;">'''Storage device state''' <code> STORAGE_STATE_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>STORAGE_STATE_EJECTED = 0;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>STORAGE_STATE_EJECTING = 1;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_STATE_INSERTING = 2;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_STATE_INSERTED = 3;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|   | ||
| + | |-  | ||
| + | | <code>STORAGE_STATE_MAX = 3;</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;">'''Storage device flag''' <code> STORAGE_FLAG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_NONE = $00000000;</code>  | ||
| + | | style="width: 50%;"|   | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_REMOVABLE = $00000001;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_LBA48 = $00000002;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_NOT_READY = $00000004;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_NO_MEDIA = $00000008;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_READ_ONLY = $00000010;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_WRITE_ONLY = $00000020;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_ERASEABLE = $00000040;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_LOCKABLE = $00000080;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_LOCKED = $00000100;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_EJECTABLE = $00000200;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>STORAGE_FLAG_CHANGABLE = $00000400;</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;">'''Storage device control code''' <code> STORAGE_CONTROL_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_TEST_READY = 1;</code>  | ||
| + | | Test Unit Ready  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_RESET = 2;</code>  | ||
| + | | Reset Device  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_TEST_MEDIA = 3;</code>  | ||
| + | | Test No Media  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_LOCK = 4;</code>  | ||
| + | | Lock Media  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_UNLOCK = 5;</code>  | ||
| + | | Unlock Media  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_EJECT = 6;</code>  | ||
| + | | Eject Media  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_TEST_LOCKED = 7;</code>  | ||
| + | | Test Media Locked  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_TEST_CHANGED = 8;</code>  | ||
| + | | Test Media Changed  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_GET_VENDORID = 9;</code>  | ||
| + | | Get Vendor Id  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_GET_PRODUCTID = 10;</code>  | ||
| + | | Get Product Id  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_GET_SERIAL = 11;</code>  | ||
| + | | Get Serial No  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_GET_REVISION = 12;</code>  | ||
| + | | Get Revision No  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_GET_PRODUCT = 13;</code>  | ||
| + | | Get Product Name  | ||
| + | |-  | ||
| + | | <code>STORAGE_CONTROL_GET_MANUFACTURER = 14;</code>  | ||
| + | | Get Manufacturer 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;">'''Storage logging''' <code> STORAGE_LOG_* </code></div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | | <code>STORAGE_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG;</code>  | ||
| + | | Storage debugging messages  | ||
| + | |-  | ||
| + | | <code>STORAGE_LOG_LEVEL_INFO = LOG_LEVEL_INFO;</code>  | ||
| + | | Storage informational messages, such as a device being attached or detached  | ||
| + | |-  | ||
| + | | <code>STORAGE_LOG_LEVEL_WARN = LOG_LEVEL_WARN;</code>  | ||
| + | | Storage warning messages  | ||
| + | |-  | ||
| + | | <code>STORAGE_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;</code>  | ||
| + | | Storage error messages  | ||
| + | |-  | ||
| + | | <code>STORAGE_LOG_LEVEL_NONE = LOG_LEVEL_NONE;</code>  | ||
| + | | No Storage messages  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>  | ||
| + | <br />  | ||
=== Type definitions ===  | === Type definitions ===  | ||
----  | ----  | ||
| − | ''  | + | |
| + | '''Storage enumeration callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TStorageEnumerate = function(Storage:PStorageDevice; Data:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Storage notification callback'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TStorageNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Storage device read'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TStorageDeviceRead = function(Storage:PStorageDevice; const Start,Count:Int64; Buffer:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Storage device write'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TStorageDeviceWrite = function(Storage:PStorageDevice; const Start,Count:Int64; Buffer:Pointer):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Storage device erase'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TStorageDeviceErase = function(Storage:PStorageDevice; const Start,Count:Int64):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | |||
| + | '''Storage device control'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>TStorageDeviceControl = function(Storage:PStorageDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}   | ||
| + | |||
| + | '''Storage device'''  | ||
| + | |||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">  | ||
| + | <code>PStorageDevice = ^TStorageDevice;</code>  | ||
| + | |||
| + | <code>TStorageDevice = 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 Storage  | ||
| + | |-  | ||
| + | |colspan="2"|''Storage Properties''  | ||
| + | |-  | ||
| + | | <code>StorageId:LongWord;</code>  | ||
| + | | Unique Id of this Storage in the Storage table  | ||
| + | |-  | ||
| + | | <code>StorageState:LongWord;</code>  | ||
| + | | Storage state (eg STORAGE_STATE_INSERTED)  | ||
| + | |-  | ||
| + | | <code>DeviceRead:TStorageDeviceRead;</code>  | ||
| + | | A Device specific DeviceRead method implementing a standard Storage device interface  | ||
| + | |-  | ||
| + | | <code>DeviceWrite:TStorageDeviceWrite;</code>  | ||
| + | | A Device specific DeviceWrite method implementing a standard Storage device interface  | ||
| + | |-  | ||
| + | | <code>DeviceErase:TStorageDeviceErase;</code>  | ||
| + | | A Device specific DeviceErase method implementing a standard Storage device interface  | ||
| + | |-  | ||
| + | | <code>DeviceControl:TStorageDeviceControl;</code>  | ||
| + | | A Device specific DeviceControl method implementing a standard Storage device interface  | ||
| + | |-  | ||
| + | |colspan="2"|''Driver Properties''  | ||
| + | |-  | ||
| + | | <code>Lock:TMutexHandle;</code>  | ||
| + | | Storage lock  | ||
| + | |-  | ||
| + | | <code>TargetID:LongWord;</code>  | ||
| + | | SCSI Id  | ||
| + | |-  | ||
| + | | <code>TargetLUN:LongWord;</code>  | ||
| + | | LUN  | ||
| + | |-  | ||
| + | | <code>BlockSize:LongWord;</code>  | ||
| + | | Block Size  | ||
| + | |-  | ||
| + | | <code>BlockCount:Int64;</code>  | ||
| + | | Number of Blocks  | ||
| + | |-  | ||
| + | | <code>BlockShift:LongWord;</code>  | ||
| + | | Shift Count for Blocks to Bytes conversion (eg 9 for 512 byte blocks)  | ||
| + | |-  | ||
| + | | <code>Vendor:PChar;</code>  | ||
| + | | ATA Model, SCSI Vendor  | ||
| + | |-  | ||
| + | | <code>Product:PChar;</code>  | ||
| + | | ATA Serial No, SCSI Product  | ||
| + | |-  | ||
| + | | <code>Revision:PChar;</code>  | ||
| + | | Firmware Revision  | ||
| + | |-  | ||
| + | | <code>StatusTimer:TTimerHandle;</code>  | ||
| + | | Timer for status change detection  | ||
| + | |-  | ||
| + | |colspan="2"|''Statistics Properties''  | ||
| + | |-  | ||
| + | | <code>ReadCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>ReadErrors:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>WriteCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>WriteErrors:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>EraseCount:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | | <code>EraseErrors:LongWord;</code>  | ||
| + | |    | ||
| + | |-  | ||
| + | |colspan="2"|''Internal Properties''   | ||
| + | |-  | ||
| + | | <code>Prev:PStorageDevice;</code>  | ||
| + | | Previous entry in Storage table  | ||
| + | |-  | ||
| + | | <code>Next:PStorageDevice;</code>  | ||
| + | | Next entry in Storage table  | ||
| + | |-  | ||
| + | |}  | ||
| + | </div></div>    | ||
| + | <br />  | ||
=== Public variables ===  | === Public variables ===  | ||
----  | ----  | ||
| − | ''  | + | |
| + | '''Storage logging'''  | ||
| + | |||
| + | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"  | ||
| + | |-  | ||
| + | | <code>STORAGE_DEFAULT_LOG_LEVEL:LongWord = STORAGE_LOG_LEVEL_DEBUG;</code>  | ||
| + | | style="width: 40%;"|Minimum level for Storage 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>STORAGE_LOG_ENABLED:Boolean;</code>  | ||
| + | | style="width: 40%;"|  | ||
| + | |-  | ||
| + | |}  | ||
| + | <br />  | ||
=== Function declarations ===  | === Function declarations ===  | ||
| Line 44: | Line 394: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 59: | Line 409: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 71: | Line 421: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 83: | Line 433: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 90: | Line 440: | ||
<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 StorageDeviceControl(Storage:PStorageDevice; Request:Integer; Argument1:  | + | <pre style="border: 0; padding-bottom:0px;">function StorageDeviceControl(Storage:PStorageDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):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  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 107: | Line 457: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Storage  | 
| The storage to set the state for  | | The storage to set the state for  | ||
|-  | |-  | ||
| − | !   | + | ! State  | 
| The new state to set and notify  | | The new state to set and notify  | ||
|-  | |-  | ||
| − | !  | + | ! Return  | 
| ERROR_SUCCESS if completed or another error code on failure  | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
| Line 125: | Line 475: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Storage  | 
| The storage to start status monitoring for  | | The storage to start status monitoring for  | ||
|-  | |-  | ||
| − | !   | + | ! Interval  | 
| The status monitoring interval in milliseconds  | | The status monitoring interval in milliseconds  | ||
|-  | |-  | ||
| − | !  | + | ! Return  | 
| ERROR_SUCCESS if completed or another error code on failure  | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
| Line 143: | Line 493: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Storage  | 
| The storage to stop status monitoring for  | | The storage to stop status monitoring for  | ||
|-  | |-  | ||
| − | !  | + | ! Return  | 
| ERROR_SUCCESS if completed or another error code on failure  | | ERROR_SUCCESS if completed or another error code on failure  | ||
|-  | |-  | ||
| Line 158: | Line 508: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Return  | 
| Pointer to new Storage entry or nil if storage could not be created  | | Pointer to new Storage entry or nil if storage could not be created  | ||
|-  | |-  | ||
| Line 170: | Line 520: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Size  | 
| Size in bytes to allocate for new storage (Including the storage entry)  | | Size in bytes to allocate for new storage (Including the storage entry)  | ||
|-  | |-  | ||
| − | !  | + | ! Return  | 
| Pointer to new Storage entry or nil if storage could not be created  | | Pointer to new Storage entry or nil if storage could not be created  | ||
|-  | |-  | ||
| Line 185: | Line 535: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 197: | Line 547: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 209: | Line 559: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 221: | Line 571: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| 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 StorageDeviceFindByDevice(Device:PDevice):PStorageDevice;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Find a Storage device by the matching DeviceData property</div>  | ||
| + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">  | ||
| + | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
| + | |-  | ||
| + | ! Device  | ||
| + | | The device entry to match with the DeviceData value  | ||
| + | |-  | ||
| + | ! Return  | ||
| + | | The Storage device matched or nil if none found  | ||
|-  | |-  | ||
|}  | |}  | ||
| Line 233: | Line 598: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 245: | Line 610: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 257: | Line 622: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 269: | Line 634: | ||
{| class="wikitable" style="font-size: 14px; background: white;"  | {| class="wikitable" style="font-size: 14px; background: white;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 276: | Line 641: | ||
<br />  | <br />  | ||
| − | '''  | + | '''Storage helper 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;">function   | + | <pre style="border: 0; padding-bottom:0px;">function StorageGetCount:LongWord;</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current storage count</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  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 291: | Line 656: | ||
<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 StorageDeviceCheck(Storage:PStorageDevice):PStorageDevice;</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Storage is in the storage 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;"  | ||
|-  | |-  | ||
| − | !   | + | ! Note  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 303: | Line 668: | ||
<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 StorageDeviceTypeToString(StorageType:LongWord):String;</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  | 
| − | |   | + | | None documented  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 315: | Line 680: | ||
<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 StorageDeviceStateToString(StorageState:LongWord):String;</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <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  | 
| − | |   | + | | 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 StorageDeviceStateToNotification(State:LongWord):LongWord;</pre>  | ||
| + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a Storage state value into the notification code for device notifications</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 333: | Line 704: | ||
<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;">  | + | <pre style="border: 0; padding-bottom:0px;">procedure StorageLog(Level:LongWord; Storage:PStorageDevice; const AText:String);</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <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  | 
| − | |   | + | | 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 StorageLogInfo(Storage:PStorageDevice; 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  | 
|-  | |-  | ||
|}  | |}  | ||
| Line 351: | Line 728: | ||
<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;">procedure   | + | <pre style="border: 0; padding-bottom:0px;">procedure StorageLogWarn(Storage:PStorageDevice; const AText:String); inline;</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <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  | 
| − | + | | None documented  | |
| − | + | ||
| − | + | ||
| − | |   | + | |
|-  | |-  | ||
|}  | |}  | ||
| Line 366: | Line 740: | ||
<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;">procedure   | + | <pre style="border: 0; padding-bottom:0px;">procedure StorageLogError(Storage:PStorageDevice; const AText:String); inline;</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <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  | 
| − | + | | None documented  | |
| − | + | ||
| − | + | ||
| − | |   | + | |
|-  | |-  | ||
|}  | |}  | ||
| Line 381: | Line 752: | ||
<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;">procedure   | + | <pre style="border: 0; padding-bottom:0px;">procedure StorageLogDebug(Storage:PStorageDevice; const AText:String); inline;</pre>  | 
| − | <div style="font-size: 14px; padding-left: 12px;">'''Description:'''   | + | <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  | 
| − | |   | + | | 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 StorageStatusTimer(Storage:PStorageDevice);</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  | 
|-  | |-  | ||
|}  | |}  | ||
Latest revision as of 03:24, 29 March 2024
Return to Unit Reference
Description
Ultibo Storage Interface unit
This unit provides the generic Storage device interface used by all storage drivers.
Constants
Storage specific constants 
 STORAGE_*  STORAGE_NAME_PREFIX = 'Storage';
 | 
Name prefix for Storage Devices | 
 STORAGE_STATUS_TIMER_INTERVAL = 1000;
 | 
|
Storage device type 
 STORAGE_TYPE_*  STORAGE_TYPE_NONE = 0;
 | 
|
 STORAGE_TYPE_HDD = 1;
 | 
|
 STORAGE_TYPE_FDD = 2;
 | 
|
 STORAGE_TYPE_CDROM = 3;
 | 
|
 STORAGE_TYPE_OPTICAL = 4;
 | 
|
 STORAGE_TYPE_TAPE = 5;
 | 
|
 STORAGE_TYPE_REMOVABLE = 6;
 | 
|
 STORAGE_TYPE_MAX = 6;
 | 
|
Storage device state 
 STORAGE_STATE_*  STORAGE_STATE_EJECTED = 0;
 | 
|
 STORAGE_STATE_EJECTING = 1;
 | 
|
 STORAGE_STATE_INSERTING = 2;
 | 
|
 STORAGE_STATE_INSERTED = 3;
 | 
|
 STORAGE_STATE_MAX = 3;
 | 
|
Storage device flag 
 STORAGE_FLAG_*  STORAGE_FLAG_NONE = $00000000;
 | 
|
 STORAGE_FLAG_REMOVABLE = $00000001;
 | 
|
 STORAGE_FLAG_LBA48 = $00000002;
 | 
|
 STORAGE_FLAG_NOT_READY = $00000004;
 | 
|
 STORAGE_FLAG_NO_MEDIA = $00000008;
 | 
|
 STORAGE_FLAG_READ_ONLY = $00000010;
 | 
|
 STORAGE_FLAG_WRITE_ONLY = $00000020;
 | 
|
 STORAGE_FLAG_ERASEABLE = $00000040;
 | 
|
 STORAGE_FLAG_LOCKABLE = $00000080;
 | 
|
 STORAGE_FLAG_LOCKED = $00000100;
 | 
|
 STORAGE_FLAG_EJECTABLE = $00000200;
 | 
|
 STORAGE_FLAG_CHANGABLE = $00000400;
 | 
Storage device control code 
 STORAGE_CONTROL_*  STORAGE_CONTROL_TEST_READY = 1;
 | 
Test Unit Ready | 
 STORAGE_CONTROL_RESET = 2;
 | 
Reset Device | 
 STORAGE_CONTROL_TEST_MEDIA = 3;
 | 
Test No Media | 
 STORAGE_CONTROL_LOCK = 4;
 | 
Lock Media | 
 STORAGE_CONTROL_UNLOCK = 5;
 | 
Unlock Media | 
 STORAGE_CONTROL_EJECT = 6;
 | 
Eject Media | 
 STORAGE_CONTROL_TEST_LOCKED = 7;
 | 
Test Media Locked | 
 STORAGE_CONTROL_TEST_CHANGED = 8;
 | 
Test Media Changed | 
 STORAGE_CONTROL_GET_VENDORID = 9;
 | 
Get Vendor Id | 
 STORAGE_CONTROL_GET_PRODUCTID = 10;
 | 
Get Product Id | 
 STORAGE_CONTROL_GET_SERIAL = 11;
 | 
Get Serial No | 
 STORAGE_CONTROL_GET_REVISION = 12;
 | 
Get Revision No | 
 STORAGE_CONTROL_GET_PRODUCT = 13;
 | 
Get Product Name | 
 STORAGE_CONTROL_GET_MANUFACTURER = 14;
 | 
Get Manufacturer Name | 
 
Storage logging 
 STORAGE_LOG_*  STORAGE_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG;
 | 
Storage debugging messages | 
 STORAGE_LOG_LEVEL_INFO = LOG_LEVEL_INFO;
 | 
Storage informational messages, such as a device being attached or detached | 
 STORAGE_LOG_LEVEL_WARN = LOG_LEVEL_WARN;
 | 
Storage warning messages | 
 STORAGE_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;
 | 
Storage error messages | 
 STORAGE_LOG_LEVEL_NONE = LOG_LEVEL_NONE;
 | 
No Storage messages | 
Type definitions
Storage enumeration callback
 TStorageEnumerate = function(Storage:PStorageDevice; Data:Pointer):LongWord;
 | 
Storage notification callback
 TStorageNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
 | 
Storage device read
 TStorageDeviceRead = function(Storage:PStorageDevice; const Start,Count:Int64; Buffer:Pointer):LongWord;
 | 
Storage device write
 TStorageDeviceWrite = function(Storage:PStorageDevice; const Start,Count:Int64; Buffer:Pointer):LongWord;
 | 
Storage device erase
 TStorageDeviceErase = function(Storage:PStorageDevice; const Start,Count:Int64):LongWord;
 | 
Storage device control
 TStorageDeviceControl = function(Storage:PStorageDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;
 | 
Storage device
PStorageDevice = ^TStorageDevice;
TStorageDevice = record
| Device Properties | |
 Device:TDevice;
 | 
The Device entry for this Storage | 
| Storage Properties | |
 StorageId:LongWord;
 | 
Unique Id of this Storage in the Storage table | 
 StorageState:LongWord;
 | 
Storage state (eg STORAGE_STATE_INSERTED) | 
 DeviceRead:TStorageDeviceRead;
 | 
A Device specific DeviceRead method implementing a standard Storage device interface | 
 DeviceWrite:TStorageDeviceWrite;
 | 
A Device specific DeviceWrite method implementing a standard Storage device interface | 
 DeviceErase:TStorageDeviceErase;
 | 
A Device specific DeviceErase method implementing a standard Storage device interface | 
 DeviceControl:TStorageDeviceControl;
 | 
A Device specific DeviceControl method implementing a standard Storage device interface | 
| Driver Properties | |
 Lock:TMutexHandle;
 | 
Storage lock | 
 TargetID:LongWord;
 | 
SCSI Id | 
 TargetLUN:LongWord;
 | 
LUN | 
 BlockSize:LongWord;
 | 
Block Size | 
 BlockCount:Int64;
 | 
Number of Blocks | 
 BlockShift:LongWord;
 | 
Shift Count for Blocks to Bytes conversion (eg 9 for 512 byte blocks) | 
 Vendor:PChar;
 | 
ATA Model, SCSI Vendor | 
 Product:PChar;
 | 
ATA Serial No, SCSI Product | 
 Revision:PChar;
 | 
Firmware Revision | 
 StatusTimer:TTimerHandle;
 | 
Timer for status change detection | 
| Statistics Properties | |
 ReadCount:LongWord;
 | 
|
 ReadErrors:LongWord;
 | 
|
 WriteCount:LongWord;
 | 
|
 WriteErrors:LongWord;
 | 
|
 EraseCount:LongWord;
 | 
|
 EraseErrors:LongWord;
 | 
|
| Internal Properties | |
 Prev:PStorageDevice;
 | 
Previous entry in Storage table | 
 Next:PStorageDevice;
 | 
Next entry in Storage table | 
Public variables
Storage logging
 STORAGE_DEFAULT_LOG_LEVEL:LongWord = STORAGE_LOG_LEVEL_DEBUG;
 | 
Minimum level for Storage messages. Only messages with level greater than or equal to this will be printed. | 
 STORAGE_LOG_ENABLED:Boolean;
 | 
Function declarations
Initialization functions
procedure StorageInit;
Description: To be documented
| Note | None documented | 
|---|
Storage functions
function StorageDeviceRead(Storage:PStorageDevice; const Start,Count:Int64; Buffer:Pointer):LongWord;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceWrite(Storage:PStorageDevice; const Start,Count:Int64; Buffer:Pointer):LongWord;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceErase(Storage:PStorageDevice; const Start,Count:Int64):LongWord;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceControl(Storage:PStorageDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceSetState(Storage:PStorageDevice; State:LongWord):LongWord;
Description: Set the state of the specified storage and send a notification
| Storage | The storage to set the state for | 
|---|---|
| State | The new state to set and notify | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function StorageDeviceStartStatus(Storage:PStorageDevice; Interval:LongWord):LongWord;
Description: Start status monitoring on the specified storage for insert/eject notifications
| Storage | The storage to start status monitoring for | 
|---|---|
| Interval | The status monitoring interval in milliseconds | 
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function StorageDeviceStopStatus(Storage:PStorageDevice):LongWord;
Description: Stop status monitoring on the specified storage for insert/eject notifications
| Storage | The storage to stop status monitoring for | 
|---|---|
| Return | ERROR_SUCCESS if completed or another error code on failure | 
function StorageDeviceCreate:PStorageDevice;
Description: Create a new Storage entry
| Return | Pointer to new Storage entry or nil if storage could not be created | 
|---|
function StorageDeviceCreateEx(Size:LongWord):PStorageDevice;
Description: Create a new Storage entry
| Size | Size in bytes to allocate for new storage (Including the storage entry) | 
|---|---|
| Return | Pointer to new Storage entry or nil if storage could not be created | 
function StorageDeviceDestroy(Storage:PStorageDevice):LongWord;
Description: Destroy an existing Storage entry
| Note | None documented | 
|---|
function StorageDeviceRegister(Storage:PStorageDevice):LongWord;
Description: Register a new Storage in the Storage table
| Note | None documented | 
|---|
function StorageDeviceDeregister(Storage:PStorageDevice):LongWord;
Description: Deregister a Storage from the Storage table
| Note | None documented | 
|---|
function StorageDeviceFind(StorageId:LongWord):PStorageDevice;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceFindByDevice(Device:PDevice):PStorageDevice;
Description: Find a Storage device by the matching DeviceData property
| Device | The device entry to match with the DeviceData value | 
|---|---|
| Return | The Storage device matched or nil if none found | 
function StorageDeviceFindByName(const Name:String):PStorageDevice; inline;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceFindByDescription(const Description:String):PStorageDevice; inline;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceEnumerate(Callback:TStorageEnumerate; Data:Pointer):LongWord;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceNotification(Storage:PStorageDevice; Callback:TStorageNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
| Note | None documented | 
|---|
Storage helper functions
function StorageGetCount:LongWord;
Description: Get the current storage count
| Note | None documented | 
|---|
function StorageDeviceCheck(Storage:PStorageDevice):PStorageDevice;
Description: Check if the supplied Storage is in the storage table
| Note | None documented | 
|---|
function StorageDeviceTypeToString(StorageType:LongWord):String;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceStateToString(StorageState:LongWord):String;
Description: To be documented
| Note | None documented | 
|---|
function StorageDeviceStateToNotification(State:LongWord):LongWord;
Description: Convert a Storage state value into the notification code for device notifications
| Note | None documented | 
|---|
procedure StorageLog(Level:LongWord; Storage:PStorageDevice; const AText:String);
Description: To be documented
| Note | None documented | 
|---|
procedure StorageLogInfo(Storage:PStorageDevice; const AText:String); inline;
Description: To be documented
| Note | None documented | 
|---|
procedure StorageLogWarn(Storage:PStorageDevice; const AText:String); inline;
Description: To be documented
| Note | None documented | 
|---|
procedure StorageLogError(Storage:PStorageDevice; const AText:String); inline;
Description: To be documented
| Note | None documented | 
|---|
procedure StorageLogDebug(Storage:PStorageDevice; const AText:String); inline;
Description: To be documented
| Note | None documented | 
|---|
procedure StorageStatusTimer(Storage:PStorageDevice);
Description: To be documented
| Note | None documented | 
|---|
Return to Unit Reference