13 static int curr_brightness;
14 static int display_state;
15 static float total_power_cons = 0;
16 static time_t last_change_time;
18 static int get_brightness_file(char *file)
20 const char *brightness_dir = "/sys/class/backlight/";
21 struct dirent *entry = NULL;
26 dir = opendir(brightness_dir);
29 _E("opendir failed: %s", strerror(errno));
37 _E("readdir failed: %s", strerror(errno));
41 } while (entry->d_name[0] == '.');
43 ret = sprintf(file, "%s/%s/brightness", brightness_dir, entry->d_name);
46 _E("asprintf failed: %s", strerror(errno));
53 _E("closedir failed: %s", strerror(errno));
60 static int read_curr_brightness()
67 ret = get_brightness_file(file);
69 _E("get_brightness_file failed");
73 fp = fopen(file, "r");
76 _E("fopen failed: %s", strerror(errno));
80 if (fscanf(fp, "%d", &brightness) != 1) {
83 _E("fscanf failed: %s", strerror(errno));
89 _E("close failed: %s", strerror(errno));
96 float backlight_curr_power_cons()
98 double a = config_get_double("backlight_a", 0, NULL);
99 double b = config_get_double("backlight_b", 0, NULL);
100 double c = config_get_double("backlight_c", 0, NULL);
101 double k = config_get_double("backlight_k", 0, NULL);
103 double x = curr_brightness;
107 return a * x * x * x + b * x * x + c * x + k;
110 static void recalc_total_power_cons()
112 float curr_power_cons = backlight_curr_power_cons();
113 time_t t = getSecTime();
116 (curr_power_cons / 3600 * 1000) * (t - last_change_time);
117 last_change_time = t;
122 display_state = 1; /* TODO: check it, may be neet to read it by vconf */
123 curr_brightness = read_curr_brightness();
124 if (curr_brightness < 0) {
125 _E("read_curr_brightness failed: curr_brightness set as 0");
128 last_change_time = getSecTime();
133 int brightness_change_event_handler(struct logd_grabber_event *event)
135 recalc_total_power_cons();
137 curr_brightness = atoi(event->message);
142 int display_on_off_event_handler(struct logd_grabber_event *event)
144 recalc_total_power_cons();
146 if (event->action == LOGD_ON) {
148 } else if (event->action == LOGD_OFF) {
155 float get_display_curr_power_cons()
157 return backlight_curr_power_cons();
160 float get_display_total_power_cons()
162 recalc_total_power_cons();
164 return total_power_cons;