blob: f45cf4b21fd5dc5ed52232a0a9470b00fe226c51 [file] [log] [blame]
// Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#if !defined(TIMER_H_07282008)
#define TIMER_H_07282008
#include <pthread.h>
#include <sys/time.h>
#define CM_PTHREAD_TIMER
#if defined(CM_PTHREAD_TIMER)
#include "list.h"
typedef struct cm_timer_obj_s {
struct list_head to_list;
unsigned to_created;
pthread_mutex_t to_lock;
struct timespec to_ts;
int to_active;
void *to_data;
void (*to_callback)(void *data);
/*debug info*/
void *to_caller;
} cm_timer_obj_t;
#else
typedef struct cm_timer_obj_s {
unsigned to_created;
void *to_id;
void *to_data;
void (*to_callback)(void *data);
} cm_timer_obj_t;
#endif
#define cm_time2ms(time_ptr) (((time_ptr)->tv_sec * 1000) + ((time_ptr)->tv_usec / 1000))
static inline const char *cm_get_date(time_t *t)
{
static char buf[64];
struct tm *tm;
tm = localtime(t);
sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
return buf;
}
static inline const char *cm_get_cur_date(void)
{
time_t t;
time(&t);
return cm_get_date(&t);
}
static inline int cm_gettimemsofday(void)
{
struct timeval time;
gettimeofday(&time, NULL);
return cm_time2ms(&time);
}
#if defined(CM_PTHREAD_TIMER)
int cm_timer_module_init(void);
void cm_timer_module_deinit(void);
#else
#define cm_timer_module_init()
#define cm_timer_module_deinit()
#endif
int cm_init_timer(cm_timer_obj_t *timer, void (*callback)(void *), void *data);
int cm_start_timer(cm_timer_obj_t *timer, int expire_milisec);
#if defined(CM_PTHREAD_TIMER)
int cm_stop_timer(cm_timer_obj_t *timer);
#else
#define cm_stop_timer(timer) cm_start_timer(timer, 0)
#endif
int cm_del_timer(cm_timer_obj_t *timer);
#endif