128 lines
4.3 KiB
C
128 lines
4.3 KiB
C
/*******************************************************************
|
|
* Pilot Software
|
|
*
|
|
* Copyright (c) 1995-1997, Palm Computing Inc., All Rights Reserved
|
|
*
|
|
*-------------------------------------------------------------------
|
|
* FileName:
|
|
* TimePrv.h
|
|
*
|
|
* Description:
|
|
* Private Time manager functions
|
|
*
|
|
* History:
|
|
* 1/19/95 roger - Created by Roger Flores
|
|
*
|
|
*
|
|
*******************************************************************/
|
|
|
|
#ifdef NON_PORTABLE
|
|
|
|
#ifndef __TIMEPRV_H__
|
|
#define __TIMEPRV_H__
|
|
|
|
|
|
/*******************************************************************
|
|
* Private Time Manager Constants
|
|
*
|
|
*******************************************************************/
|
|
|
|
// Alarm repeat interval -- once an alarm is triggered, it will
|
|
// repeat every timAlarmRepeatSeconds until it is canceled or
|
|
// replaced with a new alarm by the Alarm Manager. This ensures
|
|
// that an alarm will not be missed by the Alarm Manager code which
|
|
// is executed on some app's UI thread.
|
|
#define timAlarmRepeatSeconds 10
|
|
|
|
// Alarm delta interval -- if the difference between the alarm time and the current time
|
|
// is less than this interval, the alarm will be triggered immediately. This eliminates
|
|
// a race condition which occurs when the alarm time is TOO close to the current time.
|
|
#define timAlarmMinDeltaSeconds 2
|
|
|
|
|
|
|
|
/*******************************************************************
|
|
* Time Manager Globals
|
|
*
|
|
*******************************************************************/
|
|
typedef struct TimGlobalsType {
|
|
|
|
ULong rtcHours; // Added to DragonBall hours to get actual time
|
|
ULong alarmSeconds; // alarm time in seconds since 1/1/1904;
|
|
// 0 = none
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// The following fields are used exclusively to work around a bug in the 0G58E version
|
|
// of the DragonBall. This bug causes the rtcHourMinSec register in the DragonBall to
|
|
// occasionally be "out of date" when read and also prevents alarms from going off
|
|
// if we're in sleep mode. To get around this bug, we use the 1 minute interrupt while
|
|
// we're in sleep mode to wake up periodically and see if any alarms need to go off and
|
|
// we use the 1 second interrupt when we're awake to update our own copy of the hours,
|
|
// minutes and seconds.
|
|
//-------------------------------------------------------------------------------
|
|
Boolean rtcBugWorkaround; // true to work around bug in 0G58E version
|
|
// of dragonball.
|
|
Boolean rtcBugAsleep; // true if we're in sleep mode
|
|
|
|
// Our copy of the time that we maintain through the 1 second and minute interrupts
|
|
ULong rtcBugAlarm; // when alarm should be triggerred.
|
|
ULong rtcBugSeconds; // seconds since 1/1/1904
|
|
// IMPORTANT: The boolean rtcBugFastMinuteCalc MUST
|
|
// be cleared whenever rtcBugSeconds is changed!!!!!!!
|
|
ULong rtcBugLastSeconds; // seconds after last 1 sec. or min. interrupt.
|
|
Boolean rtcBugFastMinuteCalc; // true when current time is on a minute
|
|
// boundary. Used by TimHandleInterrupt speed up
|
|
// the next minute calculation.
|
|
} TimGlobalsType;
|
|
|
|
typedef TimGlobalsType* TimGlobalsPtr;
|
|
|
|
|
|
/************************************************************
|
|
* Function Prototypes
|
|
*************************************************************/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// IMPORTANT: TimSetAlarm() and TimGetAlarm() are reserved for use by the
|
|
// Alarm Manager!
|
|
//
|
|
|
|
// set an alarm in seconds since 1/1/1904
|
|
// (reserved for Alarm Manager use only)
|
|
ULong TimSetAlarm(ULong seconds)
|
|
SYS_TRAP(sysTrapTimSetAlarm);
|
|
|
|
// get the current alarm setting in seconds since 1/1/1904
|
|
// (reserved for Alarm Manager use only)
|
|
ULong TimGetAlarm(void)
|
|
SYS_TRAP(sysTrapTimGetAlarm);
|
|
|
|
Err TimSleep(Boolean untilReset, Boolean emergency)
|
|
SYS_TRAP(sysTrapTimSleep);
|
|
|
|
Err TimWake(void)
|
|
SYS_TRAP(sysTrapTimWake);
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Interrupt Service routine
|
|
//-------------------------------------------------------------------
|
|
void TimHandleInterrupt(Boolean periodicUpdate)
|
|
SYS_TRAP(sysTrapTimHandleInterrupt);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif // __TIMEMGR_H__
|
|
|
|
|
|
#endif // NON_PORTABLE
|