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