45#ifndef ENERGEST_CONF_ON
47#define ENERGEST_CONF_ON 0
50#ifndef ENERGEST_CURRENT_TIME
51#ifdef ENERGEST_CONF_CURRENT_TIME
52#define ENERGEST_CURRENT_TIME ENERGEST_CONF_CURRENT_TIME
54#define ENERGEST_CURRENT_TIME RTIMER_NOW
55#define ENERGEST_SECOND RTIMER_SECOND
56#define ENERGEST_TIME_T rtimer_clock_t
60#ifndef ENERGEST_TIME_T
61#ifdef ENERGEST_CONF_TIME_T
62#define ENERGEST_TIME_T ENERGEST_CONF_TIME_T
64#define ENERGEST_TIME_T rtimer_clock_t
68#ifndef ENERGEST_SECOND
69#ifdef ENERGEST_CONF_SECOND
70#define ENERGEST_SECOND ENERGEST_CONF_SECOND
72#define ENERGEST_SECOND RTIMER_SECOND
76#ifndef ENERGEST_GET_TOTAL_TIME
78#ifdef ENERGEST_CONF_GET_TOTAL_TIME
79#define ENERGEST_GET_TOTAL_TIME ENERGEST_CONF_GET_TOTAL_TIME
81#define ENERGEST_GET_TOTAL_TIME energest_get_total_time
84#define ENERGEST_GET_TOTAL_TIME()
95typedef enum energest_type {
98 ENERGEST_TYPE_DEEP_LPM,
99 ENERGEST_TYPE_TRANSMIT,
100 ENERGEST_TYPE_LISTEN,
102#ifdef ENERGEST_CONF_PLATFORM_ADDITIONS
103 ENERGEST_CONF_PLATFORM_ADDITIONS,
106#ifdef ENERGEST_CONF_ADDITIONS
107 ENERGEST_CONF_ADDITIONS,
115void energest_init(
void);
116void energest_flush(
void);
118uint64_t ENERGEST_GET_TOTAL_TIME(
void);
120extern uint64_t energest_total_time[ENERGEST_TYPE_MAX];
121extern ENERGEST_TIME_T energest_current_time[ENERGEST_TYPE_MAX];
122extern bool energest_current_mode[ENERGEST_TYPE_MAX];
124static inline uint64_t
125energest_type_time(energest_type_t type)
127 return energest_total_time[type];
131energest_type_set(energest_type_t type, uint64_t value)
133 energest_total_time[type] = value;
137energest_on(energest_type_t type)
139 if(!energest_current_mode[type]) {
140 energest_current_time[type] = ENERGEST_CURRENT_TIME();
141 energest_current_mode[type] =
true;
144#define ENERGEST_ON(type) energest_on(type)
147energest_off(energest_type_t type)
149 if(energest_current_mode[type]) {
150 energest_total_time[type] +=
151 (ENERGEST_TIME_T)(ENERGEST_CURRENT_TIME() - energest_current_time[type]);
152 energest_current_mode[type] =
false;
155#define ENERGEST_OFF(type) energest_off(type)
158energest_switch(energest_type_t type_off, energest_type_t type_on)
160 ENERGEST_TIME_T energest_local_variable_now = ENERGEST_CURRENT_TIME();
161 if(energest_current_mode[type_off]) {
162 energest_total_time[type_off] += (ENERGEST_TIME_T)
163 (energest_local_variable_now - energest_current_time[type_off]);
164 energest_current_mode[type_off] =
false;
166 if(!energest_current_mode[type_on]) {
167 energest_current_time[type_on] = energest_local_variable_now;
168 energest_current_mode[type_on] =
true;
171#define ENERGEST_SWITCH(type_off, type_on) energest_switch(type_off, type_on)
175static inline void energest_init(
void) { }
177static inline void energest_flush(
void) { }
179static inline uint64_t energest_type_time(energest_type_t type) {
return 0; }
181static inline void energest_type_set(energest_type_t type, uint64_t time) { }
183static inline void energest_on(energest_type_t type) { }
185static inline void energest_off(energest_type_t type) { }
187static inline void energest_switch(energest_type_t type_off,
188 energest_type_t type_on)
192#define ENERGEST_ON(type) do { } while(0)
193#define ENERGEST_OFF(type) do { } while(0)
194#define ENERGEST_SWITCH(type_off, type_on) do { } while(0)