2 * Copyright (c) 2019 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License")
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
26 #include <tzplatform_config.h>
28 #include "bm_private.h"
29 #include "bd_private.h"
30 #include "bm_server_db.h"
31 #include "bm_common.h"
35 #define BM_DB_OPEN_READONLY 0
36 #define BM_DB_OPEN_READWRITE 1
38 static sqlite3* g_hBatteryMonitorDB = NULL;
39 static sqlite3* g_hBatteryMonitorDB2 = NULL;
41 static pthread_mutex_t battery_monitor_mutex;
43 static const char* bm_db_err_msg(sqlite3 *bm_db_handle)
45 return sqlite3_errmsg(bm_db_handle);
48 static int bm_db_err_code(sqlite3 *bm_db_handle)
50 return sqlite3_errcode(bm_db_handle);
53 char* bm_dup_text(const char *text_data)
57 char *text_value = NULL;
59 if (text_data != NULL)
60 text_value = strdup(text_data);
66 static bm_stmt bm_prepare_query(sqlite3 *bm_db_handle, char *query)
73 BM_RETURN_VAL((query != NULL), {}, NULL, ("query is NULL"));
75 rc = sqlite3_prepare_v2(bm_db_handle, query, strlen(query), &pStmt, NULL);
76 BM_RETURN_VAL((SQLITE_OK == rc), {}, NULL, ("sqlite3_prepare_v2() failed(%s).",
77 bm_db_err_msg(bm_db_handle)));
83 static int bm_execute_query(sqlite3 *bm_db_handle, const char *query)
88 char *pszErrorMsg = NULL;
92 return BATTERY_MONITOR_ERROR_QUERY_SYNTAX_ERROR;
95 _ERR("DB is not opened\n");
96 return BATTERY_MONITOR_ERROR_DB_NOT_OPENED;
99 rc = sqlite3_exec(bm_db_handle, query, NULL, NULL, &pszErrorMsg);
100 if (SQLITE_OK != rc) {
101 _ERR("sqlite3_exec rc(%d) failed(%s).", rc, pszErrorMsg);
102 sqlite3_free(pszErrorMsg);
109 static int bm_query_finalize(bm_stmt pStmt)
116 _ERR("pStmt is NULL");
117 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
120 rc = sqlite3_finalize(pStmt);
121 if (rc == SQLITE_BUSY) {
122 _ERR(" sqlite3 busy = %d", rc);
123 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
124 } else if (rc != SQLITE_OK) {
125 _ERR("sqlite3_finalize fail, rc : %d\n", rc);
126 return BATTERY_MONITOR_ERROR_DB_FAILED;
130 return BATTERY_MONITOR_ERROR_NONE;
133 static int bm_query_step(bm_stmt pStmt)
138 _ERR("pStmt is NULL");
142 return sqlite3_step(pStmt);
145 static int bm_begin_transaction(sqlite3 *bm_db_handle)
151 ret = bm_execute_query(bm_db_handle, "BEGIN IMMEDIATE TRANSACTION");
153 if (ret == SQLITE_BUSY) {
154 _ERR(" sqlite3 busy = %d", ret);
155 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
156 } else if (ret != SQLITE_OK) {
157 _ERR("bm_svc_begin_transaction fail :: %d", ret);
158 return BATTERY_MONITOR_ERROR_DB_FAILED;
162 return BATTERY_MONITOR_ERROR_NONE;
165 int bm_get_next_sequence(sqlite3 *bm_db_handle, const char *pszName)
170 bm_stmt pStmt = NULL;
173 char szQuery[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
174 BM_MEMSET(szQuery, 0x00, sizeof(szQuery));
176 BM_SNPRINTF(szQuery, sizeof(szQuery), "SELECT max(seq) FROM %s where name = '%s'",
177 BATTERY_MONITOR_SQLITE_SEQ, pszName);
179 rc = sqlite3_prepare_v2(bm_db_handle, szQuery, strlen(szQuery), &pStmt, NULL);
180 if (SQLITE_OK != rc) {
181 BM_SLOGE("sqlite3_prepare_v2() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
182 sqlite3_finalize(pStmt);
183 return BATTERY_MONITOR_ERROR_DB_FAILED;
186 rc = sqlite3_step(pStmt);
188 max_seq = sqlite3_column_int(pStmt, 0);
192 rc = sqlite3_finalize(pStmt);
199 static int bm_end_transaction(sqlite3 *bm_db_handle, bool is_success)
205 if (is_success == true) {
206 ret = bm_execute_query(bm_db_handle, "COMMIT TRANSACTION");
207 _DBG("bm_end_transaction COMMIT");
209 ret = bm_execute_query(bm_db_handle, "ROLLBACK TRANSACTION");
210 _DBG("bm_end_transaction ROLLBACK");
212 if (ret == SQLITE_PERM) {
213 _ERR("Battery Monitor permission denied :: %d", ret);
214 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
216 if (ret == SQLITE_BUSY) {
217 _DBG(" sqlite3 busy = %d", ret);
218 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
220 if (ret != SQLITE_OK) {
221 _ERR("bm_svc_end_transaction fail :: %d", ret);
222 return BATTERY_MONITOR_ERROR_DB_FAILED;
226 return BATTERY_MONITOR_ERROR_NONE;
229 static int bm_query_bind_int(bm_stmt pStmt, int pos, int num)
234 _ERR("statement is null");
243 return sqlite3_bind_int(pStmt, pos, num);
246 static int bm_query_bind_text(bm_stmt pStmt, int pos, const char *str)
251 _ERR("statement is null");
255 _INFO("sqlite3_bind_text");
256 return sqlite3_bind_text(pStmt, pos, (const char *)str, strlen(str), SQLITE_STATIC);
258 _INFO("sqlite3_bind_null");
259 return sqlite3_bind_null(pStmt, pos);
263 static int bm_query_table_column_int(bm_stmt pStmt, int pos)
268 _ERR("statement is null");
276 return sqlite3_column_int(pStmt, pos);
279 static const char* bm_query_table_column_text(bm_stmt pStmt, int pos)
284 _ERR("statement is null");
292 return (const char *)sqlite3_column_text(pStmt, pos);
295 static void bm_db_data_to_text(const char *textbuf, char **output)
304 *output = strdup(textbuf);
310 static int bm_db_handle_close(sqlite3 *bm_db_handle)
315 int ret = BATTERY_MONITOR_ERROR_NONE;
318 rc = db_util_close(bm_db_handle);
320 ret = BATTERY_MONITOR_ERROR_NONE;
321 else if (rc == SQLITE_PERM)
322 ret = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
323 else if (rc == SQLITE_BUSY)
324 ret = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
326 ret = BATTERY_MONITOR_ERROR_DB_FAILED;
333 static int bm_query_app_usage_convert_to_sql_ci(const char *str, long s_t, long e_t, bm_stmt hstmt)
338 bm_query_bind_text(hstmt, count++, str);
339 bm_query_bind_int(hstmt, count++, s_t);
340 bm_query_bind_int(hstmt, count++, e_t);
346 static int bm_appid_map_usage_convert_to_sql(const char* app_id, bm_stmt hstmt, char *sql_value)
351 bm_query_bind_text(hstmt, count++, app_id);
357 static int bm_appid_usage_convert_to_sql(appid_usage_s *bm_app_type, bm_stmt hstmt, char *sql_value)
362 bm_query_bind_text(hstmt, count++, (char *)bm_app_type->AppId);
363 bm_query_bind_int(hstmt, count++, bm_app_type->log_time);
364 bm_query_bind_int(hstmt, count++, bm_app_type->rId_ble);
365 bm_query_bind_int(hstmt, count++, bm_app_type->rId_wifi);
366 bm_query_bind_int(hstmt, count++, bm_app_type->rId_cpu);
367 bm_query_bind_int(hstmt, count++, bm_app_type->rId_display);
368 bm_query_bind_int(hstmt, count++, bm_app_type->rId_device_network);
369 #ifdef DISABLE_FEATURE_DATA_FROM_GPS_PLUGIN
370 bm_query_bind_int(hstmt, count++, bm_app_type->rId_gps);
371 bm_query_bind_int(hstmt, count++, bm_app_type->rId_battery);
377 static int bm_resourceid_usage_convert_to_sql(resourceid_usage_s *bm_resource_type, bm_stmt hstmt, char *sql_value)
382 bm_query_bind_text(hstmt, count++, (char *)bm_resource_type->ResourceId);
383 bm_query_bind_int(hstmt, count++, bm_resource_type->log_time);
384 bm_query_bind_int(hstmt, count++, bm_resource_type->usage);
390 static int bm_gl_ble_stat_convert_to_sql(bd_gl_ble_stat_s *gble_st, bm_stmt hstmt, char *sql_value)
395 bm_query_bind_int(hstmt, count++, gble_st->time_s);
396 bm_query_bind_int(hstmt, count++, gble_st->ble_idle_time);
397 bm_query_bind_int(hstmt, count++, gble_st->ble_rx_time);
398 bm_query_bind_int(hstmt, count++, gble_st->ble_tx_time);
399 bm_query_bind_int(hstmt, count++, gble_st->ble_pwi_val);
405 static int bm_gl_wfl_stat_convert_to_sql(bd_gl_wifi_stat_s *gwfl_st, bm_stmt hstmt, char *sql_value)
410 bm_query_bind_int(hstmt, count++, gwfl_st->time_s);
411 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_on_time);
412 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_conn_time);
413 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_idle_time);
414 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_rx_time);
415 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_tx_time);
416 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_pwi_val);
422 static int bm_gl_ntw_stat_convert_to_sql(bd_gl_ntw_stat_s *gn_st, bm_stmt hstmt, char *sql_value)
427 bm_query_bind_int(hstmt, count++, gn_st->time_s);
428 bm_query_bind_int(hstmt, count++, gn_st->dn_rx_byt);
429 bm_query_bind_int(hstmt, count++, gn_st->dn_tx_byt);
430 bm_query_bind_int(hstmt, count++, gn_st->wifi_rx_byt);
431 bm_query_bind_int(hstmt, count++, gn_st->wifi_tx_byt);
432 bm_query_bind_int(hstmt, count++, gn_st->dn_rx_pkt);
433 bm_query_bind_int(hstmt, count++, gn_st->dn_tx_pkt);
434 bm_query_bind_int(hstmt, count++, gn_st->wifi_rx_pkt);
435 bm_query_bind_int(hstmt, count++, gn_st->wifi_tx_pkt);
436 bm_query_bind_int(hstmt, count++, gn_st->bt_rx_byt);
437 bm_query_bind_int(hstmt, count++, gn_st->bt_tx_byt);
443 static int bm_gl_sbr_stat_convert_to_sql(bd_gl_sbr_stat_s *gbr_st, bm_stmt hstmt, char *sql_value)
448 bm_query_bind_int(hstmt, count++, gbr_st->time_s);
449 bm_query_bind_int(hstmt, count++, gbr_st->dark);
450 bm_query_bind_int(hstmt, count++, gbr_st->dim);
451 bm_query_bind_int(hstmt, count++, gbr_st->medium);
452 bm_query_bind_int(hstmt, count++, gbr_st->light);
453 bm_query_bind_int(hstmt, count++, gbr_st->bright);
459 static int bm_gl_sgt_stat_convert_to_sql(bd_gl_sgt_stat_s *gst_st, bm_stmt hstmt, char *sql_value)
464 bm_query_bind_int(hstmt, count++, gst_st->time_s);
465 bm_query_bind_int(hstmt, count++, gst_st->scan_time);
466 bm_query_bind_int(hstmt, count++, gst_st->none_time);
467 bm_query_bind_int(hstmt, count++, gst_st->poor_time);
468 bm_query_bind_int(hstmt, count++, gst_st->med_time);
469 bm_query_bind_int(hstmt, count++, gst_st->good_time);
470 bm_query_bind_int(hstmt, count++, gst_st->grt_time);
476 static int bm_gl_wst_stat_convert_to_sql(bd_gl_wst_stat_s *gwst_st, bm_stmt hstmt, char *sql_value)
481 bm_query_bind_int(hstmt, count++, gwst_st->time_s);
482 bm_query_bind_int(hstmt, count++, gwst_st->wscan_time);
483 bm_query_bind_int(hstmt, count++, gwst_st->wnone_time);
484 bm_query_bind_int(hstmt, count++, gwst_st->wpoor_time);
485 bm_query_bind_int(hstmt, count++, gwst_st->wmed_time);
486 bm_query_bind_int(hstmt, count++, gwst_st->wgood_time);
487 bm_query_bind_int(hstmt, count++, gwst_st->wgrt_time);
493 static int bm_gl_bst_stat_convert_to_sql(bd_gl_bst_stat_s *gbst_st, bm_stmt hstmt, char *sql_value)
498 bm_query_bind_int(hstmt, count++, gbst_st->time_s);
499 bm_query_bind_int(hstmt, count++, gbst_st->off_time);
500 bm_query_bind_int(hstmt, count++, gbst_st->low_time);
501 bm_query_bind_int(hstmt, count++, gbst_st->med_time);
502 bm_query_bind_int(hstmt, count++, gbst_st->high_time);
508 static int bm_gl_cpu_stat_convert_to_sql(bd_gl_cpu_stat_s *gcpu_st, bm_stmt hstmt, char *sql_value)
513 bm_query_bind_int(hstmt, count++, gcpu_st->time_s);
514 bm_query_bind_int(hstmt, count++, gcpu_st->usr_time);
515 bm_query_bind_int(hstmt, count++, gcpu_st->sys_time);
521 static void bm_convert_column_to_resourceid_usage(bm_stmt hstmt, resourceid_usage_s* bm_resource_type)
525 const char *textbuf = NULL;
526 textbuf = bm_query_table_column_text(hstmt, BM_RESOURCEUSAGE_FIELD_RESID);
527 bm_db_data_to_text(textbuf, &(bm_resource_type->ResourceId));
528 _DBG("bm_resource_type->ResourceId =[%s]", bm_resource_type->ResourceId);
529 bm_resource_type->log_time = -1;
530 bm_resource_type->usage = bm_query_table_column_int(hstmt, BM_RESOURCEUSAGE_FIELD_USAGE);
536 static void bm_convert_column_to_battery_last_charge(bm_stmt hstmt, resourceid_usage_s* bm_resource_type)
540 bm_resource_type->log_time = bm_query_table_column_int(hstmt, 0);
541 _DBG("log-time %ld", bm_resource_type->log_time);
547 static void bm_convert_column_to_appid_usage(bm_stmt hstmt, appid_usage_s* bm_app_type)
551 const char *textbuf = NULL;
552 textbuf = bm_query_table_column_text(hstmt, BM_APPUSAGE_FIELD_APPID);
553 bm_db_data_to_text(textbuf, &(bm_app_type->AppId));
554 _DBG("bm_app_type->AppId =[%s]", bm_app_type->AppId);
555 bm_app_type->log_time = -1;
556 bm_app_type->rId_ble = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_BLE);
557 bm_app_type->rId_wifi = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_WIFI);
558 bm_app_type->rId_cpu = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_CPU);
559 bm_app_type->rId_display = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_DISPLAY);
560 bm_app_type->rId_device_network = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_DEV_NTW);
561 #ifdef DISABLE_FEATURE_DATA_FROM_GPS_PLUGIN
562 bm_app_type->rId_gps = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_GPS);
563 bm_app_type->rId_battery = -1;
570 static void bm_convert_column_to_appid_map(bm_stmt hstmt, appid_map_s* gappid_map)
574 const char *textbuf = NULL;
575 gappid_map->id = bm_query_table_column_int(hstmt, BM_APPIDMAP_FIELD_ID);
576 textbuf = bm_query_table_column_text(hstmt, BM_APPIDMAP_FIELD_APPID);
577 bm_db_data_to_text(textbuf, &(gappid_map->AppId));
583 static void bm_convert_column_to_gl_ble_stat(bm_stmt hstmt, bd_gl_ble_stat_s *gble_st)
586 gble_st->time_s = -1;
587 gble_st->ble_idle_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_IDLE);
588 gble_st->ble_rx_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_RX);
589 gble_st->ble_tx_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_TX);
590 gble_st->ble_pwi_val = bm_query_table_column_int(hstmt, BD_GBLESTAT_PWI_VAL);
596 static void bm_convert_column_to_gl_wfl_stat(bm_stmt hstmt, bd_gl_wifi_stat_s *gwfl_st)
599 gwfl_st->time_s = -1;
600 gwfl_st->wifi_on_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_ON);
601 gwfl_st->wifi_conn_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_CON);
602 gwfl_st->wifi_idle_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_IDLE);
603 gwfl_st->wifi_rx_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_RX);
604 gwfl_st->wifi_tx_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_TX);
605 gwfl_st->wifi_pwi_val = bm_query_table_column_int(hstmt, BD_GWFLSTAT_PWI_VAL);
611 static void bm_convert_column_to_gl_sbr_stat(bm_stmt hstmt, bd_gl_sbr_stat_s *gbr_st)
615 gbr_st->dark = bm_query_table_column_int(hstmt, BD_GSBRSTAT_DARK);
616 gbr_st->dim = bm_query_table_column_int(hstmt, BD_GSBRSTAT_DIM);
617 gbr_st->medium = bm_query_table_column_int(hstmt, BD_GSBRSTAT_MEDIUM);
618 gbr_st->light = bm_query_table_column_int(hstmt, BD_GSBRSTAT_LIGHT);
619 gbr_st->bright = bm_query_table_column_int(hstmt, BD_GSBRSTAT_BRIGHT);
624 static void bm_convert_column_to_gl_ntw_stat(bm_stmt hstmt, bd_gl_ntw_stat_s *gn_st)
628 gn_st->dn_rx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_RXB);
629 gn_st->dn_tx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_TXB);
630 gn_st->wifi_rx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_RXB);
631 gn_st->wifi_tx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_TXB);
632 gn_st->dn_rx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_RXP);
633 gn_st->dn_tx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_TXP);
634 gn_st->wifi_rx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_RXP);
635 gn_st->wifi_tx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_TXP);
636 gn_st->bt_rx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_BT_RXB);
637 gn_st->bt_tx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_BT_TXB);
643 static void bm_convert_column_to_gl_sgt_stat(bm_stmt hstmt, bd_gl_sgt_stat_s *gst_st)
647 gst_st->scan_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_SCAN);
648 gst_st->none_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_NO);
649 gst_st->poor_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_POOR);
650 gst_st->med_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_MED);
651 gst_st->good_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GOOD);
652 gst_st->grt_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GRT);
658 static void bm_convert_column_to_gl_wst_stat(bm_stmt hstmt, bd_gl_wst_stat_s *gwst_st)
661 gwst_st->time_s = -1;
662 gwst_st->wscan_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_SCAN);
663 gwst_st->wnone_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_NO);
664 gwst_st->wpoor_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_POOR);
665 gwst_st->wmed_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_MED);
666 gwst_st->wgood_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GOOD);
667 gwst_st->wgrt_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GRT);
673 static void bm_convert_column_to_gl_bst_stat(bm_stmt hstmt, bd_gl_bst_stat_s *gbst_st)
676 gbst_st->time_s = -1;
677 gbst_st->off_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_OFF);
678 gbst_st->low_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_LOW);
679 gbst_st->med_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_MED);
680 gbst_st->high_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_HIGH);
686 static void bm_convert_column_to_gl_cpu_stat(bm_stmt hstmt, bd_gl_cpu_stat_s *gcpu_st)
689 gcpu_st->time_s = -1;
690 gcpu_st->usr_time = bm_query_table_column_int(hstmt, BD_GCPUSTAT_USR);
691 gcpu_st->sys_time = bm_query_table_column_int(hstmt, BD_GCPUSTAT_SYS);
697 static int bm_get_record_count(sqlite3 *bm_db_handle, const char *query)
703 bm_stmt pStmt = NULL;
706 _ERR("NULL query\n");
707 return BATTERY_MONITOR_ERROR_QUERY_SYNTAX_ERROR;
711 _ERR("DB is not opened\n");
712 return BATTERY_MONITOR_ERROR_DB_NOT_OPENED;
715 rc = sqlite3_prepare_v2(bm_db_handle, query, strlen(query), &pStmt, NULL);
717 if (SQLITE_BUSY == rc) {
718 _ERR("sqlite3_prepare_v2() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
719 sqlite3_finalize(pStmt);
720 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
721 } else if (SQLITE_OK != rc) {
722 _ERR("sqlite3_prepare_v2() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
723 sqlite3_finalize(pStmt);
724 return BATTERY_MONITOR_ERROR_DB_FAILED;
727 rc = sqlite3_step(pStmt);
728 if (SQLITE_BUSY == rc) {
729 _ERR("sqlite3_step() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
730 sqlite3_finalize(pStmt);
731 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
732 } else if (SQLITE_ROW != rc) {
733 _ERR("sqlite3_step() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
734 sqlite3_finalize(pStmt);
735 return BATTERY_MONITOR_ERROR_DB_FAILED;
738 ncount = sqlite3_column_int(pStmt, 0);
740 _INFO("bm record count [%d]", ncount);
741 sqlite3_finalize(pStmt);
747 static int bm_check_is_all_table_exists(sqlite3 *bm_db_handle)
752 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0,};
753 BM_MEMSET(query, 0, sizeof(query));
755 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in \
756 ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
757 BATTERY_MONITOR_APP_ID_MAP_TABLE, BATTERY_MONITOR_APP_ID_USAGE_TABLE,
758 BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE, BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE,
759 BATTERY_MONITOR_GBL_BLE_STAT_TABLE, BATTERY_MONITOR_GBL_WFL_STAT_TABLE,
760 BATTERY_MONITOR_GBL_NT_STAT_TABLE, BATTERY_MONITOR_GBL_BR_STAT_TABLE,
761 BATTERY_MONITOR_GBL_SGT_STAT_TABLE, BATTERY_MONITOR_GBL_WST_STAT_TABLE,
762 BATTERY_MONITOR_GBL_BST_STAT_TABLE, BATTERY_MONITOR_GBL_CPU_STAT_TABLE);
764 rc = bm_get_record_count(bm_db_handle, query);
766 if (rc != BATTERY_MONITOR_TABLE_COUNT)
767 _ERR("Table count is not matched rc = %d\n", rc);
773 static int bm_create_all_tables(sqlite3 *bm_db_handle)
778 int error_code = BATTERY_MONITOR_ERROR_NONE;
779 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
780 BM_MEMSET(query, 0, sizeof(query));
782 /* Create the appid map table */
783 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
784 BATTERY_MONITOR_APP_ID_MAP_TABLE);
785 rc = bm_get_record_count(bm_db_handle, query);
787 rc = bm_execute_query(bm_db_handle, APP_ID_MAP_SCHEMA);
788 if (rc == SQLITE_BUSY)
789 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
790 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
791 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
792 APP_ID_MAP_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
794 /* Create the app based usage table */
795 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
796 BATTERY_MONITOR_APP_ID_USAGE_TABLE);
797 rc = bm_get_record_count(bm_db_handle, query);
799 rc = bm_execute_query(bm_db_handle, APP_ID_USAGE_SCHEMA);
800 if (rc == SQLITE_BUSY)
801 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
802 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
803 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
804 APP_ID_USAGE_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
806 /* Create the resource based usage table */
807 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
808 BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE);
809 rc = bm_get_record_count(bm_db_handle, query);
811 rc = bm_execute_query(bm_db_handle, RESOURCE_ID_USAGE_SCHEMA);
812 if (rc == SQLITE_BUSY)
813 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
814 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
815 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
816 RESOURCE_ID_USAGE_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
818 /* Create the resource base usage table */
819 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
820 BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE);
821 rc = bm_get_record_count(bm_db_handle, query);
823 rc = bm_execute_query(bm_db_handle, RES_ID_BASE_USAGE_SCHEMA);
824 if (rc == SQLITE_BUSY)
825 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
826 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
827 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
828 RES_ID_BASE_USAGE_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
831 /* Battery Dump Tables */
832 /* Create the global bluetooth stats table */
833 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
834 BATTERY_MONITOR_GBL_BLE_STAT_TABLE);
835 rc = bm_get_record_count(bm_db_handle, query);
837 rc = bm_execute_query(bm_db_handle, GBL_BLE_STAT_SCHEMA);
838 if (rc == SQLITE_BUSY)
839 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
840 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
841 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
842 GBL_BLE_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
844 /* Create the global wifi stats table */
845 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
846 BATTERY_MONITOR_GBL_WFL_STAT_TABLE);
847 rc = bm_get_record_count(bm_db_handle, query);
849 rc = bm_execute_query(bm_db_handle, GBL_WFL_STAT_SCHEMA);
850 if (rc == SQLITE_BUSY)
851 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
852 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
853 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
854 GBL_WFL_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
856 /* Create the global network stats table */
857 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
858 BATTERY_MONITOR_GBL_NT_STAT_TABLE);
859 rc = bm_get_record_count(bm_db_handle, query);
861 rc = bm_execute_query(bm_db_handle, GBL_NT_STAT_SCHEMA);
862 if (rc == SQLITE_BUSY)
863 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
864 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
865 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
866 GBL_NT_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
868 /* Create the global brightness stats table */
869 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
870 BATTERY_MONITOR_GBL_BR_STAT_TABLE);
871 rc = bm_get_record_count(bm_db_handle, query);
873 rc = bm_execute_query(bm_db_handle, GBL_BR_STAT_SCHEMA);
874 if (rc == SQLITE_BUSY)
875 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
876 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
877 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
878 GBL_BR_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
880 /* Create the global signal stats table */
881 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
882 BATTERY_MONITOR_GBL_SGT_STAT_TABLE);
883 rc = bm_get_record_count(bm_db_handle, query);
885 rc = bm_execute_query(bm_db_handle, GBL_SGT_STAT_SCHEMA);
886 if (rc == SQLITE_BUSY)
887 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
888 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
889 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
890 GBL_SGT_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
892 /* Create the global wifi signal stats table */
893 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
894 BATTERY_MONITOR_GBL_WST_STAT_TABLE);
895 rc = bm_get_record_count(bm_db_handle, query);
897 rc = bm_execute_query(bm_db_handle, GBL_WST_STAT_SCHEMA);
898 if (rc == SQLITE_BUSY)
899 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
900 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
901 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
902 GBL_WST_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
904 /* Create the global bt signal stats table */
905 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
906 BATTERY_MONITOR_GBL_BST_STAT_TABLE);
907 rc = bm_get_record_count(bm_db_handle, query);
909 rc = bm_execute_query(bm_db_handle, GBL_BST_STAT_SCHEMA);
910 if (rc == SQLITE_BUSY)
911 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
912 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
913 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
914 GBL_BST_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
916 /* Create the global cpu stats table */
917 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
918 BATTERY_MONITOR_GBL_CPU_STAT_TABLE);
919 rc = bm_get_record_count(bm_db_handle, query);
921 rc = bm_execute_query(bm_db_handle, GBL_CPU_STAT_SCHEMA);
922 if (rc == SQLITE_BUSY)
923 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
924 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
925 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
926 GBL_CPU_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
933 static long int bm_get_time_bias(int period_type)
944 if (period_type == 0) {
945 ret = ret - BM_DURATION_1DAY;
946 } else if (period_type == 1) {
947 ret = ret - BM_DURATION_1WEEK;
949 _ERR("Invalid value for period [%d]", period_type);
957 static int bm_db_open(void)
964 char bm_db_path[256] = {0, };
965 BM_MEMSET(bm_db_path, 0x00, sizeof(bm_db_path));
967 BATTERY_MONITOR_GET_DB_PATH(bm_db_path, sizeof(bm_db_path));
969 if (g_hBatteryMonitorDB) {
970 _ERR("Battery Monitor database is using in another app.");
971 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
974 ret = bm_db_handle_close(g_hBatteryMonitorDB2);
975 if (ret != BATTERY_MONITOR_ERROR_NONE)
976 _DBG("db_util_close(g_hBatteryMonitorDB2) fail ret = %d", ret);
978 _DBG("before bm_db_open()");
979 // if (mode == BM_DB_OPEN_READWRITE)
980 rc = db_util_open(bm_db_path, &g_hBatteryMonitorDB, DB_UTIL_REGISTER_HOOK_METHOD);
981 // else if (mode == BM_DB_OPEN_READONLY)
982 // rc = db_util_open_with_options(bm_db_path, &g_hBatteryMonitorDB, SQLITE_OPEN_READONLY, NULL);
984 // return _BATTERY_MONITOR_ERROR_DB_NOT_OPENED;
985 _DBG("after bm_db_open() sqlite_rc = %d", rc);
987 if (rc == SQLITE_PERM || bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
988 _ERR("Battery Monitor permission denied");
989 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
992 if (rc == SQLITE_BUSY) {
993 _ERR("busy handler fail.");
994 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
997 if (rc != SQLITE_OK) {
998 _ERR("The database isn't connected.");
999 return BATTERY_MONITOR_ERROR_DB_NOT_OPENED;
1002 rc = bm_check_is_all_table_exists(g_hBatteryMonitorDB);
1005 _ERR("bm_check_is_all_table_exists rc=[%d]", rc);
1007 } else if (rc == BATTERY_MONITOR_TABLE_COUNT) {
1010 int ret = bm_create_all_tables(g_hBatteryMonitorDB);
1011 if (ret != BATTERY_MONITOR_ERROR_NONE) {
1012 _ERR("bm_create_all_tables fail ret=[%d]", ret);
1018 return BATTERY_MONITOR_ERROR_NONE;
1021 static int bm_db_close(void)
1027 ret = bm_db_handle_close(g_hBatteryMonitorDB);
1028 if (ret != BATTERY_MONITOR_ERROR_NONE) {
1029 _ERR("db_util_close(g_hBatteryMonitorDB) fail ret = %d", ret);
1030 g_hBatteryMonitorDB2 = g_hBatteryMonitorDB;
1033 g_hBatteryMonitorDB = NULL;
1039 static gboolean app_name_check_duplicated(sqlite3 *bm_db_handle, const char *app_id, int *error_code)
1043 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1045 *error_code = BATTERY_MONITOR_ERROR_NONE;
1047 BM_RETURN_VAL((bm_db_handle != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, false, ("The database isn't connected."));
1048 BM_RETURN_VAL((app_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, false, ("app_id is NULL."));
1050 BM_MEMSET(query, 0x00, sizeof(query));
1052 BM_SNPRINTF(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE AppId='%s'", BATTERY_MONITOR_APP_ID_MAP_TABLE, app_id);
1054 count = bm_get_record_count(bm_db_handle, query);
1056 _INFO("query=[%s]", query);
1064 static int bm_appid_usage_insert_to_db(sqlite3 *bm_db_handle, appid_usage_s *bm_app_type)
1069 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1070 int error_code = BATTERY_MONITOR_ERROR_NONE;
1071 bm_stmt hstmt = NULL;
1073 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1074 BM_RETURN_VAL((bm_app_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The battery monitor handle is NULL"));
1076 /* check mandatory field(app id)*/
1077 if (!bm_app_type->AppId)
1078 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1080 BM_MEMSET(query, 0x00, sizeof(query));
1081 #ifdef DISABLE_FEATURE_DATA_FROM_GPS_PLUGIN
1082 BM_SNPRINTF(query, sizeof(query), \
1083 "INSERT INTO %s( AppId, log_time, rId_ble, rId_wifi, rId_cpu, rId_display, rId_device_network, rId_gps, rId_battery ) values "
1084 "(?, ?, ?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_APP_ID_USAGE_TABLE);
1086 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s( AppId, log_time, rId_ble, rId_wifi, rId_cpu, rId_display, rId_device_network) values "
1087 "(?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_APP_ID_USAGE_TABLE);
1090 hstmt = bm_prepare_query(bm_db_handle, query);
1091 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1092 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1093 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1094 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1095 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1096 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1099 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1101 bm_appid_usage_convert_to_sql(bm_app_type, hstmt, query);
1103 rc = bm_query_step(hstmt);
1104 if (rc == SQLITE_BUSY) {
1105 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1106 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1107 } else if (rc != SQLITE_DONE) {
1108 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1109 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1112 rc = bm_query_finalize(hstmt);
1113 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1120 static int bm_battery_stat_insert_to_db(sqlite3 *bm_db_handle, void *str_data, int type)
1124 if(str_data == NULL) {
1125 _ERR("Invalid Stat");
1126 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1129 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1130 int error_code = BATTERY_MONITOR_ERROR_NONE;
1131 bm_stmt hstmt = NULL;
1133 BM_MEMSET(query, 0x00, sizeof(query));
1136 case 0: //;GBLE DATA
1138 bd_gl_ble_stat_s *gble_st = (bd_gl_ble_stat_s *)str_data;
1139 _DBG("time %ld idle_time %ld rx_time %ld tx_time %ld pwi %ld", gble_st->time_s, gble_st->ble_idle_time,
1140 gble_st->ble_rx_time, gble_st->ble_tx_time, gble_st->ble_pwi_val);
1141 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, ble_idle_time, ble_rx_time, \
1142 ble_tx_time, ble_pwi_val) values " "(?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_BLE_STAT_TABLE);
1143 hstmt = bm_prepare_query(bm_db_handle, query);
1144 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1145 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1146 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1147 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1148 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1149 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1151 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1152 bm_gl_ble_stat_convert_to_sql(gble_st, hstmt, query);
1156 bd_gl_wifi_stat_s *gwfl_st = (bd_gl_wifi_stat_s *)str_data;
1157 _DBG("time %ld on_time %ld conn_time %ld idle_time %ld rx_time %ld tx_time %ld pwi %ld", gwfl_st->time_s,
1158 gwfl_st->wifi_on_time, gwfl_st->wifi_conn_time, gwfl_st->wifi_idle_time, gwfl_st->wifi_rx_time,
1159 gwfl_st->wifi_tx_time, gwfl_st->wifi_pwi_val);
1160 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, wifi_on_time, wifi_conn_time, wifi_idle_time, \
1161 wifi_rx_time, wifi_tx_time, wifi_pwi_val) values" "(?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_WFL_STAT_TABLE);
1162 hstmt = bm_prepare_query(bm_db_handle, query);
1163 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1164 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1165 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1166 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1167 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1168 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1170 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1171 bm_gl_wfl_stat_convert_to_sql(gwfl_st, hstmt, query);
1175 bd_gl_ntw_stat_s *gn_st = (bd_gl_ntw_stat_s *)str_data;
1176 _DBG("time %ld dn_rx %ld dn_tx %ld wifi_rx %ld wifi_tx %ld dn_rx_pkt %ld dn_tx_pkt %ld wifi_rx_pkt %ld wifi_tx_pkt %ld",
1177 gn_st->time_s, gn_st->dn_rx_byt, gn_st->dn_tx_byt, gn_st->wifi_rx_byt, gn_st->wifi_tx_byt,
1178 gn_st->dn_rx_pkt, gn_st->dn_tx_pkt, gn_st->wifi_rx_pkt, gn_st->wifi_tx_pkt);
1179 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, dn_rx_byt, dn_tx_byt, wifi_rx_byt, wifi_tx_byt, \
1180 dn_rx_pkt, dn_tx_pkt, wifi_rx_pkt, wifi_tx_pkt, bt_rx_byt, bt_tx_byt) values" "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_NT_STAT_TABLE);
1181 hstmt = bm_prepare_query(bm_db_handle, query);
1182 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1183 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1184 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1185 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1186 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1187 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1189 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1190 bm_gl_ntw_stat_convert_to_sql(gn_st, hstmt, query);
1194 bd_gl_sbr_stat_s *gbr_st = (bd_gl_sbr_stat_s *)str_data;
1195 _DBG("time %ld dark %ld dim %ld medium %ld light %ld bright %ld", gbr_st->time_s,
1196 gbr_st->dark, gbr_st->dim, gbr_st->medium, gbr_st->light, gbr_st->bright);
1197 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, dark, dim, medium, light, bright) values" \
1198 "(?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_BR_STAT_TABLE);
1199 hstmt = bm_prepare_query(bm_db_handle, query);
1200 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1201 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1202 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1203 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1204 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1205 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1207 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1208 bm_gl_sbr_stat_convert_to_sql(gbr_st, hstmt, query);
1212 bd_gl_sgt_stat_s *gst_st = (bd_gl_sgt_stat_s *)str_data;
1213 _DBG("time %ld scan %ld no %ld poor %ld med %ld good %ld great %ld", gst_st->time_s, gst_st->scan_time,
1214 gst_st->none_time, gst_st->poor_time, gst_st->med_time, gst_st->good_time, gst_st->grt_time);
1215 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, scan_time, none_time, poor_time, med_time, good_time, \
1216 grt_time) values" "(?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_SGT_STAT_TABLE);
1217 hstmt = bm_prepare_query(bm_db_handle, query);
1218 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1219 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1220 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1221 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1222 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1223 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1225 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1226 bm_gl_sgt_stat_convert_to_sql(gst_st, hstmt, query);
1230 bd_gl_wst_stat_s *gwst_st = (bd_gl_wst_stat_s *)str_data;
1231 _DBG("time %ld wscan %ld wno %ld wpoor %ld wmed %ld wgood %ld wgreat %ld", gwst_st->time_s, gwst_st->wscan_time,
1232 gwst_st->wnone_time, gwst_st->wpoor_time, gwst_st->wmed_time, gwst_st->wgood_time, gwst_st->wgrt_time);
1233 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, wscan_time, wnone_time, wpoor_time, wmed_time, wgood_time, \
1234 wgrt_time) values" "(?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_WST_STAT_TABLE);
1235 hstmt = bm_prepare_query(bm_db_handle, query);
1236 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1237 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1238 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1239 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1240 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1241 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1243 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1244 bm_gl_wst_stat_convert_to_sql(gwst_st, hstmt, query);
1248 bd_gl_bst_stat_s *gbst_st = (bd_gl_bst_stat_s *)str_data;
1249 _DBG("time %ld off %ld low %ld med %ld high %ld", gbst_st->time_s, gbst_st->off_time, gbst_st->low_time,
1250 gbst_st->med_time, gbst_st->high_time);
1251 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, off_time, low_time, med_time, high_time) values "\
1252 "(?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_BST_STAT_TABLE);
1253 hstmt = bm_prepare_query(bm_db_handle, query);
1254 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1255 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1256 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1257 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1258 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1259 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1261 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1262 bm_gl_bst_stat_convert_to_sql(gbst_st, hstmt, query);
1266 bd_gl_cpu_stat_s *gcpu_st = (bd_gl_cpu_stat_s *)str_data;
1267 _DBG("time %ld usr %ld sys %ld", gcpu_st->time_s, gcpu_st->usr_time, gcpu_st->sys_time);
1268 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, usr_time, sys_time) values "\
1269 "(?, ?, ?)", BATTERY_MONITOR_GBL_CPU_STAT_TABLE);
1270 hstmt = bm_prepare_query(bm_db_handle, query);
1271 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1272 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1273 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1274 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1275 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1276 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1278 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1279 bm_gl_cpu_stat_convert_to_sql(gcpu_st, hstmt, query);
1282 _ERR("Invalid Type");
1283 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1286 rc = bm_query_step(hstmt);
1287 if (rc == SQLITE_BUSY) {
1288 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1289 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1290 } else if (rc != SQLITE_DONE) {
1291 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1292 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1295 rc = bm_query_finalize(hstmt);
1297 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1303 static int bm_resourceid_usage_insert_to_db(sqlite3 *bm_db_handle, resourceid_usage_s *bm_resource_type)
1308 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1309 int error_code = BATTERY_MONITOR_ERROR_NONE;
1310 bm_stmt hstmt = NULL;
1312 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1313 BM_RETURN_VAL((bm_resource_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The battery monitor handle is NULL"));
1315 /* check mandatory field(Resource id)*/
1316 if (!bm_resource_type->ResourceId)
1317 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1319 BM_MEMSET(query, 0x00, sizeof(query));
1320 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s( ResourceId, log_time, usage ) values " "(?, ?, ?)", BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE);
1322 hstmt = bm_prepare_query(bm_db_handle, query);
1323 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1324 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1325 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1326 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1327 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1328 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1331 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1333 bm_resourceid_usage_convert_to_sql(bm_resource_type, hstmt, query);
1334 rc = bm_query_step(hstmt);
1335 if (rc == SQLITE_BUSY) {
1336 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1337 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1338 } else if (rc != SQLITE_DONE) {
1339 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1340 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1343 rc = bm_query_finalize(hstmt);
1344 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1351 static int bm_resourceid_base_usage_insert_to_db(sqlite3 *bm_db_handle, resourceid_usage_s *bm_resource_type)
1356 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1357 int error_code = BATTERY_MONITOR_ERROR_NONE;
1358 bm_stmt hstmt = NULL;
1360 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1361 BM_RETURN_VAL((bm_resource_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The battery monitor handle is NULL"));
1363 /* check mandatory field(Resource id)*/
1364 if (!bm_resource_type->ResourceId)
1365 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1367 BM_MEMSET(query, 0x00, sizeof(query));
1368 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s( ResourceId, log_time, usage ) values " "(?, ?, ?)", BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE);
1370 hstmt = bm_prepare_query(bm_db_handle, query);
1371 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1372 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1373 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1374 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1375 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1376 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1379 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1381 bm_resourceid_usage_convert_to_sql(bm_resource_type, hstmt, query);
1382 rc = bm_query_step(hstmt);
1383 if (rc == SQLITE_BUSY) {
1384 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1385 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1386 } else if (rc != SQLITE_DONE) {
1387 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1388 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1391 rc = bm_query_finalize(hstmt);
1392 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1399 int bm_appid_map_insert_to_db(sqlite3 *bm_db_handle, const char *app_id)
1404 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1405 int error_code = BATTERY_MONITOR_ERROR_NONE;
1406 bm_stmt hstmt = NULL;
1408 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1410 /* check mandatory field(app id)*/
1412 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1414 /* The AppId integer value should be auto increment */
1415 BM_MEMSET(query, 0x00, sizeof(query));
1416 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s( AppId ) values "
1417 "(?)", BATTERY_MONITOR_APP_ID_MAP_TABLE);
1419 hstmt = bm_prepare_query(bm_db_handle, query);
1420 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1421 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1422 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1423 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1424 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1425 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1428 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1430 bm_appid_map_usage_convert_to_sql(app_id, hstmt, query);
1432 rc = bm_query_step(hstmt);
1433 if (rc == SQLITE_BUSY) {
1434 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1435 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1436 } else if (rc != SQLITE_DONE) {
1437 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1438 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1441 rc = bm_query_finalize(hstmt);
1442 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1449 GSList* bm_query_appid_map(sqlite3 *bm_db_handle, int *error_code)
1451 bm_stmt hstmt = NULL;
1452 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1454 *error_code = BATTERY_MONITOR_ERROR_NONE;
1455 GSList* appid_map_list = NULL;
1457 BM_RETURN_VAL((bm_db_handle != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; },
1458 NULL, ("The database isn't connected."));
1459 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1460 BM_SNPRINTF(query, sizeof(query), "SELECT * FROM %s", BATTERY_MONITOR_APP_ID_MAP_TABLE);
1462 hstmt = bm_prepare_query(bm_db_handle, query);
1463 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1464 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1465 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1469 appid_map_s *gappid_map = NULL;
1470 rc = bm_query_step(hstmt);
1471 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND,
1472 ("The record isn't found.\n"));
1473 while (rc == SQLITE_ROW) {
1474 gappid_map = (appid_map_s *)calloc(1, sizeof(appid_map_s));
1475 if (gappid_map == NULL) {
1476 _ERR("Memory Allocation Failed");
1477 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1480 bm_convert_column_to_appid_map(hstmt, gappid_map);
1481 appid_map_list = g_slist_append(appid_map_list, gappid_map);
1482 rc = bm_query_step(hstmt);
1485 rc = bm_query_finalize(hstmt);
1486 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1489 *error_code = BATTERY_MONITOR_ERROR_NONE;
1491 if (hstmt != NULL) {
1492 rc = bm_query_finalize(hstmt);
1493 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1495 _ERR("finalize error");
1499 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && appid_map_list != NULL)
1500 bm_set_free_gslist_appid_map(appid_map_list);
1501 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && appid_map_list != NULL) {
1502 _INFO("Returning appid map list");
1503 return appid_map_list;
1509 static appid_usage_s* bm_query_usage_by_appid_ci(sqlite3 *bm_db_handle, const char *app_id, long long s_time, long long e_time, int *error_code)
1513 bm_stmt hstmt = NULL;
1515 *error_code = BATTERY_MONITOR_ERROR_NONE;
1517 long int s_t = (long)s_time;
1518 long int e_t = (long)e_time;
1519 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1520 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1521 BM_SNPRINTF(query, sizeof(query), "SELECT AppId, sum(rId_ble), sum(rId_wifi), sum(rId_cpu), \
1522 sum(rId_display), sum(rId_device_network), sum(rId_gps) FROM %s WHERE \
1523 AppId = ? AND log_time > ? AND log_time < ? ", BATTERY_MONITOR_APP_ID_USAGE_TABLE);
1524 hstmt = bm_prepare_query(bm_db_handle, query);
1525 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1526 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1527 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1531 bm_query_app_usage_convert_to_sql_ci(app_id, s_t, e_t, hstmt);
1532 appid_usage_s *bm_app_type = NULL;
1533 rc = bm_query_step(hstmt);
1534 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND,
1535 ("The record isn't found.(%s)\n", app_id));
1536 bm_app_type = (appid_usage_s *)calloc(1, sizeof(appid_usage_s));
1537 if (bm_app_type == NULL) {
1538 _ERR("memory allocation failed");
1539 if (hstmt != NULL) {
1540 rc = bm_query_finalize(hstmt);
1541 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; },
1542 NULL, ("finalize error"));
1545 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1548 bm_convert_column_to_appid_usage(hstmt, bm_app_type);
1549 rc = bm_query_finalize(hstmt);
1550 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1552 *error_code = BATTERY_MONITOR_ERROR_NONE;
1555 if (hstmt != NULL) {
1556 rc = bm_query_finalize(hstmt);
1557 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1559 _ERR("finalize error");
1563 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_app_type) {
1564 BM_FREE(bm_app_type);
1567 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_app_type != NULL) {
1568 _INFO("Returning appid usage");
1576 static int bm_battery_stat_query_from_db(sqlite3 *bm_db_handle, void* str_data, int type, long int duration)
1580 _DBG("Value for duration is [%ld]", duration);
1581 bm_stmt hstmt = NULL;
1582 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1584 int error_code = BATTERY_MONITOR_ERROR_NONE;
1586 BM_RETURN_VAL((bm_db_handle != NULL), { error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; },
1587 error_code, ("The database isn't connected."));
1588 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1593 BM_SNPRINTF(query, sizeof(query), "SELECT sum(ble_idle_time), sum(ble_rx_time), sum(ble_tx_time), \
1594 sum(ble_pwi_val) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BLE_STAT_TABLE, duration);
1595 hstmt = bm_prepare_query(bm_db_handle, query);
1596 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1597 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1598 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1601 rc = bm_query_step(hstmt);
1602 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1603 bm_convert_column_to_gl_ble_stat(hstmt, str_data);
1607 BM_SNPRINTF(query, sizeof(query), "SELECT sum(wifi_on_time), sum(wifi_conn_time), sum(wifi_idle_time), \
1608 sum(wifi_rx_time), sum(wifi_tx_time), sum(wifi_pwi_val) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_WFL_STAT_TABLE, duration);
1609 hstmt = bm_prepare_query(bm_db_handle, query);
1610 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1611 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1612 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1615 rc = bm_query_step(hstmt);
1616 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1617 bm_convert_column_to_gl_wfl_stat(hstmt, str_data);
1621 BM_SNPRINTF(query, sizeof(query), "SELECT sum(dn_rx_byt), sum(dn_tx_byt), sum(wifi_rx_byt), \
1622 sum(wifi_tx_byt), sum(dn_rx_pkt), sum(dn_tx_pkt), sum(wifi_rx_pkt), sum(wifi_tx_pkt), \
1623 sum(bt_rx_byt), sum(bt_tx_byt) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_NT_STAT_TABLE, duration);
1624 hstmt = bm_prepare_query(bm_db_handle, query);
1625 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1626 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1627 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1630 rc = bm_query_step(hstmt);
1631 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1632 bm_convert_column_to_gl_ntw_stat(hstmt, str_data);
1636 BM_SNPRINTF(query, sizeof(query), "SELECT sum(dark), sum(dim), sum(medium), \
1637 sum(light), sum(bright) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BR_STAT_TABLE, duration);
1638 hstmt = bm_prepare_query(bm_db_handle, query);
1639 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1640 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1641 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1644 rc = bm_query_step(hstmt);
1645 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1646 bm_convert_column_to_gl_sbr_stat(hstmt, str_data);
1650 BM_SNPRINTF(query, sizeof(query), "SELECT sum(scan_time), sum(none_time), sum(poor_time), \
1651 sum(med_time), sum(good_time), sum(grt_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_SGT_STAT_TABLE, duration);
1652 hstmt = bm_prepare_query(bm_db_handle, query);
1653 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1654 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1655 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1658 rc = bm_query_step(hstmt);
1659 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1660 bm_convert_column_to_gl_sgt_stat(hstmt, str_data);
1664 BM_SNPRINTF(query, sizeof(query), "SELECT sum(wscan_time), sum(wnone_time), sum(wpoor_time), \
1665 sum(wmed_time), sum(wgood_time), sum(wgrt_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_WST_STAT_TABLE, duration);
1666 hstmt = bm_prepare_query(bm_db_handle, query);
1667 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1668 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1669 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1672 rc = bm_query_step(hstmt);
1673 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1674 bm_convert_column_to_gl_wst_stat(hstmt, str_data);
1678 BM_SNPRINTF(query, sizeof(query), "SELECT sum(off_time), sum(low_time), sum(med_time), \
1679 sum(high_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BST_STAT_TABLE, duration);
1680 hstmt = bm_prepare_query(bm_db_handle, query);
1681 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1682 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1683 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1686 rc = bm_query_step(hstmt);
1687 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1688 bm_convert_column_to_gl_bst_stat(hstmt, str_data);
1692 BM_SNPRINTF(query, sizeof(query), "SELECT sum(usr_time), sum(sys_time) \
1693 FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_CPU_STAT_TABLE, duration);
1694 hstmt = bm_prepare_query(bm_db_handle, query);
1695 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1696 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1697 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1700 rc = bm_query_step(hstmt);
1701 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1702 bm_convert_column_to_gl_cpu_stat(hstmt, str_data);
1708 rc = bm_query_finalize(hstmt);
1709 BM_CATCH_ERROR((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1711 error_code = BATTERY_MONITOR_ERROR_NONE;
1713 if (hstmt != NULL) {
1714 rc = bm_query_finalize(hstmt);
1715 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1717 _ERR("finalize error");
1722 if ((error_code == BATTERY_MONITOR_ERROR_NONE) && str_data != NULL) {
1723 _INFO("Returning Battery Stat");
1731 static resourceid_usage_s* bm_query_usage_by_resourceid_ci(sqlite3 *bm_db_handle, const char *resource_id, long long s_time, long long e_time, int *error_code)
1734 bm_stmt hstmt = NULL;
1736 *error_code = BATTERY_MONITOR_ERROR_NONE;
1737 long int s_t = (long)s_time;
1738 long int e_t = (long)e_time;
1739 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1740 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1741 BM_SNPRINTF(query, sizeof(query), "SELECT ResourceId, sum(usage) FROM %s WHERE ResourceId = '%s' \
1742 AND log_time > %ld AND log_time < %ld", BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE, resource_id, s_t, e_t);
1744 hstmt = bm_prepare_query(bm_db_handle, query);
1745 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1746 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1747 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1751 resourceid_usage_s *bm_resource_type = NULL;
1752 rc = bm_query_step(hstmt);
1753 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.(%s)\n", resource_id));
1755 bm_resource_type = (resourceid_usage_s *)calloc(1, sizeof(resourceid_usage_s));
1756 if (bm_resource_type == NULL) {
1757 _ERR("memory allocation failed");
1758 if (hstmt != NULL) {
1759 rc = bm_query_finalize(hstmt);
1760 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; }, NULL, ("finalize error"));
1763 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1766 bm_convert_column_to_resourceid_usage(hstmt, bm_resource_type);
1768 rc = bm_query_finalize(hstmt);
1769 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1771 *error_code = BATTERY_MONITOR_ERROR_NONE;
1774 if (hstmt != NULL) {
1775 rc = bm_query_finalize(hstmt);
1776 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1778 _ERR("finalize error");
1782 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_resource_type) {
1783 BM_FREE(bm_resource_type);
1784 bm_resource_type = NULL;
1786 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_resource_type != NULL) {
1787 _INFO("Returning appid usage");
1788 return bm_resource_type;
1794 static resourceid_usage_s* bm_query_base_usage_by_resourceid_ci(sqlite3 *bm_db_handle, const char *resource_id, long long s_time, long long e_time, int *error_code)
1797 bm_stmt hstmt = NULL;
1799 *error_code = BATTERY_MONITOR_ERROR_NONE;
1800 long int s_t = (long)s_time;
1801 long int e_t = (long)e_time;
1802 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1803 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1804 BM_SNPRINTF(query, sizeof(query), "SELECT ResourceId, sum(usage) FROM %s WHERE ResourceId = '%s' \
1805 AND log_time > %ld AND log_time < %ld", BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE, resource_id, s_t, e_t);
1807 hstmt = bm_prepare_query(bm_db_handle, query);
1808 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1809 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1810 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1814 resourceid_usage_s *bm_resource_type = NULL;
1815 rc = bm_query_step(hstmt);
1816 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.(%s)\n", resource_id));
1818 bm_resource_type = (resourceid_usage_s *)calloc(1, sizeof(resourceid_usage_s));
1819 if (bm_resource_type == NULL) {
1820 _ERR("memory allocation failed");
1821 if (hstmt != NULL) {
1822 rc = bm_query_finalize(hstmt);
1823 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; }, NULL, ("finalize error"));
1826 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1829 bm_convert_column_to_resourceid_usage(hstmt, bm_resource_type);
1831 rc = bm_query_finalize(hstmt);
1832 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1834 *error_code = BATTERY_MONITOR_ERROR_NONE;
1837 if (hstmt != NULL) {
1838 rc = bm_query_finalize(hstmt);
1839 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1841 _ERR("finalize error");
1845 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_resource_type) {
1846 BM_FREE(bm_resource_type);
1847 bm_resource_type = NULL;
1849 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_resource_type != NULL) {
1850 _INFO("Returning appid usage");
1851 return bm_resource_type;
1857 static resourceid_usage_s* bm_query_battery_last_charge(sqlite3 *bm_db_handle, const char *resource_id, int *error_code)
1860 bm_stmt hstmt = NULL;
1862 *error_code = BATTERY_MONITOR_ERROR_NONE;
1863 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1864 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1865 BM_SNPRINTF(query, sizeof(query), "SELECT MAX(log_time) FROM %s WHERE ResourceId = '%s'",
1866 BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE, resource_id);
1868 hstmt = bm_prepare_query(bm_db_handle, query);
1869 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1870 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1871 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1875 resourceid_usage_s *bm_resource_type = NULL;
1876 rc = bm_query_step(hstmt);
1877 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.(%s)\n", resource_id));
1879 bm_resource_type = (resourceid_usage_s *)calloc(1, sizeof(resourceid_usage_s));
1880 if (bm_resource_type == NULL) {
1881 _ERR("memory allocation failed");
1882 if (hstmt != NULL) {
1883 rc = bm_query_finalize(hstmt);
1884 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; }, NULL, ("finalize error"));
1887 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1890 bm_convert_column_to_battery_last_charge(hstmt, bm_resource_type);
1892 rc = bm_query_finalize(hstmt);
1893 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1895 *error_code = BATTERY_MONITOR_ERROR_NONE;
1898 if (hstmt != NULL) {
1899 rc = bm_query_finalize(hstmt);
1900 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1902 _ERR("finalize error");
1906 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_resource_type) {
1907 BM_FREE(bm_resource_type);
1908 bm_resource_type = NULL;
1910 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_resource_type != NULL) {
1911 _INFO("Returning battery plug time");
1912 return bm_resource_type;
1918 static int bm_delete_table(sqlite3 *bm_db_handle, bm_stmt *phstmt, int num_app_id, const char *app_id, const char* table)
1922 _INFO("bm_delete_table start - table[%s]", table);
1923 int error_code = BATTERY_MONITOR_ERROR_NONE;
1924 int binding_count = 1;
1926 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1928 bm_stmt hstmt = *phstmt;
1930 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1931 BM_RETURN_VAL((table != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("table is null!"));
1933 if ((g_strcmp0(table, BATTERY_MONITOR_APP_ID_USAGE_TABLE) == 0))
1934 BM_SNPRINTF(query, sizeof(query), "DELETE FROM %s WHERE AppId = ?", table);
1935 else if (g_strcmp0(table, BATTERY_MONITOR_APP_ID_MAP_TABLE) == 0)
1936 BM_SNPRINTF(query, sizeof(query), "DELETE FROM %s WHERE AppName = ?", table);
1938 hstmt = bm_prepare_query(bm_db_handle, query);
1939 bm_query_bind_text(hstmt, binding_count++, app_id);
1940 if (hstmt == NULL) {
1941 _ERR("bm_svc_query_prepare(%s) failed(%s).\n", query, bm_db_err_msg(bm_db_handle));
1942 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1946 rc = bm_query_step(hstmt);
1947 if (rc != SQLITE_DONE) {
1948 _ERR("The record isn't found\n");
1949 error_code = BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND;
1953 rc = bm_query_finalize(hstmt);
1954 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1955 _ERR("finalize error");
1961 _INFO("bm_delete_table end");
1968 static int bm_delete_table_by_app_id(sqlite3 *bm_db_handle, const char *AppId)
1972 int error_code = BATTERY_MONITOR_ERROR_NONE;
1973 bm_stmt hstmt = NULL;
1974 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1977 int ret_transaction = 0;
1978 bool is_success = FALSE;
1981 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1982 BM_RETURN_VAL((AppId != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The database isn't connected."));
1984 /* Check requested ID to delete */
1985 BM_SNPRINTF(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE AppName = '%s'", BATTERY_MONITOR_APP_ID_MAP_TABLE, AppId);
1987 count = bm_get_record_count(bm_db_handle, query);
1988 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1989 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1990 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1993 BM_SLOGE("App ID(%s) is not exist. count(%d)\n", AppId, count);
1994 return BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND;
1997 /* transaction control required */
1998 ret_transaction = bm_begin_transaction(bm_db_handle);
1999 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2000 _ERR("database busy(%s)", bm_db_err_msg(bm_db_handle));
2001 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2002 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2003 _ERR("bm_delete:bm_begin_transaction fail %d\n", ret_transaction);
2004 return ret_transaction;
2007 /*delete AppId Usage table*/
2008 error_code = bm_delete_table(bm_db_handle, &hstmt, num_AppId, AppId, BATTERY_MONITOR_APP_ID_USAGE_TABLE);
2009 if ((error_code == BATTERY_MONITOR_ERROR_DB_FAILED) || (error_code == BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND)) {
2010 _ERR("bm appid_usage deletion failed - db error[%d]", error_code);
2012 } else if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2013 _ERR("bm appid_usage deletion failed - error[%d]", error_code);
2017 /*delete AppId Map table*/
2018 error_code = bm_delete_table(bm_db_handle, &hstmt, num_AppId, AppId, BATTERY_MONITOR_APP_ID_MAP_TABLE);
2019 if ((error_code == BATTERY_MONITOR_ERROR_DB_FAILED) || (error_code == BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND)) {
2020 _ERR("bm appid_map deletion failed - db error[%d]", error_code);
2022 } else if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2023 _ERR("bm appid_map deletion failed - error[%d]", error_code);
2029 if (hstmt != NULL) {
2030 rc = bm_query_finalize(hstmt);
2031 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
2035 ret_transaction = bm_end_transaction(bm_db_handle, is_success);
2036 if (ret_transaction != BATTERY_MONITOR_ERROR_NONE)
2037 _ERR("bm_svc_delete:bm_svc_end_transaction fail %d, is_success=%d\n", ret_transaction, is_success);
2043 static int bm_delete_table_by_time_interval(sqlite3 *bm_db_handle, const char* table)
2047 _DBG("bm_delete_table start - table[%s]", table);
2048 int error_code = BATTERY_MONITOR_ERROR_NONE;
2050 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
2051 long int duration = bm_get_time_bias(1);
2052 bm_stmt hstmt = NULL;
2054 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2055 BM_RETURN_VAL((table != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("table is null!"));
2057 if ((g_strcmp0(table, BATTERY_MONITOR_APP_ID_USAGE_TABLE) == 0 || g_strcmp0(table, BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE) == 0
2058 || g_strcmp0(table, BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE) == 0))
2059 BM_SNPRINTF(query, sizeof(query), "DELETE FROM %s WHERE log_time <= %ld", table, duration);
2061 BM_SNPRINTF(query, sizeof(query), "DELETE FROM %s WHERE time_s <= %ld", table, duration);
2063 hstmt = bm_prepare_query(bm_db_handle, query);
2064 if (bm_db_err_code(bm_db_handle) != SQLITE_OK || hstmt == NULL) {
2065 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
2066 return BATTERY_MONITOR_ERROR_DB_FAILED;
2069 rc = bm_query_step(hstmt);
2070 if (rc != SQLITE_DONE) {
2071 _ERR("Query Failed");
2072 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
2075 rc = bm_query_finalize(hstmt);
2076 if (rc != BATTERY_MONITOR_ERROR_NONE) {
2077 _ERR("finalize error");
2078 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
2087 /* Manager Functions */
2088 int bm_server_appid_insert_to_db(const char* app_id)
2092 int error_code = BATTERY_MONITOR_ERROR_NONE;
2093 int ret_transaction = 0;
2094 int to_insert = true;
2096 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2097 BM_RETURN_VAL((app_id != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("Mandatory field app_id NULL"));
2099 /* Checking if already inserted */
2100 to_insert = app_name_check_duplicated(g_hBatteryMonitorDB, app_id, &error_code);
2101 if (to_insert && error_code == BATTERY_MONITOR_ERROR_NONE) {
2102 _DBG("AppID - [%s] already exists", app_id);
2103 return BATTERY_MONITOR_ERROR_NONE;
2104 } else if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2105 _ERR("Duplicate check failed");
2109 pthread_mutex_lock(&battery_monitor_mutex);
2111 /* Transaction Control Required */
2112 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2113 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2114 pthread_mutex_unlock(&battery_monitor_mutex);
2115 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2116 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2118 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2119 _ERR("AppId map table insert:bm_begin_transaction fail %d\n", ret_transaction);
2120 pthread_mutex_unlock(&battery_monitor_mutex);
2121 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2122 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2123 _ERR("AppId map table insert:bm_begin_transaction fail %d\n", ret_transaction);
2124 pthread_mutex_unlock(&battery_monitor_mutex);
2125 return ret_transaction;
2128 error_code = bm_appid_map_insert_to_db(g_hBatteryMonitorDB, app_id);
2129 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2130 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2131 _ERR("INSERT appid fail, rollback insert query(%d)!!!!\n", ret_transaction);
2132 pthread_mutex_unlock(&battery_monitor_mutex);
2136 pthread_mutex_unlock(&battery_monitor_mutex);
2137 bm_end_transaction(g_hBatteryMonitorDB, true);
2140 return BATTERY_MONITOR_ERROR_NONE;
2143 int bm_server_resource_usage_insert_to_db(resourceid_usage_s *bm_resource_type)
2147 int error_code = BATTERY_MONITOR_ERROR_NONE;
2148 int ret_transaction = 0;
2150 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2151 BM_RETURN_VAL((bm_resource_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The Battery Monitor Handle is NULL"));
2153 pthread_mutex_lock(&battery_monitor_mutex);
2155 /* Transaction Control Required */
2156 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2157 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2158 pthread_mutex_unlock(&battery_monitor_mutex);
2159 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2160 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2162 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2163 _ERR("Resource Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2164 pthread_mutex_unlock(&battery_monitor_mutex);
2165 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2166 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2167 _ERR("Resource Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2168 pthread_mutex_unlock(&battery_monitor_mutex);
2169 return ret_transaction;
2172 error_code = bm_resourceid_usage_insert_to_db(g_hBatteryMonitorDB, bm_resource_type);
2173 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2174 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2175 _ERR("INSERT resource usage fail, rollback insert query(%d)!!!!\n", ret_transaction);
2176 pthread_mutex_unlock(&battery_monitor_mutex);
2179 pthread_mutex_unlock(&battery_monitor_mutex);
2180 bm_end_transaction(g_hBatteryMonitorDB, true);
2183 return BATTERY_MONITOR_ERROR_NONE;
2186 int bm_server_resource_base_usage_insert_to_db(resourceid_usage_s *bm_resource_type)
2190 int error_code = BATTERY_MONITOR_ERROR_NONE;
2191 int ret_transaction = 0;
2193 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2194 BM_RETURN_VAL((bm_resource_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The Battery Monitor Handle is NULL"));
2196 pthread_mutex_lock(&battery_monitor_mutex);
2198 /* Transaction Control Required */
2199 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2200 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2201 pthread_mutex_unlock(&battery_monitor_mutex);
2202 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2203 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2205 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2206 _ERR("Resource Base Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2207 pthread_mutex_unlock(&battery_monitor_mutex);
2208 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2209 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2210 _ERR("Resource Base Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2211 pthread_mutex_unlock(&battery_monitor_mutex);
2212 return ret_transaction;
2215 error_code = bm_resourceid_base_usage_insert_to_db(g_hBatteryMonitorDB, bm_resource_type);
2216 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2217 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2218 _ERR("INSERT resource base usage fail, rollback insert query(%d)!!!!\n", ret_transaction);
2219 pthread_mutex_unlock(&battery_monitor_mutex);
2222 pthread_mutex_unlock(&battery_monitor_mutex);
2223 bm_end_transaction(g_hBatteryMonitorDB, true);
2226 return BATTERY_MONITOR_ERROR_NONE;
2229 int bm_server_app_usage_insert_to_db(appid_usage_s *bm_app_type)
2233 int error_code = BATTERY_MONITOR_ERROR_NONE;
2234 int ret_transaction = 0;
2236 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2237 BM_RETURN_VAL((bm_app_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The Battery Monitor Handle is NULL"));
2239 pthread_mutex_lock(&battery_monitor_mutex);
2241 /* Transaction Control Required */
2242 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2243 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2244 pthread_mutex_unlock(&battery_monitor_mutex);
2245 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2246 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2248 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2249 _ERR("App Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2250 pthread_mutex_unlock(&battery_monitor_mutex);
2251 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2252 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2253 _ERR("App Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2254 pthread_mutex_unlock(&battery_monitor_mutex);
2255 return ret_transaction;
2258 error_code = bm_appid_usage_insert_to_db(g_hBatteryMonitorDB, bm_app_type);
2259 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2260 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2261 _ERR("INSERT app usage fail, rollback insert query(%d)!!!!\n", ret_transaction);
2262 pthread_mutex_unlock(&battery_monitor_mutex);
2266 pthread_mutex_unlock(&battery_monitor_mutex);
2267 bm_end_transaction(g_hBatteryMonitorDB, true);
2270 return BATTERY_MONITOR_ERROR_NONE;
2273 /* For App usage related queries */
2274 appid_usage_s *bm_server_query_app_usage_by_appid_ci(const char *app_id, long long s_time, long long e_time, int *error_code)
2278 appid_usage_s *bm_app_type = NULL;
2279 *error_code = BATTERY_MONITOR_ERROR_NONE;
2281 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2282 BM_RETURN_VAL((app_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL"));
2284 bm_app_type = bm_query_usage_by_appid_ci(g_hBatteryMonitorDB, app_id, s_time, e_time, error_code);
2290 /* For Resource usage related queries */
2291 resourceid_usage_s *bm_server_query_resource_usage_resourceid_ci(const char *resource_id, long long s_time, long long e_time, int *error_code)
2293 resourceid_usage_s *bm_resource_type = NULL;
2294 *error_code = BATTERY_MONITOR_ERROR_NONE;
2296 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2297 BM_RETURN_VAL((resource_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL"));
2299 bm_resource_type = bm_query_usage_by_resourceid_ci(g_hBatteryMonitorDB, resource_id, s_time, e_time, error_code);
2302 return bm_resource_type;
2305 resourceid_usage_s *bm_server_query_resource_base_usage_resourceid_ci(const char *resource_id, long long s_time, long long e_time, int *error_code)
2307 resourceid_usage_s *bm_resource_type = NULL;
2308 *error_code = BATTERY_MONITOR_ERROR_NONE;
2310 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2311 BM_RETURN_VAL((resource_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL"));
2313 bm_resource_type = bm_query_base_usage_by_resourceid_ci(g_hBatteryMonitorDB, resource_id, s_time, e_time, error_code);
2316 return bm_resource_type;
2319 resourceid_usage_s *bm_server_query_battery_last_charge(const char *resource_id, int *error_code)
2321 resourceid_usage_s *bm_resource_type = NULL;
2322 *error_code = BATTERY_MONITOR_ERROR_NONE;
2324 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2325 BM_RETURN_VAL((resource_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL"));
2327 bm_resource_type = bm_query_battery_last_charge(g_hBatteryMonitorDB, resource_id, error_code);
2330 return bm_resource_type;
2333 GSList* bm_server_query_appid_map(int *error_code)
2337 GSList *list = NULL;
2338 *error_code = BATTERY_MONITOR_ERROR_NONE;
2340 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2341 list = bm_query_appid_map(g_hBatteryMonitorDB, error_code);
2347 int bm_server_delete_table_by_appid(const char* app_id)
2351 int error_code = BATTERY_MONITOR_ERROR_NONE;
2353 BM_RETURN_VAL((app_id != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("Application Id is NULL"));
2354 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2355 pthread_mutex_lock(&battery_monitor_mutex);
2357 error_code = bm_delete_table_by_app_id(g_hBatteryMonitorDB, app_id);
2358 if (error_code != BATTERY_MONITOR_ERROR_NONE)
2359 _ERR("Delete of table by app_id failed");
2361 pthread_mutex_unlock(&battery_monitor_mutex);
2367 int bm_server_delete_table_by_time_interval(void)
2371 int error_code = BATTERY_MONITOR_ERROR_NONE;
2372 int ret_transaction = 0;
2374 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2375 pthread_mutex_lock(&battery_monitor_mutex);
2377 /* Transaction Control Required */
2378 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2379 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2380 pthread_mutex_unlock(&battery_monitor_mutex);
2381 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2382 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2384 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2385 _ERR("Usage Delete:bm_begin_transaction fail %d\n", ret_transaction);
2386 pthread_mutex_unlock(&battery_monitor_mutex);
2387 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2388 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2389 _ERR("Usage Delete:bm_begin_transaction fail %d\n", ret_transaction);
2390 pthread_mutex_unlock(&battery_monitor_mutex);
2391 return ret_transaction;
2393 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE);
2394 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2395 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2396 _ERR("Delete old resource usage fail, rollback delete query(%d)!!!!\n", ret_transaction);
2397 pthread_mutex_unlock(&battery_monitor_mutex);
2400 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_APP_ID_USAGE_TABLE);
2401 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2402 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2403 _ERR("Delete old app usage fail, rollback delete query(%d)!!!!\n", ret_transaction);
2404 pthread_mutex_unlock(&battery_monitor_mutex);
2407 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE);
2408 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2409 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2410 _ERR("Delete old resource base usage fail, rollback delete query(%d)!!!!\n", ret_transaction);
2411 pthread_mutex_unlock(&battery_monitor_mutex);
2414 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_BLE_STAT_TABLE);
2415 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2416 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2417 _ERR("Delete ble_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2418 pthread_mutex_unlock(&battery_monitor_mutex);
2421 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_WFL_STAT_TABLE);
2422 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2423 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2424 _ERR("Delete wifi_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2425 pthread_mutex_unlock(&battery_monitor_mutex);
2428 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_CPU_STAT_TABLE);
2429 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2430 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2431 _ERR("Delete gcpu_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2432 pthread_mutex_unlock(&battery_monitor_mutex);
2435 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_BR_STAT_TABLE);
2436 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2437 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2438 _ERR("Delete sbr_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2439 pthread_mutex_unlock(&battery_monitor_mutex);
2442 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_SGT_STAT_TABLE);
2443 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2444 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2445 _ERR("Delete sgt_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2446 pthread_mutex_unlock(&battery_monitor_mutex);
2449 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_WST_STAT_TABLE);
2450 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2451 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2452 _ERR("Delete wst_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2453 pthread_mutex_unlock(&battery_monitor_mutex);
2456 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_BST_STAT_TABLE);
2457 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2458 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2459 _ERR("Delete bst_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2460 pthread_mutex_unlock(&battery_monitor_mutex);
2463 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_NT_STAT_TABLE);
2464 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2465 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2466 _ERR("Delete nt_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2467 pthread_mutex_unlock(&battery_monitor_mutex);
2471 pthread_mutex_unlock(&battery_monitor_mutex);
2472 bm_end_transaction(g_hBatteryMonitorDB, true);
2475 return BATTERY_MONITOR_ERROR_NONE;
2478 /* Battery Dump DB Operations */
2479 int bm_server_battery_dump_insert_to_db(void *str_data, int type)
2483 int error_code = BATTERY_MONITOR_ERROR_NONE;
2484 int ret_transaction = 0;
2486 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2487 BM_RETURN_VAL((str_data != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The Battery Dump Data is NULL"));
2489 pthread_mutex_lock(&battery_monitor_mutex);
2491 /* Transaction Control Required */
2492 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2493 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2494 pthread_mutex_unlock(&battery_monitor_mutex);
2495 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2496 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2498 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2499 _ERR("Resource Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2500 pthread_mutex_unlock(&battery_monitor_mutex);
2501 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2502 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2503 _ERR("Resource Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2504 pthread_mutex_unlock(&battery_monitor_mutex);
2505 return ret_transaction;
2507 error_code = bm_battery_stat_insert_to_db(g_hBatteryMonitorDB, str_data, type);
2508 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2509 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2510 _ERR("INSERT resource usage fail, rollback insert query(%d)!!!!\n", ret_transaction);
2511 pthread_mutex_unlock(&battery_monitor_mutex);
2515 pthread_mutex_unlock(&battery_monitor_mutex);
2516 bm_end_transaction(g_hBatteryMonitorDB, true);
2519 return BATTERY_MONITOR_ERROR_NONE;
2522 int bm_server_battery_dump_query_from_db(void *str_data, int type, long int duration)
2525 int ret = BATTERY_MONITOR_ERROR_NONE;
2527 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), \
2528 { ret = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, ret, ("The database isn't connected."));
2530 BM_RETURN_VAL((str_data != NULL), \
2531 { ret = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, ret, ("The Battery Dump Handle is NULL"));
2533 ret = bm_battery_stat_query_from_db(g_hBatteryMonitorDB, str_data, type, duration);
2539 int initialize_database(void)
2543 int return_code = BATTERY_MONITOR_ERROR_NONE;
2545 if (pthread_mutex_init(&battery_monitor_mutex, NULL))
2546 _ERR("error initializing mutex");
2548 return_code = bm_db_open();
2549 if (return_code != BATTERY_MONITOR_ERROR_NONE) {
2550 _ERR("Battery Monitor DB Open Error");
2555 return BATTERY_MONITOR_ERROR_NONE;
2558 int deinitialize_database(void)
2562 int return_code = BATTERY_MONITOR_ERROR_NONE;
2564 return_code = bm_db_close();
2565 if (return_code != BATTERY_MONITOR_ERROR_NONE) {
2566 _ERR("Battery Monitor DB Open Error");
2570 if (pthread_mutex_destroy(&battery_monitor_mutex))
2571 _ERR("error destroying mutex");
2574 return BATTERY_MONITOR_ERROR_NONE;