diff options
author | Dirk Brandewie <dirk.brandewie@gmail.com> | 2012-06-12 08:57:14 -0700 |
---|---|---|
committer | Chris E Ferron <chris.e.ferron@linux.intel.com> | 2012-06-12 09:33:26 -0700 |
commit | 035c28b60c764ce465488042edbad926540c316b (patch) | |
tree | a3e704e75266660a1f5b802fd150b2ec3ef1d137 | |
parent | 9db6fd2da221d31c086ca2812b81033307e33fa7 (diff) |
Add collection of average power during measurement.
Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
-rw-r--r-- | src/measurement/extech.cpp | 45 | ||||
-rw-r--r-- | src/measurement/extech.h | 8 |
2 files changed, 50 insertions, 3 deletions
diff --git a/src/measurement/extech.cpp b/src/measurement/extech.cpp index e9d1768..4e8bf8a 100644 --- a/src/measurement/extech.cpp +++ b/src/measurement/extech.cpp @@ -293,15 +293,56 @@ void extech_power_meter::measure(void) } +void extech_power_meter::sample(void) +{ + ssize_t ret; + struct timespec tv; + + tv.tv_sec = 0; + tv.tv_nsec = 200000000; + while (!end_thread) { + nanosleep(&tv, NULL); + /* trigger the extech to send data */ + ret = write(fd, " ", 1); + if (ret < 0) + continue; + + sum += extech_read(fd); + samples++; + + } +} + +extern "C" +{ + void* thread_proc(void *arg) + { + class extech_power_meter *parent; + parent = (class extech_power_meter*)arg; + parent->sample(); + return 0; + } +} void extech_power_meter::end_measurement(void) { - measure(); + end_thread = 1; + pthread_join( thread, NULL); + if (samples){ + rate = sum / samples; + } + else + measure(); } void extech_power_meter::start_measurement(void) { - /* ACPI battery state is a lagging indication, lets only measure at the end */ + end_thread = 0; + sum = samples = 0; + + if (pthread_create(&thread, NULL, thread_proc, this)) + fprintf(stderr, "ERROR: extech measurement thread creation failed\n"); + } diff --git a/src/measurement/extech.h b/src/measurement/extech.h index 98f854b..5f4c338 100644 --- a/src/measurement/extech.h +++ b/src/measurement/extech.h @@ -25,6 +25,7 @@ #ifndef __INCLUDE_GUARD_EXTECH_H #define __INCLUDE_GUARD_EXTECH_H +#include <pthread.h> #include "measurement.h" class extech_power_meter: public power_meter { @@ -33,11 +34,16 @@ class extech_power_meter: public power_meter { double rate; void measure(void); + double sum; + int samples; + int end_thread; + pthread_t thread; public: extech_power_meter(const char *_dev_name); virtual void start_measurement(void); virtual void end_measurement(void); - + virtual void sample(void); + virtual double joules_consumed(void); virtual double dev_capacity(void) { return 0.0; }; }; |