201 lines
5.2 KiB
C
201 lines
5.2 KiB
C
|
/******************************************************************************
|
||
|
*
|
||
|
* Copyright (C) 2014 The Android Open Source Project
|
||
|
* Copyright 2002 - 2004 Open Interface North America, Inc. All rights reserved.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at:
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
#ifndef _OI_TIME_H
|
||
|
#define _OI_TIME_H
|
||
|
/** @file
|
||
|
*
|
||
|
* This file provides time type definitions and interfaces to time-related functions.
|
||
|
*
|
||
|
* The stack maintains a 64-bit real-time millisecond clock. The choice of
|
||
|
* milliseconds is for convenience, not accuracy.
|
||
|
*
|
||
|
* Timeouts are specified as tenths of seconds in a 32-bit value. Timeout values
|
||
|
* specified by the Bluetooth specification are usually muliple seconds, so
|
||
|
* accuracy to a tenth of a second is more than adequate.
|
||
|
*
|
||
|
* This file also contains macros to convert between seconds and the Link
|
||
|
* Manager's 1.28-second units.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/**********************************************************************************
|
||
|
$Revision: #1 $
|
||
|
***********************************************************************************/
|
||
|
|
||
|
#include "oi_stddefs.h"
|
||
|
|
||
|
|
||
|
/** \addtogroup Misc Miscellaneous APIs */
|
||
|
/**@{*/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Within the core stack timeouts are specified in intervals of tenths of seconds
|
||
|
*/
|
||
|
|
||
|
typedef OI_UINT16 OI_INTERVAL;
|
||
|
#define OI_INTERVALS_PER_SECOND 10
|
||
|
#define MSECS_PER_OI_INTERVAL (1000 / OI_INTERVALS_PER_SECOND)
|
||
|
|
||
|
/** maximum interval (54 min 36.7 sec) */
|
||
|
#define OI_MAX_INTERVAL 0x7fff
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Macro to convert seconds to OI_INTERVAL time units
|
||
|
*/
|
||
|
|
||
|
#define OI_SECONDS(n) ((OI_INTERVAL) ((n) * OI_INTERVALS_PER_SECOND))
|
||
|
|
||
|
/**
|
||
|
* Macro to convert milliseconds to OI_INTERVAL time units (Rounded Up)
|
||
|
*/
|
||
|
|
||
|
#define OI_MSECONDS(n) ((OI_INTERVAL) ((n + MSECS_PER_OI_INTERVAL - 1) / MSECS_PER_OI_INTERVAL))
|
||
|
|
||
|
/**
|
||
|
* Macro to convert minutes to OI_INTERVAL time units
|
||
|
*/
|
||
|
|
||
|
#define OI_MINUTES(n) ((OI_INTERVAL) ((n) * OI_SECONDS(60)))
|
||
|
|
||
|
/** Convert an OI_INTERVAL to milliseconds. */
|
||
|
#define OI_INTERVAL_TO_MILLISECONDS(i) ((i) * MSECS_PER_OI_INTERVAL)
|
||
|
|
||
|
/**
|
||
|
* The stack depends on relative not absolute time. Any mapping between the
|
||
|
* stack's real-time clock and absolute time and date is implementation-dependent.
|
||
|
*/
|
||
|
|
||
|
typedef struct {
|
||
|
OI_INT32 seconds;
|
||
|
OI_INT16 mseconds;
|
||
|
} OI_TIME;
|
||
|
|
||
|
/**
|
||
|
* Convert an OI_TIME to milliseconds.
|
||
|
*
|
||
|
* @param t the time to convert
|
||
|
*
|
||
|
* @return the time in milliseconds
|
||
|
*/
|
||
|
OI_UINT32 OI_Time_ToMS(OI_TIME *t);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This function compares two time values.
|
||
|
*
|
||
|
* @param T1 first time to compare.
|
||
|
*
|
||
|
* @param T2 second time to compare.
|
||
|
*
|
||
|
* @return
|
||
|
@verbatim
|
||
|
-1 if t1 < t2
|
||
|
0 if t1 = t2
|
||
|
+1 if t1 > t2
|
||
|
@endverbatim
|
||
|
*/
|
||
|
|
||
|
OI_INT16 OI_Time_Compare(OI_TIME *T1,
|
||
|
OI_TIME *T2);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This function returns the interval between two times to a granularity of 0.1 seconds.
|
||
|
*
|
||
|
* @param Sooner a time value more recent that Later
|
||
|
*
|
||
|
* @param Later a time value later than Sooner
|
||
|
*
|
||
|
* @note The result is an OI_INTERVAL value so this function only works for time intervals
|
||
|
* that are less than about 71 minutes.
|
||
|
*
|
||
|
* @return the time interval between the two times = (Later - Sooner)
|
||
|
*/
|
||
|
|
||
|
OI_INTERVAL OI_Time_Interval(OI_TIME *Sooner,
|
||
|
OI_TIME *Later);
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This function returns the interval between two times to a granularity of milliseconds.
|
||
|
*
|
||
|
* @param Sooner a time value more recent that Later
|
||
|
*
|
||
|
* @param Later a time value later than Sooner
|
||
|
*
|
||
|
* @note The result is an OI_UINT32 value so this function only works for time intervals
|
||
|
* that are less than about 50 days.
|
||
|
*
|
||
|
* @return the time interval between the two times = (Later - Sooner)
|
||
|
*/
|
||
|
|
||
|
OI_UINT32 OI_Time_IntervalMsecs(OI_TIME *Sooner,
|
||
|
OI_TIME *Later);
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* This function answers the question, Have we reached or gone past the target time?
|
||
|
*
|
||
|
* @param pTargetTime target time
|
||
|
*
|
||
|
* @return TRUE means time now is at or past target time
|
||
|
* FALSE means target time is still some time in the future
|
||
|
*/
|
||
|
|
||
|
OI_BOOL OI_Time_NowReachedTime(OI_TIME *pTargetTime);
|
||
|
|
||
|
/**
|
||
|
* Convert seconds to the Link Manager 1.28-second units
|
||
|
* Approximate by using 1.25 conversion factor.
|
||
|
*/
|
||
|
|
||
|
#define OI_SECONDS_TO_LM_TIME_UNITS(lmUnits) ((lmUnits)<4?(lmUnits):(lmUnits)-((lmUnits)>>2))
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Convert Link Manager 1.28-second units to seconds.
|
||
|
* Approximate by using 1.25 conversion factor.
|
||
|
*/
|
||
|
|
||
|
#define OI_LM_TIME_UNITS_TO_SECONDS(lmUnits) ((lmUnits) + ((lmUnits)>>2))
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/**@}*/
|
||
|
|
||
|
/* Include for OI_Time_Now() prototype
|
||
|
* Must be included at end to obtain OI_TIME typedef
|
||
|
*/
|
||
|
#include "oi_osinterface.h"
|
||
|
|
||
|
/*****************************************************************************/
|
||
|
#endif /* _OI_TIME_H */
|
||
|
|