Merge pull request #139 from nfi/contrib/energest-deep-lpm
New energest type for deep sleep plus configurable type for Energest time source
This commit is contained in:
commit
1275c4cb9e
|
@ -32,6 +32,7 @@
|
|||
#include "contiki.h"
|
||||
#include "sys/clock.h"
|
||||
#include "sys/etimer.h"
|
||||
#include "sys/energest.h"
|
||||
#include "rtimer-arch.h"
|
||||
#include "dev/watchdog.h"
|
||||
#include "isr_compat.h"
|
||||
|
@ -86,6 +87,7 @@ ISR(TIMERA1, timera1)
|
|||
#endif
|
||||
if(count % CLOCK_CONF_SECOND == 0) {
|
||||
++seconds;
|
||||
energest_flush();
|
||||
}
|
||||
last_tar = read_tar();
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include "contiki.h"
|
||||
#include "sys/clock.h"
|
||||
#include "sys/etimer.h"
|
||||
#include "sys/energest.h"
|
||||
#include "rtimer-arch.h"
|
||||
#include "dev/watchdog.h"
|
||||
#include "isr_compat.h"
|
||||
|
@ -86,6 +87,7 @@ ISR(TIMER1_A1, timera1)
|
|||
#endif
|
||||
if(count % CLOCK_CONF_SECOND == 0) {
|
||||
++seconds;
|
||||
energest_flush();
|
||||
}
|
||||
last_tar = read_tar();
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "net/netstack.h"
|
||||
#include "net/packetbuf.h"
|
||||
#include "dev/watchdog.h"
|
||||
#include "sys/energest.h"
|
||||
|
||||
#include "dev/leds.h"
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "contiki.h"
|
||||
#include "sys/energest.h"
|
||||
|
||||
#include "dev/leds.h"
|
||||
#include "dev/spi.h"
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "contiki.h"
|
||||
#include "dev/leds.h"
|
||||
#include "sys/rtimer.h"
|
||||
#include "sys/energest.h"
|
||||
#include "net/packetbuf.h"
|
||||
#include "net/netstack.h"
|
||||
#include "net/mac/framer/frame802154.h"
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#include "dev/uart-driver.h"
|
||||
|
||||
#include "contiki.h"
|
||||
#include "sys/energest.h"
|
||||
#include "net/netstack.h"
|
||||
|
||||
#include "dev/serial-line.h"
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "contiki.h"
|
||||
#include "sys/energest.h"
|
||||
#include "cc2420.h"
|
||||
#include "dev/ds2411/ds2411.h"
|
||||
#include "dev/leds.h"
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#include "contiki.h"
|
||||
#include "contiki-net.h"
|
||||
#include "sys/platform.h"
|
||||
#include "sys/energest.h"
|
||||
#include "dev/watchdog.h"
|
||||
|
||||
#if BUILD_WITH_ORCHESTRA
|
||||
|
@ -79,7 +80,6 @@ main(void)
|
|||
watchdog_init();
|
||||
|
||||
energest_init();
|
||||
ENERGEST_ON(ENERGEST_TYPE_CPU);
|
||||
|
||||
platform_init_stage_two();
|
||||
|
||||
|
|
|
@ -49,6 +49,4 @@
|
|||
|
||||
#include "sys/clock.h"
|
||||
|
||||
#include "sys/energest.h"
|
||||
|
||||
#endif /* CONTIKI_H_ */
|
||||
|
|
|
@ -37,13 +37,13 @@
|
|||
* Adam Dunkels <adam@sics.se>
|
||||
*/
|
||||
|
||||
#include "sys/energest.h"
|
||||
#include "contiki.h"
|
||||
#include "sys/energest.h"
|
||||
|
||||
#if ENERGEST_CONF_ON
|
||||
|
||||
uint64_t energest_total_time[ENERGEST_TYPE_MAX];
|
||||
uint64_t energest_current_time[ENERGEST_TYPE_MAX];
|
||||
ENERGEST_TIME_T energest_current_time[ENERGEST_TYPE_MAX];
|
||||
unsigned char energest_current_mode[ENERGEST_TYPE_MAX];
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
@ -52,9 +52,10 @@ energest_init(void)
|
|||
{
|
||||
int i;
|
||||
for(i = 0; i < ENERGEST_TYPE_MAX; ++i) {
|
||||
energest_total_time[i].current = energest_current_time[i] = 0;
|
||||
energest_total_time[i] = energest_current_time[i] = 0;
|
||||
energest_current_mode[i] = 0;
|
||||
}
|
||||
ENERGEST_ON(ENERGEST_TYPE_CPU);
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
void
|
||||
|
@ -65,12 +66,21 @@ energest_flush(void)
|
|||
for(i = 0; i < ENERGEST_TYPE_MAX; i++) {
|
||||
if(energest_current_mode[i]) {
|
||||
now = ENERGEST_CURRENT_TIME();
|
||||
energest_total_time[i].current += now - energest_current_time[i];
|
||||
energest_total_time[i] +=
|
||||
(ENERGEST_TIME_T)(now - energest_current_time[i]);
|
||||
energest_current_time[i] = now;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
uint64_t
|
||||
energest_get_total_time(void)
|
||||
{
|
||||
return energest_type_time(ENERGEST_TYPE_CPU) +
|
||||
energest_type_time(ENERGEST_TYPE_LPM) +
|
||||
energest_type_time(ENERGEST_TYPE_DEEP_LPM);
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
#else /* ENERGEST_CONF_ON */
|
||||
|
||||
void
|
||||
|
@ -83,4 +93,10 @@ energest_flush(void)
|
|||
{
|
||||
}
|
||||
|
||||
uint64_t
|
||||
energest_get_total_time(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* ENERGEST_CONF_ON */
|
||||
|
|
|
@ -48,9 +48,18 @@
|
|||
#else
|
||||
#define ENERGEST_CURRENT_TIME RTIMER_NOW
|
||||
#define ENERGEST_SECOND RTIMER_SECOND
|
||||
#define ENERGEST_TIME_T rtimer_clock_t
|
||||
#endif /* ENERGEST_CONF_TIME */
|
||||
#endif /* ENERGEST_TIME */
|
||||
|
||||
#ifndef ENERGEST_TIME_T
|
||||
#ifdef ENERGEST_CONF_TIME_T
|
||||
#define ENERGEST_TIME_T ENERGEST_CONF_TIME_T
|
||||
#else
|
||||
#define ENERGEST_TIME_T rtimer_clock_t
|
||||
#endif /* ENERGEST_CONF_TIME_T */
|
||||
#endif /* ENERGEST_TIME_T */
|
||||
|
||||
#ifndef ENERGEST_SECOND
|
||||
#ifdef ENERGEST_CONF_SECOND
|
||||
#define ENERGEST_SECOND ENERGEST_CONF_SECOND
|
||||
|
@ -59,6 +68,14 @@
|
|||
#endif /* ENERGEST_CONF_SECOND */
|
||||
#endif /* ENERGEST_SECOND */
|
||||
|
||||
#ifndef ENERGEST_GET_TOTAL_TIME
|
||||
#ifdef ENERGEST_CONF_GET_TOTAL_TIME
|
||||
#define ENERGEST_GET_TOTAL_TIME ENERGEST_CONF_GET_TOTAL_TIME
|
||||
#else /* ENERGEST_CONF_GET_TOTAL_TIME */
|
||||
#define ENERGEST_GET_TOTAL_TIME energest_get_total_time
|
||||
#endif /* ENERGEST_CONF_GET_TOTAL_TIME */
|
||||
#endif /* ENERGEST_GET_TOTAL_TIME */
|
||||
|
||||
/*
|
||||
* Optional support for more energest types.
|
||||
*
|
||||
|
@ -69,6 +86,7 @@
|
|||
typedef enum energest_type {
|
||||
ENERGEST_TYPE_CPU,
|
||||
ENERGEST_TYPE_LPM,
|
||||
ENERGEST_TYPE_DEEP_LPM,
|
||||
ENERGEST_TYPE_TRANSMIT,
|
||||
ENERGEST_TYPE_LISTEN,
|
||||
|
||||
|
@ -86,10 +104,12 @@ typedef enum energest_type {
|
|||
void energest_init(void);
|
||||
void energest_flush(void);
|
||||
|
||||
uint64_t ENERGEST_GET_TOTAL_TIME(void);
|
||||
|
||||
#if ENERGEST_CONF_ON
|
||||
|
||||
extern uint64_t energest_total_time[ENERGEST_TYPE_MAX];
|
||||
extern uint64_t energest_current_time[ENERGEST_TYPE_MAX];
|
||||
extern ENERGEST_TIME_T energest_current_time[ENERGEST_TYPE_MAX];
|
||||
extern unsigned char energest_current_mode[ENERGEST_TYPE_MAX];
|
||||
|
||||
static inline uint64_t
|
||||
|
@ -118,8 +138,8 @@ static inline void
|
|||
energest_off(energest_type_t type)
|
||||
{
|
||||
if(energest_current_mode[type] != 0) {
|
||||
energest_total_time[type].current +=
|
||||
ENERGEST_CURRENT_TIME() - energest_current_time[type];
|
||||
energest_total_time[type] +=
|
||||
(ENERGEST_TIME_T)(ENERGEST_CURRENT_TIME() - energest_current_time[type]);
|
||||
energest_current_mode[type] = 0;
|
||||
}
|
||||
}
|
||||
|
@ -128,10 +148,10 @@ energest_off(energest_type_t type)
|
|||
static inline void
|
||||
energest_switch(energest_type_t type_off, energest_type_t type_on)
|
||||
{
|
||||
uint64_t energest_local_variable_now = ENERGEST_CURRENT_TIME();
|
||||
ENERGEST_TIME_T energest_local_variable_now = ENERGEST_CURRENT_TIME();
|
||||
if(energest_current_mode[type_off] != 0) {
|
||||
energest_total_time[type_off].current +=
|
||||
energest_local_variable_now - energest_current_time[type_off];
|
||||
energest_total_time[type_off] += (ENERGEST_TIME_T)
|
||||
(energest_local_variable_now - energest_current_time[type_off]);
|
||||
energest_current_mode[type_off] = 0;
|
||||
}
|
||||
if(energest_current_mode[type_on] == 0) {
|
||||
|
|
Loading…
Reference in New Issue