aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/Palm/Platform/Incs/Core/System/SerialMgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'SrcShared/Palm/Platform/Incs/Core/System/SerialMgr.h')
-rw-r--r--SrcShared/Palm/Platform/Incs/Core/System/SerialMgr.h371
1 files changed, 371 insertions, 0 deletions
diff --git a/SrcShared/Palm/Platform/Incs/Core/System/SerialMgr.h b/SrcShared/Palm/Platform/Incs/Core/System/SerialMgr.h
new file mode 100644
index 0000000..d59687f
--- /dev/null
+++ b/SrcShared/Palm/Platform/Incs/Core/System/SerialMgr.h
@@ -0,0 +1,371 @@
+/******************************************************************************
+ *
+ * Copyright (c) 1995-1999 Palm Computing, Inc. or its subsidiaries.
+ * All rights reserved.
+ *
+ * File: SerialMgr.h
+ *
+ * Description:
+ * Include file for Serial manager
+ *
+ * History:
+ * 1/14/98 SerialMgr.h created by Ben Manuto
+ *
+ *****************************************************************************/
+
+#ifndef __SERIALMGR_H
+#define __SERIALMGR_H
+
+
+// Pilot common definitions
+#include <PalmTypes.h>
+#include <ErrorBase.h>
+
+// New Serial manager feature number
+#define sysFtrNewSerialPresent 1
+
+/********************************************************************
+ * Serial Manager Errors
+ * the constant serErrorClass is defined in SystemMgr.h
+ ********************************************************************/
+
+#define serErrBadParam (serErrorClass | 1)
+#define serErrBadPort (serErrorClass | 2)
+#define serErrNoMem (serErrorClass | 3)
+#define serErrBadConnID (serErrorClass | 4)
+#define serErrTimeOut (serErrorClass | 5)
+#define serErrLineErr (serErrorClass | 6)
+#define serErrAlreadyOpen (serErrorClass | 7)
+#define serErrStillOpen (serErrorClass | 8)
+#define serErrNotOpen (serErrorClass | 9)
+#define serErrNotSupported (serErrorClass | 10) // functionality not supported
+#define serErrNoDevicesAvail (serErrorClass | 11) // No serial devices were loaded or are available.
+
+
+//
+// mask values for the lineErrors from SerGetStatus
+//
+
+#define serLineErrorParity 0x0001 // parity error
+#define serLineErrorHWOverrun 0x0002 // HW overrun
+#define serLineErrorFraming 0x0004 // framing error
+#define serLineErrorBreak 0x0008 // break signal asserted
+#define serLineErrorHShake 0x0010 // line hand-shake error
+#define serLineErrorSWOverrun 0x0020 // HW overrun
+#define serLineErrorCarrierLost 0x0040 // CD dropped
+
+
+/********************************************************************
+ * Serial Port Definitions
+ ********************************************************************/
+
+#define serPortLocalHotSync 0x8000 // Use physical HotSync port
+
+#define serPortCradlePort 0x8000 // Use the RS-232 cradle port.
+#define serPortIrPort 0x8001 // Use available IR port.
+
+
+// This constant is used by the Serial Link Mgr only
+#define serPortIDMask 0xC000
+
+
+/********************************************************************
+ * Serial Settings Descriptor
+ ********************************************************************/
+
+#define srmSettingsFlagStopBitsM 0x00000001 // mask for stop bits field
+#define srmSettingsFlagStopBits1 0x00000000 // 1 stop bits
+#define srmSettingsFlagStopBits2 0x00000001 // 2 stop bits
+#define srmSettingsFlagParityOnM 0x00000002 // mask for parity on
+#define srmSettingsFlagParityEvenM 0x00000004 // mask for parity even
+#define srmSettingsFlagXonXoffM 0x00000008 // (NOT IMPLEMENTED) mask for Xon/Xoff flow control
+#define srmSettingsFlagRTSAutoM 0x00000010 // mask for RTS rcv flow control
+#define srmSettingsFlagCTSAutoM 0x00000020 // mask for CTS xmit flow control
+#define srmSettingsFlagBitsPerCharM 0x000000C0 // mask for bits/char
+#define srmSettingsFlagBitsPerChar5 0x00000000 // 5 bits/char
+#define srmSettingsFlagBitsPerChar6 0x00000040 // 6 bits/char
+#define srmSettingsFlagBitsPerChar7 0x00000080 // 7 bits/char
+#define srmSettingsFlagBitsPerChar8 0x000000C0 // 8 bits/char
+#define srmSettingsFlagFlowControl 0x00000100 // mask for enabling/disabling special flow control feature
+ // for the software receive buffer.
+
+
+// Default settings
+#define srmDefaultSettings (srmSettingsFlagBitsPerChar8 | \
+ srmSettingsFlagStopBits1 | \
+ srmSettingsFlagRTSAutoM)
+
+#define srmDefaultCTSTimeout (5*sysTicksPerSecond)
+
+
+// Status bitfield constants
+
+#define srmStatusCtsOn 0x00000001
+#define srmStatusRtsOn 0x00000002
+#define srmStatusDsrOn 0x00000004
+#define srmStatusBreakSigOn 0x00000008
+
+
+//
+// Info fields describing serial HW capabilities.
+//
+
+#define serDevCradlePort 0x00000001 // Serial HW controls RS-232 serial from cradle connector of Pilot.
+#define serDevRS232Serial 0x00000002 // Serial HW has RS-232 line drivers
+#define serDevIRDACapable 0x00000004 // Serial Device has IR line drivers and generates IRDA mode serial.
+#define serDevModemPort 0x00000008 // Serial deivce drives modem connection.
+#define serDevCncMgrVisible 0x00000010 // Serial device port name string to be displayed in Connection Mgr panel.
+
+
+typedef struct DeviceInfoType {
+ UInt32 serDevCreator; // Four Character creator type for serial driver ('sdrv')
+ UInt32 serDevFtrInfo; // Flags defining features of this serial hardware.
+ UInt32 serDevMaxBaudRate; // Maximum baud rate for this device.
+ UInt32 serDevHandshakeBaud; // HW Handshaking is reccomended for baud rates over this
+ Char *serDevPortInfoStr; // Description of serial HW device or virtual device.
+ UInt8 reserved[8]; // Reserved.
+} DeviceInfoType;
+
+typedef DeviceInfoType *DeviceInfoPtr;
+
+
+/********************************************************************
+ * Type of a wakeup handler procedure which can be installed through the
+ * SerSetWakeupHandler() call.
+ ********************************************************************/
+typedef void (*WakeupHandlerProcPtr)(UInt32 refCon);
+
+/********************************************************************
+ * Type of an emulator-mode only blocking hook routine installed via
+ * SerControl function serCtlEmuSetBlockingHook. This is supported only
+ * under emulation mode. The argument to the function is the value
+ * specified in the SerCallbackEntryType structure. The intention of the
+ * return value is to return false if serial manager should abort the
+ * current blocking action, such as when an app quit event has been received;
+ * otherwise, it should return true. However, in the current implementation,
+ * this return value is ignored. The callback can additionally process
+ * events to enable user interaction with the UI, such as interacting with the
+ * debugger.
+ ********************************************************************/
+typedef Boolean (*BlockingHookProcPtr) (UInt32 userRef);
+
+
+/********************************************************************
+ * Serial Library Control Enumerations (Pilot 2.0)
+ ********************************************************************/
+
+/********************************************************************
+ * Structure for specifying callback routines.
+ ********************************************************************/
+typedef struct SrmCallbackEntryType {
+ BlockingHookProcPtr funcP; // function pointer
+ UInt32 userRef; // ref value to pass to callback
+} SrmCallbackEntryType;
+typedef SrmCallbackEntryType* SrmCallbackEntryPtr;
+
+
+typedef enum SrmCtlEnum {
+ srmCtlFirstReserved = 0, // RESERVE 0
+
+ srmCtlSetBaudRate, // Sets the current baud rate for the HW.
+ // valueP = MemPtr to Int32, valueLenP = MemPtr to sizeof(Int32)
+
+ srmCtlGetBaudRate, // Gets the current baud rate for the HW.
+
+ srmCtlSetFlags, // Sets the current flag settings for the serial HW.
+
+ srmCtlGetFlags, // Gets the current flag settings the serial HW.
+
+ srmCtlSetCtsTimeout, // Sets the current Cts timeout value.
+
+ srmCtlGetCtsTimeout, // Gets the current Cts timeout value.
+
+ srmCtlStartBreak, // turn RS232 break signal on:
+ // users are responsible for ensuring that the break is set
+ // long enough to genearate a valid BREAK!
+ // valueP = 0, valueLenP = 0
+
+ srmCtlStopBreak, // turn RS232 break signal off:
+ // valueP = 0, valueLenP = 0
+
+ srmCtlStartLocalLoopback, // Start local loopback test
+ // valueP = 0, valueLenP = 0
+
+ srmCtlStopLocalLoopback, // Stop local loopback test
+ // valueP = 0, valueLenP = 0
+
+
+ srmCtlIrDAEnable, // Enable IrDA connection on this serial port
+ // valueP = 0, valueLenP = 0
+
+ srmCtlIrDADisable, // Disable IrDA connection on this serial port
+ // valueP = 0, valueLenP = 0
+
+ srmCtlRxEnable, // enable receiver ( for IrDA )
+
+ srmCtlRxDisable, // disable receiver ( for IrDA )
+
+ srmCtlEmuSetBlockingHook, // Set a blocking hook routine FOR EMULATION
+ // MODE ONLY - NOT SUPPORTED ON THE PILOT
+ //PASS:
+ // valueP = MemPtr to SerCallbackEntryType
+ // *valueLenP = sizeof(SerCallbackEntryType)
+ //RETURNS:
+ // the old settings in the first argument
+
+ srmCtlUserDef, // Specifying this opCode passes through a user-defined
+ // function to the DrvControl function. This is for use
+ // specifically by serial driver developers who need info
+ // from the serial driver that may not be available through the
+ // standard SrmMgr interface.
+
+ srmCtlGetOptimalTransmitSize, // This function will ask the port for the most efficient buffer size
+ // for transmitting data packets. This opCode returns serErrNotSupported
+ // if the physical or virtual device does not support this feature.
+ // The device can return a transmit size of 0, if send buffering is
+ // requested, but the actual size is up to the caller to choose.
+ // valueP = MemPtr to UInt32 --> return optimal buf size
+ // ValueLenP = sizeof(UInt32)
+
+ srmCtlSetDTRAsserted, // Enable or disable DTR.
+
+ srmCtlGetDTRAsserted, // Determine if DTR is enabled or disabled.
+
+ srmCtlLAST // ***** ADD NEW ENTRIES BEFORE THIS ONE
+
+} SrmCtlEnum;
+
+
+
+/********************************************************************
+ * Serial Hardware Library Routines
+ ********************************************************************/
+
+#ifdef BUILDING_NEW_SERIAL_MGR
+ #define SERIAL_TRAP(serialSelectorNum)
+#else
+ #define SERIAL_TRAP(serialSelectorNum) \
+ _SYSTEM_API(_CALL_WITH_SELECTOR)(_SYSTEM_TABLE, sysTrapSerialDispatch, \
+ serialSelectorNum)
+#endif
+
+
+// *****************************************************************
+// * New Serial Manager trap selectors
+// *****************************************************************
+
+typedef enum { // The order of this enum *MUST* match the sysSerialSelector in SerialMgr.c
+ sysSerialInstall = 0,
+ sysSerialOpen,
+ sysSerialOpenBkgnd,
+ sysSerialClose,
+ sysSerialSleep,
+ sysSerialWake,
+ sysSerialGetDeviceCount,
+ sysSerialGetDeviceInfo,
+ sysSerialGetStatus,
+ sysSerialClearErr,
+ sysSerialControl,
+ sysSerialSend,
+ sysSerialSendWait,
+ sysSerialSendCheck,
+ sysSerialSendFlush,
+ sysSerialReceive,
+ sysSerialReceiveWait,
+ sysSerialReceiveCheck,
+ sysSerialReceiveFlush,
+ sysSerialSetRcvBuffer,
+ sysSerialRcvWindowOpen,
+ sysSerialRcvWindowClose,
+ sysSerialSetWakeupHandler,
+ sysSerialPrimeWakeupHandler,
+
+ maxSerialSelector = sysSerialPrimeWakeupHandler // Used by SerialMgrDispatch.c
+} sysSerialSelector;
+
+
+#ifdef REMOVE_FOR_EMULATOR
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+Err SerialMgrInstall(void)
+ SERIAL_TRAP(sysSerialInstall);
+
+Err SrmOpen(UInt32 port, UInt32 baud, UInt16 *newPortIdP)
+ SERIAL_TRAP(sysSerialOpen);
+
+Err SrmOpenBackground(UInt32 port, UInt32 baud, UInt16 *newPortIdP)
+ SERIAL_TRAP(sysSerialOpenBkgnd);
+
+Err SrmClose(UInt16 portId)
+ SERIAL_TRAP(sysSerialClose);
+
+Err SrmSleep()
+ SERIAL_TRAP(sysSerialSleep);
+
+Err SrmWake()
+ SERIAL_TRAP(sysSerialWake);
+
+Err SrmGetDeviceCount(UInt16 *numOfDevicesP)
+ SERIAL_TRAP(sysSerialGetDeviceCount);
+
+Err SrmGetDeviceInfo(UInt32 deviceID, DeviceInfoType *deviceInfoP)
+ SERIAL_TRAP(sysSerialGetDeviceInfo);
+
+Err SrmGetStatus(UInt16 portId, UInt32 *statusFieldP, UInt16 *lineErrsP)
+ SERIAL_TRAP(sysSerialGetStatus);
+
+Err SrmClearErr (UInt16 portId)
+ SERIAL_TRAP(sysSerialClearErr);
+
+Err SrmControl(UInt16 portId, UInt16 op, void *valueP, UInt16 *valueLenP)
+ SERIAL_TRAP(sysSerialControl);
+
+UInt32 SrmSend (UInt16 portId, void *bufP, UInt32 count, Err *errP)
+ SERIAL_TRAP(sysSerialSend);
+
+Err SrmSendWait(UInt16 portId)
+ SERIAL_TRAP(sysSerialSendWait);
+
+Err SrmSendCheck(UInt16 portId, UInt32 *numBytesP)
+ SERIAL_TRAP(sysSerialSendCheck);
+
+Err SrmSendFlush(UInt16 portId)
+ SERIAL_TRAP(sysSerialSendFlush);
+
+UInt32 SrmReceive(UInt16 portId, void *rcvBufP, UInt32 count, Int32 timeout, Err *errP)
+ SERIAL_TRAP(sysSerialReceive);
+
+Err SrmReceiveWait(UInt16 portId, UInt32 bytes, Int32 timeout)
+ SERIAL_TRAP(sysSerialReceiveWait);
+
+Err SrmReceiveCheck(UInt16 portId, UInt32 *numBytesP)
+ SERIAL_TRAP(sysSerialReceiveCheck);
+
+Err SrmReceiveFlush(UInt16 portId, Int32 timeout)
+ SERIAL_TRAP(sysSerialReceiveFlush);
+
+Err SrmSetReceiveBuffer(UInt16 portId, void *bufP, UInt16 bufSize)
+ SERIAL_TRAP(sysSerialSetRcvBuffer);
+
+Err SrmReceiveWindowOpen(UInt16 portId, UInt8 **bufPP, UInt32 *sizeP)
+ SERIAL_TRAP(sysSerialRcvWindowOpen);
+
+Err SrmReceiveWindowClose(UInt16 portId, UInt32 bytesPulled)
+ SERIAL_TRAP(sysSerialRcvWindowClose);
+
+Err SrmSetWakeupHandler(UInt16 portId, WakeupHandlerProcPtr procP, UInt32 refCon)
+ SERIAL_TRAP(sysSerialSetWakeupHandler);
+
+Err SrmPrimeWakeupHandler(UInt16 portId, UInt16 minBytes)
+ SERIAL_TRAP(sysSerialPrimeWakeupHandler);
+
+void SrmSelectorErrPrv (UInt16 serialSelector); // used only by SerialMgrDispatch.c
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+#endif // __SERIALMGR_H