mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-12 09:21:42 +01:00
186 lines
9.4 KiB
ObjectPascal
186 lines
9.4 KiB
ObjectPascal
{$MACRO ON}
|
|
|
|
(******************************************************************************
|
|
*
|
|
* Copyright (c) 1998-2000 Palm, Inc. or its subsidiaries.
|
|
* All rights reserved.
|
|
*
|
|
* File: SlotDrvrLib.h
|
|
*
|
|
* Release: Palm OS SDK 4.0 (63220)
|
|
*
|
|
* Description:
|
|
* Sample Slot Driver library implementation.
|
|
*
|
|
* History:
|
|
* 02/25/00 Created by Steve Minns
|
|
* 09/15/00 lrt Updated CardMetricsType stucture to include more
|
|
* useful fields, inc'd API Version
|
|
*
|
|
*****************************************************************************)
|
|
|
|
unit slotdrvrlib;
|
|
|
|
interface
|
|
|
|
uses palmos, libtraps, expansionmgr;
|
|
|
|
const
|
|
slotDrvrAPIVersion = $00000002;
|
|
|
|
// The number of bytes per sector is fixed
|
|
slotSectorSize = 512;
|
|
|
|
(********************************************************************
|
|
* Card Metrics
|
|
* These structures contains all of the information about the physical
|
|
* structure of the card that may be needed by a filesystem in order
|
|
* to format volumes on the card.
|
|
********************************************************************)
|
|
|
|
slotDrvrPartitionTypeFAT12 = $01;
|
|
slotDrvrPartitionTypeFAT16Under32MB = $04;
|
|
slotDrvrPartitionTypeFAT16Over32MB = $06;
|
|
slotDrvrBootablePartition = $80;
|
|
slotDrvrNonBootablePartition = $00;
|
|
|
|
type
|
|
CardMetricsType = record
|
|
totalSectors: UInt32; // The total number of sectors accessable via SlotCardSector[Read/Write]
|
|
// (some media may contain extra sectors in case one goes bad,
|
|
// or for storing configuration information, but they are handled
|
|
// internally to the slot driver, and not accessable)
|
|
bytesPerSector: UInt16; // The number of bytes in one sector.
|
|
// currently for Palm, this must be the standard 512
|
|
sectorsPerHead: UInt16; // The number of Sectors per Head
|
|
// as given by guidelines in the specification for this media type
|
|
// even though all of our disks accesses are LBA,
|
|
// this is for compatibility when filling out MBRs and PBRs
|
|
// if the media guidelines don't care, this value is set to 0
|
|
headsPerCylinder: UInt16; // The number of Heads per Cylinder
|
|
// as given by guidelines in the specification for this media type
|
|
// even though all of our disks accesses are LBA,
|
|
// this is for compatibility when filling out MBRs and PBRs
|
|
// if the media guidelines don't care, this value is set to 0
|
|
reserved1: UInt16; // Reserved
|
|
sectorsPerBlock: UInt8; // A suggested number of Sectors per Block (Cluster)
|
|
// as given by guidelines in the specification for this media type
|
|
// if the media guidelines don't care, this value will be set to 0
|
|
|
|
partitionType: UInt8; // The suggested partition type (System ID) of the first partition
|
|
// as given by guidelines in the specification for this media type
|
|
// if the media guidelines don't care, this value will be set to 0
|
|
bootIndicator: UInt8; // The suggested bootability of the first partition
|
|
// as given by guidelines in the specification for this media type
|
|
// (generally, 0x80=bootable, default boot partition 0x00=not-bootable)
|
|
// if the media guidelines don't care, this value will be set to 0xFF
|
|
reserved2: UInt8; // Reserved
|
|
partitionStart: UInt32; // The suggested starting sector of the first partition
|
|
// as given by guidelines in the specification for this media type
|
|
// if this value is set to zero, and the partitionSize value is non-zero
|
|
// the media guidelines suggest to not use an MBR, and only use a PBR at sector 0
|
|
// if the media guidelines don't care, the partitionSize value will be set to 0
|
|
|
|
partitionSize: UInt32; // The suggested size of the first partition
|
|
// as given by guidelines in the specification for this media type
|
|
// if the media guidelines don't care, this value will be set to 0, and
|
|
// the partitionStart parameter is also ignored
|
|
end;
|
|
CardMetricsTag = CardMetricsType;
|
|
CardMetricsPtr = ^CardMetricsType;
|
|
|
|
(********************************************************************
|
|
* SlotDrvr library function trap ID's. Each library call gets a trap number:
|
|
* SlotDrvrLibTrapXXXX which serves as an index into the library's dispatch table.
|
|
* The constant sysLibTrapCustom is the first available trap number after
|
|
* the system predefined library traps Open,Close,Sleep & Wake.
|
|
*
|
|
* WARNING!!! The order of these traps MUST match the order of the dispatch
|
|
* table in SlotDrvrLibDispatch.c!!!
|
|
********************************************************************)
|
|
|
|
const
|
|
SlotTrapLibAPIVersion = sysLibTrapCustom;
|
|
SlotTrapCustomControl = sysLibTrapCustom + 1;
|
|
SlotTrapCardPresent = sysLibTrapCustom + 2;
|
|
SlotTrapCardInfo = sysLibTrapCustom + 3;
|
|
SlotTrapCardMediaType = sysLibTrapCustom + 4;
|
|
SlotTrapCardIsFilesystemSupported = sysLibTrapCustom + 5;
|
|
SlotTrapCardMetrics = sysLibTrapCustom + 6;
|
|
SlotTrapCardLowLevelFormat = sysLibTrapCustom + 7;
|
|
SlotTrapCardSectorRead = sysLibTrapCustom + 8;
|
|
SlotTrapCardSectorWrite = sysLibTrapCustom + 9;
|
|
SlotTrapPowerCheck = sysLibTrapCustom + 10;
|
|
SlotTrapMediaType = sysLibTrapCustom + 11;
|
|
SlotTrapCardReserve = sysLibTrapCustom + 12;
|
|
SlotTrapCardRelease = sysLibTrapCustom + 13;
|
|
SlotTrapCardGetSerialPort = sysLibTrapCustom + 14;
|
|
|
|
(********************************************************************
|
|
* API Prototypes
|
|
********************************************************************)
|
|
|
|
(********************************************************************
|
|
* Standard library open, close, sleep and wake functions
|
|
********************************************************************)
|
|
|
|
function SlotOpen(slotLibRefNum: UInt16): Err; syscall sysLibTrapOpen;
|
|
|
|
function SlotClose(slotLibRefNum: UInt16): Err; syscall sysLibTrapClose;
|
|
|
|
function SlotSleep(slotLibRefNum: UInt16): Err; syscall sysLibTrapSleep;
|
|
|
|
function SlotWake(slotLibRefNum: UInt16): Err; syscall sysLibTrapWake;
|
|
|
|
(********************************************************************
|
|
* Custom library API functions
|
|
********************************************************************)
|
|
|
|
function SlotLibAPIVersion(slotLibRefNum: UInt16):UInt32; syscall SlotTrapLibAPIVersion;
|
|
|
|
function SlotCustomControl(slotLibRefNum: UInt16; apiCreator: UInt32; apiSelector: UInt16; valueP: Pointer; var valueLenP: UInt16): Err; syscall SlotTrapCustomControl;
|
|
|
|
function SlotCardPresent(slotLibRefNum: UInt16; slotRefNum: UInt16): Err; syscall SlotTrapCardPresent;
|
|
|
|
function SlotCardInfo(slotLibRefNum, slotRefNum: UInt16; var infoP: ExpCardInfoType): Err; syscall SlotTrapCardInfo;
|
|
|
|
function SlotCardMediaType(slotLibRefNum, slotRefNum: UInt16; var mediaTypeP: UInt32): Err; syscall SlotTrapCardMediaType;
|
|
|
|
function SlotCardReserve(slotLibRefNum, slotRefNum: UInt16): Err; syscall SlotTrapCardReserve;
|
|
|
|
function SlotCardRelease(slotLibRefNum, slotRefNum: UInt16): Err; syscall SlotTrapCardRelease;
|
|
|
|
function SlotCardGetSerialPort(slotLibRefNum, slotRefNum: UInt16; var portP: UInt32): Err; syscall SlotTrapCardGetSerialPort;
|
|
|
|
(********************************************************************
|
|
* SlotDriver Formatting APIs:
|
|
********************************************************************)
|
|
|
|
function SlotCardIsFilesystemSupported(slotLibRefNum, slotRefNum: UInt16; filesystemType: UInt32): Boolean; syscall SlotTrapCardIsFilesystemSupported;
|
|
|
|
function SlotCardMetrics(slotLibRefNum, slotRefNum: UInt16; cardMetricsP: CardMetricsPtr): Err; syscall SlotTrapCardMetrics;
|
|
|
|
function SlotCardLowLevelFormat(slotLibRefNum, slotRefNum: UInt16): Err; syscall SlotTrapCardLowLevelFormat;
|
|
|
|
(********************************************************************
|
|
* SlotDriver Logical Block Read/Write APIs:
|
|
********************************************************************)
|
|
|
|
function SlotCardSectorRead(slotLibRefNum, slotRefNum: UInt16; sectorNumber: UInt32; var bufferP: UInt8; var numSectorsP: UInt32): Err; syscall SlotTrapCardSectorRead;
|
|
|
|
function SlotCardSectorWrite(slotLibRefNum, slotRefNum: UInt16; sectorNumber: UInt32; var bufferP: UInt8; var numSectorsP: UInt32): Err; syscall SlotTrapCardSectorWrite;
|
|
|
|
(********************************************************************
|
|
* Power Mgmt APIs:
|
|
********************************************************************)
|
|
|
|
const
|
|
slotLibPowerFlag_WakeUp = $0001; // Add the power required to bring the slot hardware out of low-power mode
|
|
slotLibPowerFlag_FormatMedia = $0002; // Add the power required to perform a low-level format of the card media
|
|
|
|
function SlotPowerCheck(slotLibRefNum, slotRefNum, operationFlags, readBlocks, writeBlocks: UInt16): Err; syscall SlotTrapPowerCheck;
|
|
|
|
implementation
|
|
|
|
end.
|