Unit Storage - Ultibo.org

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

Storage functions

function StorageDeviceRead(Storage:PStorageDevice; const Start,Count:Int64; Buffer:Pointer):LongWord;

Description: To be documented

function StorageDeviceWrite(Storage:PStorageDevice; const Start,Count:Int64; Buffer:Pointer):LongWord;

Description: To be documented

function StorageDeviceErase(Storage:PStorageDevice; const Start,Count:Int64):LongWord;

Description: To be documented

function StorageDeviceControl(Storage:PStorageDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;

Description: To be 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

function StorageDeviceRegister(Storage:PStorageDevice):LongWord;

Description: Register a new Storage in the Storage table

function StorageDeviceDeregister(Storage:PStorageDevice):LongWord;

Description: Deregister a Storage from the Storage table

function StorageDeviceFind(StorageId:LongWord):PStorageDevice;

Description: To be 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

function StorageDeviceFindByDescription(const Description:String):PStorageDevice; inline;

Description: To be documented

function StorageDeviceEnumerate(Callback:TStorageEnumerate; Data:Pointer):LongWord;

Description: To be documented

function StorageDeviceNotification(Storage:PStorageDevice; Callback:TStorageNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;

Description: To be documented

Storage helper functions

function StorageGetCount:LongWord;

Description: Get the current storage count

function StorageDeviceCheck(Storage:PStorageDevice):PStorageDevice;

Description: Check if the supplied Storage is in the storage table

function StorageDeviceTypeToString(StorageType:LongWord):String;

Description: To be documented

function StorageDeviceStateToString(StorageState:LongWord):String;

Description: To be documented

function StorageDeviceStateToNotification(State:LongWord):LongWord;

Description: Convert a Storage state value into the notification code for device notifications

procedure StorageLog(Level:LongWord; Storage:PStorageDevice; const AText:String);

Description: To be documented

procedure StorageLogInfo(Storage:PStorageDevice; const AText:String); inline;

Description: To be documented

procedure StorageLogWarn(Storage:PStorageDevice; const AText:String); inline;

Description: To be documented

procedure StorageLogError(Storage:PStorageDevice; const AText:String); inline;

Description: To be documented

procedure StorageLogDebug(Storage:PStorageDevice; const AText:String); inline;

Description: To be documented

procedure StorageStatusTimer(Storage:PStorageDevice);

Description: To be documented

Return to Unit Reference