189 lines
7.7 KiB
C
189 lines
7.7 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright (c) 1995-2000 Palm, Inc. or its subsidiaries.
|
|
* All rights reserved.
|
|
*
|
|
* File: SerialVdrv.h
|
|
*
|
|
* Release: Palm OS SDK 4.0 (63220)
|
|
*
|
|
* Description:
|
|
* Constants and data structures for virtual driver ('vdrv') code.
|
|
*
|
|
* History:
|
|
* 5/11/98 Created by Ben Manuto
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef __SERIALVDRV_H__
|
|
#define __SERIALVDRV_H__
|
|
|
|
#include <PalmTypes.h>
|
|
#include <CoreTraps.h>
|
|
|
|
#include <HAL.h>
|
|
|
|
#include <SerialDrvr.h>
|
|
#include <SerialMgr.h>
|
|
|
|
|
|
// ********** Constants
|
|
|
|
#define kVdrvResType 'vdrv'
|
|
|
|
|
|
// ********** Typedefs
|
|
|
|
typedef enum VdrvCtlOpCodeEnum { // Control function opCodes
|
|
vdrvOpCodeNoOp = 0,
|
|
vdrvOpCodeSetBaudRate = 0x1000, // Set the port's baud rate.
|
|
vdrvOpCodeSetSettingsFlags, // Set the ports send/rvc settings
|
|
vdrvOpCodeSetCtsTimeout, // The HW handshake timeout.
|
|
vdrvOpCodeClearErr, // Clear any HW errors.
|
|
vdrvOpCodeSetSleepMode, // Put in sleep mode.
|
|
vdrvOpCodeSetWakeupMode, // Wake from sleep mode.
|
|
vdrvOpCodeFIFOCount, // Return bytes in FIFO
|
|
vdrvOpCodeStartBreak, // Start a break signal.
|
|
vdrvOpCodeStopBreak, // Stop a break signal
|
|
vdrvOpCodeStartLoopback, // Start loopback mode.
|
|
vdrvOpCodeStopLoopback, // Stop loopback mode.
|
|
vdrvOpCodeFlushTxFIFO, // Flush the TX FIFO.
|
|
vdrvOpCodeFlushRxFIFO, // Flush the RX FIFO.
|
|
vdrvOpCodeSendBufferedData, // Send any buffered data in e vdrv.
|
|
vdrvOpCodeRcvCheckIdle, // Check idle state.
|
|
vdrvOpCodeEmuSetBlockingHook, // Special opCode for the simulator.
|
|
vdrvOpCodeGetOptTransmitSize, // Get the optimal TX buffer size for this port.
|
|
vdrvOpCodeGetMaxRcvBlockSize, // Get the optimal RX buffer size for this port.
|
|
vdrvOpCodeNotifyBytesReadFromQ, // Notify the vdrv bytes have been removed from Q.
|
|
vdrvOpCodeSetDTRAsserted, // Assert or deassert DTR signal
|
|
vdrvOpCodeGetDTRAsserted, // Yields 'true' if DTR is asserted, 'false' otherwise.
|
|
vdrvOpCodeWaitForConfiguration, // Some protocols like USB have an enumeration or
|
|
// discovery phase. This control code is called
|
|
// from Send and Receive to give the driver time to
|
|
// wait until configuration completes\.
|
|
vdrvOpCodeGetUSBDeviceDescriptor, // Query driver for device descriptor for USB
|
|
vdrvOpCodeGetUSBConfigDescriptor, // Query driver for configuration descriptor for USB
|
|
vdrvOpCodeEnableIRDA, // Enable irda, if supported
|
|
vdrvOpCodeDisableIRDA, // Disable irda, if supported
|
|
vdrvOpCodeEnableUART, // Enable the UART
|
|
vdrvOpCodeDisableUART, // Disable the UART
|
|
vdrvOpCodeRxEnable, // Enable receive lines
|
|
vdrvOpCodeRxDisable, // Disable receive lines
|
|
vdrvOpCodeLineEnable, // Enable the RS-232 lines.
|
|
vdrvOpCodeEnableUARTInterrupts, // Enable the UART interrupts.
|
|
vdrvOpCodeDisableUARTInterrupts, // Disable the UART interrupts.
|
|
vdrvOpCodeSetReceiveQueue, // Set the receive queue
|
|
|
|
vdrvOpCodeSaveState, // Save the state of the driver and port
|
|
// Used for port yielding
|
|
// A drive does not need to support this
|
|
// if it can not save state.
|
|
vdrvOpCodeRestoreState, // Restore the state of the driver and port
|
|
// Used for port yielding
|
|
// A drive does not need to support this
|
|
// if it can not save state.
|
|
vdrvOpCodeSetYieldPortCallback, // Set the yield port callback
|
|
// Port yielding is handled by the serial manager
|
|
// but if a virtual driver has a port beneath it
|
|
// that needs to be yieldable then it can pass the
|
|
// callback down to the port beneath it.
|
|
vdrvOpCodeSetYieldPortRefCon, // Set the yield port refCon
|
|
// Port yielding is handled by the serial manager
|
|
// but if a virtual driver has a port beneath it
|
|
// that needs to be yieldable then it can pass the
|
|
// refCon down to the port beneath it.
|
|
|
|
vdrvOpCodeUserDef = 0x2000, // User defined
|
|
|
|
// --- Insert new control code above this line
|
|
vdrvOpCodeSystem = 0x7000, // All op codes in this range are reserved for the system
|
|
vdrvOpCodeCustom = 0x8000 // All op codes in this range are reserved for licensees
|
|
} VdrvCtlOpCodeEnum;
|
|
|
|
#define vdrvOpCodeSystemStart 0x7000 // Start point for system op codes.
|
|
#define vdrvOpCodeCustomStart 0x8000 // Start point for custom op codes.
|
|
|
|
typedef struct VdrvConfigType {
|
|
UInt32 baud; // Baud rate to connect at
|
|
UInt32 drvrId; // Creator of the port that was opened
|
|
UInt32 function; // Function id of the connection
|
|
MemPtr drvrDataP; // Pointer to driver specific data.
|
|
UInt16 drvrDataSize; // Size of the driver specific data block.
|
|
UInt32 sysReserved1; // System Reserved
|
|
UInt32 sysReserved2; // System Reserved
|
|
} VdrvConfigType;
|
|
|
|
typedef VdrvConfigType *VdrvConfigPtr;
|
|
|
|
|
|
typedef void *VdrvDataPtr;
|
|
|
|
typedef Err (*VdrvOpenProcPtr)(VdrvDataPtr *drvrDataP, UInt32 baudRate, DrvrHWRcvQPtr rcvQP);
|
|
typedef Err (*VdrvOpenProcV4Ptr)(VdrvDataPtr *drvrDataP, VdrvConfigPtr configP, DrvrHWRcvQPtr rcvQP);
|
|
|
|
typedef Err (*VdrvCloseProcPtr)(VdrvDataPtr drvrDataP);
|
|
|
|
typedef UInt16 (*VdrvStatusProcPtr)(VdrvDataPtr drvrDataP);
|
|
typedef Err (*VdrvControlProcPtr)(VdrvDataPtr drvrDataP,
|
|
VdrvCtlOpCodeEnum controlCode,
|
|
void *controlDataP,
|
|
UInt16 *controlDataLenP);
|
|
|
|
typedef Err (*VdrvReadProcPtr)(VdrvDataPtr drvrDataP, void **bufP, UInt32 *sizeP);
|
|
typedef UInt32 (*VdrvWriteProcPtr)(VdrvDataPtr drvrDataP, const void *bufP, UInt32 size, Err *errP);
|
|
|
|
typedef Err (*VdrvControlCustomProcPtr)(VdrvDataPtr drvrDataP, UInt16 opCode, UInt32 creator, void* controlDataP,
|
|
UInt16* controlDataLenP);
|
|
|
|
|
|
typedef struct {
|
|
VdrvOpenProcPtr drvOpen;
|
|
VdrvCloseProcPtr drvClose;
|
|
VdrvControlProcPtr drvControl;
|
|
VdrvStatusProcPtr drvStatus;
|
|
VdrvReadProcPtr drvRead;
|
|
VdrvWriteProcPtr drvWrite;
|
|
VdrvOpenProcV4Ptr drvOpenV4;
|
|
VdrvControlCustomProcPtr drvControlCustom;
|
|
} VdrvAPIType;
|
|
|
|
typedef VdrvAPIType *VdrvAPIPtr;
|
|
|
|
|
|
// Normally, virtual drvr functions are accessed (by the NewSerialMgr)
|
|
// through the above SdrvAPIType structure of ProcPtrs.
|
|
|
|
// However, SerialMgrDbg.c (the Serial Mgr linked to the boot/debugger code)
|
|
// needs to call the HAL's debug serial code through the HAL_CALL macro.
|
|
|
|
// Note that this version of DrvOpen conforms with version four of the virtual driver
|
|
// model.
|
|
Err VDrvOpen(VdrvDataPtr *drvrData, VdrvConfigPtr configP, DrvrHWRcvQPtr rcvQP)
|
|
HAL_CALL(sysTrapDbgSerDrvOpen);
|
|
|
|
Err VDrvClose(VdrvDataPtr drvrData)
|
|
HAL_CALL(sysTrapDbgSerDrvClose);
|
|
|
|
Err VDrvControl(VdrvDataPtr drvrData, VdrvCtlOpCodeEnum controlCode,
|
|
void *controlData, UInt16 *controlDataLen)
|
|
HAL_CALL(sysTrapDbgSerDrvControl);
|
|
|
|
|
|
UInt16 VDrvStatus(VdrvDataPtr drvrData)
|
|
HAL_CALL(sysTrapDbgSerDrvStatus);
|
|
|
|
UInt32 VDrvDbgWrite(VdrvDataPtr drvrData, void * bufP, UInt32 count,
|
|
Err* errP)
|
|
HAL_CALL(sysTrapDbgSerDrvWriteChar);
|
|
|
|
UInt32 VDrvDbgRead(VdrvDataPtr drvrData, void * bufP, UInt32 count,
|
|
Int32 timeout, Err* errP)
|
|
HAL_CALL(sysTrapDbgSerDrvReadChar);
|
|
|
|
// Note the debugger does not use Custom Control calls so there is no corresponding HAL
|
|
// trap.
|
|
Err VDrvCustomControl(VdrvDataPtr drvrData, UInt16 opCode, UInt32 creator, void* controlDataP,
|
|
UInt16* controlDataLenP);
|
|
|
|
#endif // __SERIALVDRV_H__
|