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:
Simon Duquennoy 2017-10-31 23:24:12 +01:00 committed by GitHub
commit 1275c4cb9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 56 additions and 13 deletions

View File

@ -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();
}

View File

@ -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();
}

View File

@ -40,6 +40,7 @@
#include "net/netstack.h"
#include "net/packetbuf.h"
#include "dev/watchdog.h"
#include "sys/energest.h"
#include "dev/leds.h"

View File

@ -36,6 +36,7 @@
#include <string.h>
#include "contiki.h"
#include "sys/energest.h"
#include "dev/leds.h"
#include "dev/spi.h"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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();

View File

@ -49,6 +49,4 @@
#include "sys/clock.h"
#include "sys/energest.h"
#endif /* CONTIKI_H_ */

View File

@ -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 */

View File

@ -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) {