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
77#ifdef ENERGEST_CONF_GET_TOTAL_TIME
78#define ENERGEST_GET_TOTAL_TIME ENERGEST_CONF_GET_TOTAL_TIME
80#define ENERGEST_GET_TOTAL_TIME energest_get_total_time
91typedef enum energest_type {
94 ENERGEST_TYPE_DEEP_LPM,
95 ENERGEST_TYPE_TRANSMIT,
98#ifdef ENERGEST_CONF_PLATFORM_ADDITIONS
99 ENERGEST_CONF_PLATFORM_ADDITIONS,
102#ifdef ENERGEST_CONF_ADDITIONS
103 ENERGEST_CONF_ADDITIONS,
109void energest_init(
void);
110void energest_flush(
void);
112uint64_t ENERGEST_GET_TOTAL_TIME(
void);
116extern uint64_t energest_total_time[ENERGEST_TYPE_MAX];
117extern ENERGEST_TIME_T energest_current_time[ENERGEST_TYPE_MAX];
118extern unsigned char energest_current_mode[ENERGEST_TYPE_MAX];
120static inline uint64_t
121energest_type_time(energest_type_t type)
123 return energest_total_time[type];
127energest_type_set(energest_type_t type, uint64_t value)
129 energest_total_time[type] = value;
133energest_on(energest_type_t type)
135 if(energest_current_mode[type] == 0) {
136 energest_current_time[type] = ENERGEST_CURRENT_TIME();
137 energest_current_mode[type] = 1;
140#define ENERGEST_ON(type) energest_on(type)
143energest_off(energest_type_t type)
145 if(energest_current_mode[type] != 0) {
146 energest_total_time[type] +=
147 (ENERGEST_TIME_T)(ENERGEST_CURRENT_TIME() - energest_current_time[type]);
148 energest_current_mode[type] = 0;
151#define ENERGEST_OFF(type) energest_off(type)
154energest_switch(energest_type_t type_off, energest_type_t type_on)
156 ENERGEST_TIME_T energest_local_variable_now = ENERGEST_CURRENT_TIME();
157 if(energest_current_mode[type_off] != 0) {
158 energest_total_time[type_off] += (ENERGEST_TIME_T)
159 (energest_local_variable_now - energest_current_time[type_off]);
160 energest_current_mode[type_off] = 0;
162 if(energest_current_mode[type_on] == 0) {
163 energest_current_time[type_on] = energest_local_variable_now;
164 energest_current_mode[type_on] = 1;
167#define ENERGEST_SWITCH(type_off, type_on) energest_switch(type_off, type_on)
171static inline uint64_t energest_type_time(energest_type_t type) {
return 0; }
173static inline void energest_type_set(energest_type_t type, uint64_t time) { }
175static inline void energest_on(energest_type_t type) { }
177static inline void energest_off(energest_type_t type) { }
179static inline void energest_switch(energest_type_t type_off,
180 energest_type_t type_on)
184#define ENERGEST_ON(type) do { } while(0)
185#define ENERGEST_OFF(type) do { } while(0)
186#define ENERGEST_SWITCH(type_off, type_on) do { } while(0)