palm-os-sdk/sdk-2/include/Core/System/TimePrv.h
2016-08-25 07:53:48 -03:00

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