tizen 2.3 release
[framework/system/deviced.git] / src / logd_grabber / mmc.c
1 #include <errno.h>
2 #include <stdint.h>
3 #include <stdio.h>
4 #include <string.h>
5
6 #include "core/log.h"
7 #include "config.h"
8 #include "mmc.h"
9
10 static int mmc_write_sectors_per_uah;
11 static int mmc_read_sectors_per_uah;
12
13 static int get_number_sectors(uint64_t *_read, uint64_t *_written)
14 {
15         const char *path = "/sys/block/mmcblk0/stat";
16         FILE *fp = NULL;
17         int ret;
18
19         fp = fopen(path, "r");
20         if (!fp) {
21                 ret = -errno;
22                 _E("fopen failed: %s", strerror(errno));
23                 return ret;
24         }
25         if (fscanf(fp, "%*s %*s %lld %*s %*s %*s %lld", _read, _written) < 2) {
26                 _E("Can't read number of sectors from %s", path);
27                 fclose(fp);
28                 return -1;
29         }
30
31         if (fclose(fp) < 0) {
32                 ret = -errno;
33                 _E("fclose failed: %s", strerror(errno));
34                 return ret;
35         }
36
37         return 0;
38 }
39
40 int mmc_init()
41 {
42         mmc_write_sectors_per_uah =
43                 config_get_int("mmc_write_sectors_per_uah", 2820, NULL);
44         mmc_read_sectors_per_uah =
45                 config_get_int("mmc_read_sectors_per_uah", 4708, NULL);
46
47         return 0;
48 }
49
50 float mmc_power_cons()
51 {
52         uint64_t _read, _written;
53
54         if (get_number_sectors(&_read, &_written) < 0) {
55                 _E("get_number_sectors failed");
56                 return 0;
57         }
58
59         return _read / mmc_read_sectors_per_uah + _written / mmc_write_sectors_per_uah;
60 }