You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
5.1 KiB
193 lines
5.1 KiB
/****************************************************************************** |
|
* |
|
* 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 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 uint16_t 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 { |
|
int32_t seconds; |
|
int16_t mseconds; |
|
} OI_TIME; |
|
|
|
/** |
|
* Convert an OI_TIME to milliseconds. |
|
* |
|
* @param t the time to convert |
|
* |
|
* @return the time in milliseconds |
|
*/ |
|
uint32_t 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 |
|
*/ |
|
|
|
int16_t 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 uint32_t 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) |
|
*/ |
|
|
|
uint32_t OI_Time_IntervalMsecs(OI_TIME* Sooner, OI_TIME* Later); |
|
|
|
/** |
|
* This function answers this 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 */
|
|
|