00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _ASTERISK_TIME_H
00024 #define _ASTERISK_TIME_H
00025
00026 #include <sys/time.h>
00027
00028 #include "asterisk/inline_api.h"
00029
00030
00031
00032
00033 extern struct timeval tv;
00034 typedef typeof(tv.tv_sec) ast_time_t;
00035 typedef typeof(tv.tv_usec) ast_suseconds_t;
00036
00037
00038
00039
00040
00041
00042
00043 AST_INLINE_API(
00044 int ast_tvdiff_ms(struct timeval end, struct timeval start),
00045 {
00046
00047
00048
00049
00050
00051 return ((end.tv_sec - start.tv_sec) * 1000) +
00052 (((1000000 + end.tv_usec - start.tv_usec) / 1000) - 1000);
00053 }
00054 )
00055
00056
00057
00058
00059 AST_INLINE_API(
00060 int ast_tvzero(const struct timeval t),
00061 {
00062 return (t.tv_sec == 0 && t.tv_usec == 0);
00063 }
00064 )
00065
00066
00067
00068
00069
00070 AST_INLINE_API(
00071 int ast_tvcmp(struct timeval _a, struct timeval _b),
00072 {
00073 if (_a.tv_sec < _b.tv_sec)
00074 return -1;
00075 if (_a.tv_sec > _b.tv_sec)
00076 return 1;
00077
00078 if (_a.tv_usec < _b.tv_usec)
00079 return -1;
00080 if (_a.tv_usec > _b.tv_usec)
00081 return 1;
00082 return 0;
00083 }
00084 )
00085
00086
00087
00088
00089 AST_INLINE_API(
00090 int ast_tveq(struct timeval _a, struct timeval _b),
00091 {
00092 return (_a.tv_sec == _b.tv_sec && _a.tv_usec == _b.tv_usec);
00093 }
00094 )
00095
00096
00097
00098
00099 AST_INLINE_API(
00100 struct timeval ast_tvnow(void),
00101 {
00102 struct timeval t;
00103 gettimeofday(&t, NULL);
00104 return t;
00105 }
00106 )
00107
00108
00109
00110
00111 struct timeval ast_tvadd(struct timeval a, struct timeval b);
00112
00113
00114
00115
00116 struct timeval ast_tvsub(struct timeval a, struct timeval b);
00117
00118
00119
00120
00121 AST_INLINE_API(
00122 struct timeval ast_tv(ast_time_t sec, ast_suseconds_t usec),
00123 {
00124 struct timeval t;
00125 t.tv_sec = sec;
00126 t.tv_usec = usec;
00127 return t;
00128 }
00129 )
00130
00131
00132
00133
00134
00135
00136 AST_INLINE_API(
00137 struct timeval ast_samp2tv(unsigned int _nsamp, unsigned int _rate),
00138 {
00139 return ast_tv(_nsamp / _rate, (_nsamp % _rate) * (1000000 / _rate));
00140 }
00141 )
00142
00143 #endif