113 lines
3.2 KiB
C
113 lines
3.2 KiB
C
/*******************************************************************
|
|
* Pilot Software
|
|
*
|
|
* Copyright(c) 1994, Palm Computing Inc., All Rights Reserved
|
|
*
|
|
*-------------------------------------------------------------------
|
|
* FileName:
|
|
* KeyPrv.h
|
|
*
|
|
* Description:
|
|
* Private Include file for Key manager
|
|
*
|
|
* History:
|
|
* 9/13/95 Created by Ron Marianetti
|
|
*
|
|
*******************************************************************/
|
|
|
|
#ifdef NON_PORTABLE
|
|
#ifndef __KEYPRV_H
|
|
#define __KEYPRV_H
|
|
|
|
|
|
/********************************************************************
|
|
* Key Manager Constants
|
|
********************************************************************/
|
|
#define keyMinUpTicks (sysTicksPerSecond/20) // Min# of ticks key must be up to recognize it
|
|
|
|
#define keyBitMask 0x007F // Which bits in port D we use for keys
|
|
|
|
/********************************************************************
|
|
* Key Manager Globals
|
|
********************************************************************/
|
|
typedef struct KeyGlobalsType {
|
|
ULong lastKeyTicks; // GHwrCurTicks last time we enqueued
|
|
// a key event - cleared as soon as
|
|
// key is released.
|
|
|
|
|
|
Byte keyState; // current state of hardware keys - returned
|
|
// by KeyCurrentState
|
|
Byte keyUpCount; // # of consecutive times we've detected
|
|
// no keys down - used for debouncing
|
|
Byte initDelay; // key repeat init delay in ticks
|
|
Byte period; // key repeat period in ticks
|
|
|
|
|
|
// These variables used for sensing double-taps
|
|
ULong doubleTapTicks; // GHwrCurTicks last tiem we enqueued
|
|
// a key event - never cleared.
|
|
Word doubleTapDelay; // double-tap timeout in ticks
|
|
Byte doubleTapState; // state of hardware keys last time
|
|
|
|
// Belongs next to 'period' but put here for alignment
|
|
Boolean queueAhead; // if true, enqueue auto-repeat keys even if
|
|
// queue is not empty.
|
|
} KeyGlobalsType;
|
|
|
|
typedef KeyGlobalsType* KeyGlobalsPtr;
|
|
|
|
|
|
|
|
|
|
|
|
/********************************************************************
|
|
* Key manager Routines
|
|
********************************************************************/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// Called early on during boot-up to get status of hard reset
|
|
// and debugger key options. Returns DWord with bits set for each
|
|
// key down.
|
|
DWord KeyBootKeys(void);
|
|
|
|
|
|
// Initializes the Key Manager and allocates it's globals
|
|
Err KeyInit(void)
|
|
SYS_TRAP(sysTrapKeyInit);
|
|
|
|
|
|
// Called as a result of a key-down interrupt or periodically by
|
|
// by timer task while key is down. Returns # of ticks before
|
|
// it should be called again by timer task.
|
|
ULong KeyHandleInterrupt(Boolean periodic, DWord status)
|
|
SYS_TRAP(sysTrapKeyHandleInterrupt);
|
|
|
|
|
|
// Called by SysEvtMgr when it gets a pen event in order to
|
|
// reset the key manager's double-tap detection.
|
|
Err KeyResetDoubleTap(void)
|
|
SYS_TRAP(sysTrapKeyResetDoubleTap);
|
|
|
|
|
|
// Called before system goes to sleep
|
|
Err KeySleep(Boolean untilReset, Boolean emergency)
|
|
SYS_TRAP(sysTrapKeySleep);
|
|
|
|
|
|
// Called when the system wakes up
|
|
Err KeyWake(void)
|
|
SYS_TRAP(sysTrapKeyWake);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif //__KEYPRV_H
|
|
#endif // NON_PORTABLE
|