Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2014 The Android Open Source Project
      4  *  Copyright 2002 - 2004 Open Interface North America, Inc. All rights reserved.
      5  *
      6  *  Licensed under the Apache License, Version 2.0 (the "License");
      7  *  you may not use this file except in compliance with the License.
      8  *  You may obtain a copy of the License at:
      9  *
     10  *  http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  *  Unless required by applicable law or agreed to in writing, software
     13  *  distributed under the License is distributed on an "AS IS" BASIS,
     14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15  *  See the License for the specific language governing permissions and
     16  *  limitations under the License.
     17  *
     18  ******************************************************************************/
     19 #ifndef _OI_TIME_H
     20 #define _OI_TIME_H
     21 /** @file
     22  *
     23  * This file provides time type definitions and interfaces to time-related functions.
     24  *
     25  * The stack maintains a 64-bit real-time millisecond clock. The choice of
     26  * milliseconds is for convenience, not accuracy.
     27  *
     28  * Timeouts are specified as tenths of seconds in a 32-bit value. Timeout values
     29  * specified by the Bluetooth specification are usually muliple seconds, so
     30  * accuracy to a tenth of a second is more than adequate.
     31  *
     32  * This file also contains macros to convert between seconds and the Link
     33  * Manager's 1.28-second units.
     34  *
     35  */
     36 
     37 /**********************************************************************************
     38   $Revision: #1 $
     39 ***********************************************************************************/
     40 
     41 #include "oi_stddefs.h"
     42 
     43 
     44 /** \addtogroup Misc Miscellaneous APIs */
     45 /**@{*/
     46 
     47 #ifdef __cplusplus
     48 extern "C" {
     49 #endif
     50 
     51 
     52 
     53 /**
     54  * Within the core stack timeouts are specified in intervals of tenths of seconds
     55  */
     56 
     57 typedef OI_UINT16 OI_INTERVAL;
     58 #define OI_INTERVALS_PER_SECOND     10
     59 #define MSECS_PER_OI_INTERVAL       (1000 / OI_INTERVALS_PER_SECOND)
     60 
     61 /** maximum interval (54 min 36.7 sec) */
     62 #define OI_MAX_INTERVAL   0x7fff
     63 
     64 
     65 /**
     66  * Macro to convert seconds to OI_INTERVAL time units
     67  */
     68 
     69 #define OI_SECONDS(n)    ((OI_INTERVAL) ((n) * OI_INTERVALS_PER_SECOND))
     70 
     71 /**
     72  * Macro to convert milliseconds to OI_INTERVAL time units (Rounded Up)
     73  */
     74 
     75 #define OI_MSECONDS(n)   ((OI_INTERVAL) ((n + MSECS_PER_OI_INTERVAL - 1) / MSECS_PER_OI_INTERVAL))
     76 
     77 /**
     78  * Macro to convert minutes to OI_INTERVAL time units
     79  */
     80 
     81 #define OI_MINUTES(n)    ((OI_INTERVAL) ((n) * OI_SECONDS(60)))
     82 
     83 /** Convert an OI_INTERVAL to milliseconds. */
     84 #define OI_INTERVAL_TO_MILLISECONDS(i) ((i) * MSECS_PER_OI_INTERVAL)
     85 
     86 /**
     87  * The stack depends on relative not absolute time. Any mapping between the
     88  * stack's real-time clock and absolute time and date is implementation-dependent.
     89  */
     90 
     91 typedef struct {
     92     OI_INT32 seconds;
     93     OI_INT16 mseconds;
     94 } OI_TIME;
     95 
     96 /**
     97  * Convert an OI_TIME to milliseconds.
     98  *
     99  * @param t  the time to convert
    100  *
    101  * @return the time in milliseconds
    102  */
    103 OI_UINT32 OI_Time_ToMS(OI_TIME *t);
    104 
    105 
    106 /**
    107  * This function compares two time values.
    108  *
    109  * @param T1 first time to compare.
    110  *
    111  * @param T2 second time to compare.
    112  *
    113  * @return
    114  @verbatim
    115      -1 if t1 < t2
    116       0 if t1 = t2
    117      +1 if t1 > t2
    118  @endverbatim
    119  */
    120 
    121 OI_INT16 OI_Time_Compare(OI_TIME *T1,
    122                          OI_TIME *T2);
    123 
    124 
    125 /**
    126  * This function returns the interval between two times to a granularity of 0.1 seconds.
    127  *
    128  * @param Sooner a time value more recent that Later
    129  *
    130  * @param Later a time value later than Sooner
    131  *
    132  * @note The result is an OI_INTERVAL value so this function only works for time intervals
    133  * that are less than about 71 minutes.
    134  *
    135  * @return the time interval between the two times = (Later - Sooner)
    136  */
    137 
    138 OI_INTERVAL OI_Time_Interval(OI_TIME *Sooner,
    139                              OI_TIME *Later);
    140 
    141 
    142 
    143 /**
    144  * This function returns the interval between two times to a granularity of milliseconds.
    145  *
    146  * @param Sooner a time value more recent that Later
    147  *
    148  * @param Later a time value later than Sooner
    149  *
    150  * @note The result is an OI_UINT32 value so this function only works for time intervals
    151  * that are less than about 50 days.
    152  *
    153  * @return the time interval between the two times = (Later - Sooner)
    154  */
    155 
    156 OI_UINT32 OI_Time_IntervalMsecs(OI_TIME *Sooner,
    157                                 OI_TIME *Later);
    158 
    159 
    160 
    161 /**
    162  * This function answers the question, Have we reached or gone past the target time?
    163  *
    164  * @param pTargetTime   target time
    165  *
    166  * @return  TRUE means time now is at or past target time
    167  *          FALSE means target time is still some time in the future
    168  */
    169 
    170 OI_BOOL  OI_Time_NowReachedTime(OI_TIME *pTargetTime);
    171 
    172 /**
    173  *  Convert seconds to the Link Manager 1.28-second units
    174  *  Approximate by using 1.25 conversion factor.
    175  */
    176 
    177 #define OI_SECONDS_TO_LM_TIME_UNITS(lmUnits) ((lmUnits)<4?(lmUnits):(lmUnits)-((lmUnits)>>2))
    178 
    179 
    180 /**
    181  *  Convert Link Manager 1.28-second units to seconds.
    182  *  Approximate by using 1.25 conversion factor.
    183  */
    184 
    185 #define OI_LM_TIME_UNITS_TO_SECONDS(lmUnits) ((lmUnits) + ((lmUnits)>>2))
    186 
    187 #ifdef __cplusplus
    188 }
    189 #endif
    190 
    191 /**@}*/
    192 
    193 /* Include for OI_Time_Now() prototype
    194  * Must be included at end to obtain OI_TIME typedef
    195  */
    196 #include "oi_osinterface.h"
    197 
    198 /*****************************************************************************/
    199 #endif /* _OI_TIME_H */
    200 
    201