globfree(&glob_buf);
return sum_energy;
}
+
/*
* Calculates difference between current and previous sample (system).
* Stores mutable state in static variables.
*/
static uint32_t pop_sys_energy_per_device(enum supported_device dev)
{
- static uint64_t cpu_old, flash_old, lcd_old;
- uint64_t cpu_new, flash_new, lcd_new;
- uint64_t cpu_diff, flash_diff, lcd_diff;
+ static uint64_t cpu_old, flash_old, lcd_old, wifi_old, bt_old;
+ uint64_t cpu_new, flash_new, lcd_new, wifi_new, bt_new;
+ uint64_t cpu_diff, flash_diff, lcd_diff, wifi_diff, bt_diff;
switch (dev) {
case DEVICE_CPU:
lcd_diff = val_diff(lcd_new, lcd_old);
lcd_old = lcd_new;
return (uint32_t)lcd_diff;
+ case DEVICE_WIFI:
+ wifi_new = swap_read_int64(wf_send/system) +
+ swap_read_int64(wf_recv/system);
+ wifi_diff = val_diff(wifi_new, wifi_old);
+ wifi_old = wifi_new;
+ return (uint32_t)wifi_diff;
+ case DEVICE_BT:
+ bt_new = swap_read_int64(hci_send_sco/system) +
+ swap_read_int64(hci_send_acl/system) +
+ swap_read_int64(sco_recv_scodata/system) +
+ swap_read_int64(l2cap_recv_acldata/system);
+ bt_diff = val_diff(bt_new, bt_old);
+ bt_old = bt_new;
+ return (uint32_t)bt_diff;
+
+
default:
assert(0 && "Unknown device. This should not happen");
return -41;
// Stores mutable state in static variables.
static uint32_t pop_app_energy_per_device(enum supported_device dev)
{
- static uint64_t cpu_old, flash_old;
- uint64_t cpu_new, flash_new;
- uint64_t cpu_diff, flash_diff;
+ static uint64_t cpu_old, flash_old, wifi_old, bt_old;
+ uint64_t cpu_new, flash_new, wifi_new, bt_new;
+ uint64_t cpu_diff, flash_diff, wifi_diff, bt_diff;
switch (dev) {
case DEVICE_CPU:
* is not supported for LCD.
*/
return 0;
+ case DEVICE_WIFI:
+ wifi_new = swap_read_int64(wf_send/apps) +
+ swap_read_int64(wf_recv/apps);
+ wifi_diff = val_diff(wifi_new, wifi_old);
+ wifi_old = wifi_new;
+ return (uint32_t)wifi_diff;
+ case DEVICE_BT:
+ bt_new = swap_read_int64(hci_send_sco/apps) +
+ swap_read_int64(hci_send_acl/apps) +
+ swap_read_int64(sco_recv_scodata/apps) +
+ swap_read_int64(l2cap_recv_acldata/apps);
+ bt_diff = val_diff(bt_new, bt_old);
+ bt_old = bt_new;
+ return (uint32_t)bt_diff;
+
+
default:
assert(0 && "Unknown device. This should not happen");
return -41;