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.
27 #include <tzplatform_config.h>
29 #include "bm_private.h"
30 #include "bd_private.h"
31 #include "bm_server_db.h"
32 #include "bm_common.h"
36 #define BM_DB_OPEN_READONLY 0
37 #define BM_DB_OPEN_READWRITE 1
39 static sqlite3* g_hBatteryMonitorDB = NULL;
40 static sqlite3* g_hBatteryMonitorDB2 = NULL;
42 pthread_mutex_t battery_monitor_mutex = PTHREAD_MUTEX_INITIALIZER;
44 static const char* bm_db_err_msg(sqlite3 *bm_db_handle)
46 return sqlite3_errmsg(bm_db_handle);
49 static int bm_db_err_code(sqlite3 *bm_db_handle)
51 return sqlite3_errcode(bm_db_handle);
54 char* bm_dup_text(const char *text_data)
58 char *text_value = NULL;
60 if (text_data != NULL)
61 text_value = strdup(text_data);
67 static bm_stmt bm_prepare_query(sqlite3 *bm_db_handle, char *query)
74 BM_RETURN_VAL((query != NULL), {}, NULL, ("query is NULL"));
76 rc = sqlite3_prepare_v2(bm_db_handle, query, strlen(query), &pStmt, NULL);
77 BM_RETURN_VAL((SQLITE_OK == rc), {}, NULL, ("sqlite3_prepare_v2() failed(%s).",
78 bm_db_err_msg(bm_db_handle)));
84 static int bm_execute_query(sqlite3 *bm_db_handle, const char *query)
89 char *pszErrorMsg = NULL;
93 return BATTERY_MONITOR_ERROR_QUERY_SYNTAX_ERROR;
96 _ERR("DB is not opened\n");
97 return BATTERY_MONITOR_ERROR_DB_NOT_OPENED;
100 rc = sqlite3_exec(bm_db_handle, query, NULL, NULL, &pszErrorMsg);
101 if (SQLITE_OK != rc) {
102 _ERR("sqlite3_exec rc(%d) failed(%s).", rc, pszErrorMsg);
103 sqlite3_free(pszErrorMsg);
110 static int bm_query_finalize(bm_stmt pStmt)
117 _ERR("pStmt is NULL");
118 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
121 rc = sqlite3_finalize(pStmt);
122 if (rc == SQLITE_BUSY) {
123 _ERR(" sqlite3 busy = %d", rc);
124 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
125 } else if (rc != SQLITE_OK) {
126 _ERR("sqlite3_finalize fail, rc : %d\n", rc);
127 return BATTERY_MONITOR_ERROR_DB_FAILED;
131 return BATTERY_MONITOR_ERROR_NONE;
134 static int bm_query_step(bm_stmt pStmt)
139 _ERR("pStmt is NULL");
143 return sqlite3_step(pStmt);
146 static int bm_begin_transaction(sqlite3 *bm_db_handle)
152 ret = bm_execute_query(bm_db_handle, "BEGIN IMMEDIATE TRANSACTION");
154 if (ret == SQLITE_BUSY) {
155 _ERR(" sqlite3 busy = %d", ret);
156 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
157 } else if (ret != SQLITE_OK) {
158 _ERR("bm_svc_begin_transaction fail :: %d", ret);
159 return BATTERY_MONITOR_ERROR_DB_FAILED;
163 return BATTERY_MONITOR_ERROR_NONE;
166 int bm_get_next_sequence(sqlite3 *bm_db_handle, const char *pszName)
171 bm_stmt pStmt = NULL;
174 char szQuery[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
175 BM_MEMSET(szQuery, 0x00, sizeof(szQuery));
177 BM_SNPRINTF(szQuery, sizeof(szQuery), "SELECT max(seq) FROM %s where name = '%s'",
178 BATTERY_MONITOR_SQLITE_SEQ, pszName);
180 rc = sqlite3_prepare_v2(bm_db_handle, szQuery, strlen(szQuery), &pStmt, NULL);
181 if (SQLITE_OK != rc) {
182 BM_SLOGE("sqlite3_prepare_v2() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
183 sqlite3_finalize(pStmt);
184 return BATTERY_MONITOR_ERROR_DB_FAILED;
187 rc = sqlite3_step(pStmt);
189 max_seq = sqlite3_column_int(pStmt, 0);
193 rc = sqlite3_finalize(pStmt);
200 static int bm_end_transaction(sqlite3 *bm_db_handle, bool is_success)
206 if (is_success == true) {
207 ret = bm_execute_query(bm_db_handle, "COMMIT TRANSACTION");
208 _DBG("bm_end_transaction COMMIT");
210 ret = bm_execute_query(bm_db_handle, "ROLLBACK TRANSACTION");
211 _DBG("bm_end_transaction ROLLBACK");
213 if (ret == SQLITE_PERM) {
214 _ERR("Battery Monitor permission denied :: %d", ret);
215 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
217 if (ret == SQLITE_BUSY) {
218 _DBG(" sqlite3 busy = %d", ret);
219 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
221 if (ret != SQLITE_OK) {
222 _ERR("bm_svc_end_transaction fail :: %d", ret);
223 return BATTERY_MONITOR_ERROR_DB_FAILED;
227 return BATTERY_MONITOR_ERROR_NONE;
230 static int bm_query_bind_int(bm_stmt pStmt, int pos, int num)
235 _ERR("statement is null");
244 return sqlite3_bind_int(pStmt, pos, num);
247 static int bm_query_bind_text(bm_stmt pStmt, int pos, const char *str)
252 _ERR("statement is null");
256 _INFO("sqlite3_bind_text");
257 return sqlite3_bind_text(pStmt, pos, (const char *)str, strlen(str), SQLITE_STATIC);
259 _INFO("sqlite3_bind_null");
260 return sqlite3_bind_null(pStmt, pos);
264 static int bm_query_table_column_int(bm_stmt pStmt, int pos)
269 _ERR("statement is null");
277 return sqlite3_column_int(pStmt, pos);
280 static const char* bm_query_table_column_text(bm_stmt pStmt, int pos)
285 _ERR("statement is null");
293 return (const char *)sqlite3_column_text(pStmt, pos);
296 static void bm_db_data_to_text(const char *textbuf, char **output)
305 *output = strdup(textbuf);
311 static int bm_db_handle_close(sqlite3 *bm_db_handle)
316 int ret = BATTERY_MONITOR_ERROR_NONE;
319 rc = db_util_close(bm_db_handle);
321 ret = BATTERY_MONITOR_ERROR_NONE;
322 else if (rc == SQLITE_PERM)
323 ret = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
324 else if (rc == SQLITE_BUSY)
325 ret = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
327 ret = BATTERY_MONITOR_ERROR_DB_FAILED;
334 static int bm_query_app_usage_convert_to_sql_ci(const char *str, long s_t, long e_t, bm_stmt hstmt)
339 bm_query_bind_text(hstmt, count++, str);
340 bm_query_bind_int(hstmt, count++, s_t);
341 bm_query_bind_int(hstmt, count++, e_t);
347 static int bm_appid_map_usage_convert_to_sql(const char* app_id, bm_stmt hstmt, char *sql_value)
352 bm_query_bind_text(hstmt, count++, app_id);
358 static int bm_appid_usage_convert_to_sql(appid_usage_s *bm_app_type, bm_stmt hstmt, char *sql_value)
363 bm_query_bind_text(hstmt, count++, (char *)bm_app_type->AppId);
364 bm_query_bind_int(hstmt, count++, bm_app_type->log_time);
365 bm_query_bind_int(hstmt, count++, bm_app_type->rId_ble);
366 bm_query_bind_int(hstmt, count++, bm_app_type->rId_wifi);
367 bm_query_bind_int(hstmt, count++, bm_app_type->rId_cpu);
368 bm_query_bind_int(hstmt, count++, bm_app_type->rId_display);
369 bm_query_bind_int(hstmt, count++, bm_app_type->rId_device_network);
370 #ifdef DISABLE_FEATURE_DATA_FROM_GPS_PLUGIN
371 bm_query_bind_int(hstmt, count++, bm_app_type->rId_gps);
372 bm_query_bind_int(hstmt, count++, bm_app_type->rId_battery);
378 static int bm_resourceid_usage_convert_to_sql(resourceid_usage_s *bm_resource_type, bm_stmt hstmt, char *sql_value)
383 bm_query_bind_text(hstmt, count++, (char *)bm_resource_type->ResourceId);
384 bm_query_bind_int(hstmt, count++, bm_resource_type->log_time);
385 bm_query_bind_int(hstmt, count++, bm_resource_type->usage);
391 static int bm_gl_ble_stat_convert_to_sql(bd_gl_ble_stat_s *gble_st, bm_stmt hstmt, char *sql_value)
396 bm_query_bind_int(hstmt, count++, gble_st->time_s);
397 bm_query_bind_int(hstmt, count++, gble_st->ble_idle_time);
398 bm_query_bind_int(hstmt, count++, gble_st->ble_rx_time);
399 bm_query_bind_int(hstmt, count++, gble_st->ble_tx_time);
400 bm_query_bind_int(hstmt, count++, gble_st->ble_pwi_val);
406 static int bm_gl_wfl_stat_convert_to_sql(bd_gl_wifi_stat_s *gwfl_st, bm_stmt hstmt, char *sql_value)
411 bm_query_bind_int(hstmt, count++, gwfl_st->time_s);
412 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_on_time);
413 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_conn_time);
414 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_idle_time);
415 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_rx_time);
416 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_tx_time);
417 bm_query_bind_int(hstmt, count++, gwfl_st->wifi_pwi_val);
423 static int bm_gl_ntw_stat_convert_to_sql(bd_gl_ntw_stat_s *gn_st, bm_stmt hstmt, char *sql_value)
428 bm_query_bind_int(hstmt, count++, gn_st->time_s);
429 bm_query_bind_int(hstmt, count++, gn_st->dn_rx_byt);
430 bm_query_bind_int(hstmt, count++, gn_st->dn_tx_byt);
431 bm_query_bind_int(hstmt, count++, gn_st->wifi_rx_byt);
432 bm_query_bind_int(hstmt, count++, gn_st->wifi_tx_byt);
433 bm_query_bind_int(hstmt, count++, gn_st->dn_rx_pkt);
434 bm_query_bind_int(hstmt, count++, gn_st->dn_tx_pkt);
435 bm_query_bind_int(hstmt, count++, gn_st->wifi_rx_pkt);
436 bm_query_bind_int(hstmt, count++, gn_st->wifi_tx_pkt);
437 bm_query_bind_int(hstmt, count++, gn_st->bt_rx_byt);
438 bm_query_bind_int(hstmt, count++, gn_st->bt_tx_byt);
444 static int bm_gl_sbr_stat_convert_to_sql(bd_gl_sbr_stat_s *gbr_st, bm_stmt hstmt, char *sql_value)
449 bm_query_bind_int(hstmt, count++, gbr_st->time_s);
450 bm_query_bind_int(hstmt, count++, gbr_st->dark);
451 bm_query_bind_int(hstmt, count++, gbr_st->dim);
452 bm_query_bind_int(hstmt, count++, gbr_st->medium);
453 bm_query_bind_int(hstmt, count++, gbr_st->light);
454 bm_query_bind_int(hstmt, count++, gbr_st->bright);
460 static int bm_gl_sgt_stat_convert_to_sql(bd_gl_sgt_stat_s *gst_st, bm_stmt hstmt, char *sql_value)
465 bm_query_bind_int(hstmt, count++, gst_st->time_s);
466 bm_query_bind_int(hstmt, count++, gst_st->scan_time);
467 bm_query_bind_int(hstmt, count++, gst_st->none_time);
468 bm_query_bind_int(hstmt, count++, gst_st->poor_time);
469 bm_query_bind_int(hstmt, count++, gst_st->med_time);
470 bm_query_bind_int(hstmt, count++, gst_st->good_time);
471 bm_query_bind_int(hstmt, count++, gst_st->grt_time);
477 static int bm_gl_wst_stat_convert_to_sql(bd_gl_wst_stat_s *gwst_st, bm_stmt hstmt, char *sql_value)
482 bm_query_bind_int(hstmt, count++, gwst_st->time_s);
483 bm_query_bind_int(hstmt, count++, gwst_st->wscan_time);
484 bm_query_bind_int(hstmt, count++, gwst_st->wnone_time);
485 bm_query_bind_int(hstmt, count++, gwst_st->wpoor_time);
486 bm_query_bind_int(hstmt, count++, gwst_st->wmed_time);
487 bm_query_bind_int(hstmt, count++, gwst_st->wgood_time);
488 bm_query_bind_int(hstmt, count++, gwst_st->wgrt_time);
494 static int bm_gl_bst_stat_convert_to_sql(bd_gl_bst_stat_s *gbst_st, bm_stmt hstmt, char *sql_value)
499 bm_query_bind_int(hstmt, count++, gbst_st->time_s);
500 bm_query_bind_int(hstmt, count++, gbst_st->off_time);
501 bm_query_bind_int(hstmt, count++, gbst_st->low_time);
502 bm_query_bind_int(hstmt, count++, gbst_st->med_time);
503 bm_query_bind_int(hstmt, count++, gbst_st->high_time);
509 static int bm_gl_cpu_stat_convert_to_sql(bd_gl_cpu_stat_s *gcpu_st, bm_stmt hstmt, char *sql_value)
514 bm_query_bind_int(hstmt, count++, gcpu_st->time_s);
515 bm_query_bind_int(hstmt, count++, gcpu_st->usr_time);
516 bm_query_bind_int(hstmt, count++, gcpu_st->sys_time);
522 static void bm_convert_column_to_resourceid_usage(bm_stmt hstmt, resourceid_usage_s* bm_resource_type)
526 const char *textbuf = NULL;
527 textbuf = bm_query_table_column_text(hstmt, BM_RESOURCEUSAGE_FIELD_RESID);
528 bm_db_data_to_text(textbuf, &(bm_resource_type->ResourceId));
529 _DBG("bm_resource_type->ResourceId =[%s]", bm_resource_type->ResourceId);
530 bm_resource_type->log_time = -1;
531 bm_resource_type->usage = bm_query_table_column_int(hstmt, BM_RESOURCEUSAGE_FIELD_USAGE);
537 static void bm_convert_column_to_battery_last_charge(bm_stmt hstmt, resourceid_usage_s* bm_resource_type)
541 bm_resource_type->log_time = bm_query_table_column_int(hstmt, 0);
542 _DBG("log-time %ld", bm_resource_type->log_time);
548 static void bm_convert_column_to_appid_usage(bm_stmt hstmt, appid_usage_s* bm_app_type)
552 const char *textbuf = NULL;
553 textbuf = bm_query_table_column_text(hstmt, BM_APPUSAGE_FIELD_APPID);
554 bm_db_data_to_text(textbuf, &(bm_app_type->AppId));
555 _DBG("bm_app_type->AppId =[%s]", bm_app_type->AppId);
556 bm_app_type->log_time = -1;
557 bm_app_type->rId_ble = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_BLE);
558 bm_app_type->rId_wifi = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_WIFI);
559 bm_app_type->rId_cpu = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_CPU);
560 bm_app_type->rId_display = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_DISPLAY);
561 bm_app_type->rId_device_network = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_DEV_NTW);
562 #ifdef DISABLE_FEATURE_DATA_FROM_GPS_PLUGIN
563 bm_app_type->rId_gps = bm_query_table_column_int(hstmt, BM_APPUSAGE_FIELD_RID_GPS);
564 bm_app_type->rId_battery = -1;
571 static void bm_convert_column_to_appid_map(bm_stmt hstmt, appid_map_s* gappid_map)
575 const char *textbuf = NULL;
576 gappid_map->id = bm_query_table_column_int(hstmt, BM_APPIDMAP_FIELD_ID);
577 textbuf = bm_query_table_column_text(hstmt, BM_APPIDMAP_FIELD_APPID);
578 bm_db_data_to_text(textbuf, &(gappid_map->AppId));
584 static void bm_convert_column_to_gl_ble_stat(bm_stmt hstmt, bd_gl_ble_stat_s *gble_st)
587 gble_st->time_s = -1;
588 gble_st->ble_idle_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_IDLE);
589 gble_st->ble_rx_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_RX);
590 gble_st->ble_tx_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_TX);
591 gble_st->ble_pwi_val = bm_query_table_column_int(hstmt, BD_GBLESTAT_PWI_VAL);
597 static void bm_convert_column_to_gl_wfl_stat(bm_stmt hstmt, bd_gl_wifi_stat_s *gwfl_st)
600 gwfl_st->time_s = -1;
601 gwfl_st->wifi_on_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_ON);
602 gwfl_st->wifi_conn_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_CON);
603 gwfl_st->wifi_idle_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_IDLE);
604 gwfl_st->wifi_rx_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_RX);
605 gwfl_st->wifi_tx_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_TX);
606 gwfl_st->wifi_pwi_val = bm_query_table_column_int(hstmt, BD_GWFLSTAT_PWI_VAL);
612 static void bm_convert_column_to_gl_sbr_stat(bm_stmt hstmt, bd_gl_sbr_stat_s *gbr_st)
616 gbr_st->dark = bm_query_table_column_int(hstmt, BD_GSBRSTAT_DARK);
617 gbr_st->dim = bm_query_table_column_int(hstmt, BD_GSBRSTAT_DIM);
618 gbr_st->medium = bm_query_table_column_int(hstmt, BD_GSBRSTAT_MEDIUM);
619 gbr_st->light = bm_query_table_column_int(hstmt, BD_GSBRSTAT_LIGHT);
620 gbr_st->bright = bm_query_table_column_int(hstmt, BD_GSBRSTAT_BRIGHT);
625 static void bm_convert_column_to_gl_ntw_stat(bm_stmt hstmt, bd_gl_ntw_stat_s *gn_st)
629 gn_st->dn_rx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_RXB);
630 gn_st->dn_tx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_TXB);
631 gn_st->wifi_rx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_RXB);
632 gn_st->wifi_tx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_TXB);
633 gn_st->dn_rx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_RXP);
634 gn_st->dn_tx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_TXP);
635 gn_st->wifi_rx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_RXP);
636 gn_st->wifi_tx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_TXP);
637 gn_st->bt_rx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_BT_RXB);
638 gn_st->bt_tx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_BT_TXB);
644 static void bm_convert_column_to_gl_sgt_stat(bm_stmt hstmt, bd_gl_sgt_stat_s *gst_st)
648 gst_st->scan_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_SCAN);
649 gst_st->none_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_NO);
650 gst_st->poor_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_POOR);
651 gst_st->med_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_MED);
652 gst_st->good_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GOOD);
653 gst_st->grt_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GRT);
659 static void bm_convert_column_to_gl_wst_stat(bm_stmt hstmt, bd_gl_wst_stat_s *gwst_st)
662 gwst_st->time_s = -1;
663 gwst_st->wscan_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_SCAN);
664 gwst_st->wnone_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_NO);
665 gwst_st->wpoor_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_POOR);
666 gwst_st->wmed_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_MED);
667 gwst_st->wgood_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GOOD);
668 gwst_st->wgrt_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GRT);
674 static void bm_convert_column_to_gl_bst_stat(bm_stmt hstmt, bd_gl_bst_stat_s *gbst_st)
677 gbst_st->time_s = -1;
678 gbst_st->off_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_OFF);
679 gbst_st->low_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_LOW);
680 gbst_st->med_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_MED);
681 gbst_st->high_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_HIGH);
687 static void bm_convert_column_to_gl_cpu_stat(bm_stmt hstmt, bd_gl_cpu_stat_s *gcpu_st)
690 gcpu_st->time_s = -1;
691 gcpu_st->usr_time = bm_query_table_column_int(hstmt, BD_GCPUSTAT_USR);
692 gcpu_st->sys_time = bm_query_table_column_int(hstmt, BD_GCPUSTAT_SYS);
698 static int bm_get_record_count(sqlite3 *bm_db_handle, const char *query)
704 bm_stmt pStmt = NULL;
707 _ERR("NULL query\n");
708 return BATTERY_MONITOR_ERROR_QUERY_SYNTAX_ERROR;
712 _ERR("DB is not opened\n");
713 return BATTERY_MONITOR_ERROR_DB_NOT_OPENED;
716 rc = sqlite3_prepare_v2(bm_db_handle, query, strlen(query), &pStmt, NULL);
718 if (SQLITE_BUSY == rc) {
719 _ERR("sqlite3_prepare_v2() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
720 sqlite3_finalize(pStmt);
721 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
722 } else if (SQLITE_OK != rc) {
723 _ERR("sqlite3_prepare_v2() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
724 sqlite3_finalize(pStmt);
725 return BATTERY_MONITOR_ERROR_DB_FAILED;
728 rc = sqlite3_step(pStmt);
729 if (SQLITE_BUSY == rc) {
730 _ERR("sqlite3_step() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
731 sqlite3_finalize(pStmt);
732 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
733 } else if (SQLITE_ROW != rc) {
734 _ERR("sqlite3_step() failed(%d, %s).", rc, bm_db_err_msg(bm_db_handle));
735 sqlite3_finalize(pStmt);
736 return BATTERY_MONITOR_ERROR_DB_FAILED;
739 ncount = sqlite3_column_int(pStmt, 0);
741 _INFO("bm record count [%d]", ncount);
742 sqlite3_finalize(pStmt);
748 static int bm_check_is_all_table_exists(sqlite3 *bm_db_handle)
753 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0,};
754 BM_MEMSET(query, 0, sizeof(query));
756 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in \
757 ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')",
758 BATTERY_MONITOR_APP_ID_MAP_TABLE, BATTERY_MONITOR_APP_ID_USAGE_TABLE,
759 BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE, BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE,
760 BATTERY_MONITOR_GBL_BLE_STAT_TABLE, BATTERY_MONITOR_GBL_WFL_STAT_TABLE,
761 BATTERY_MONITOR_GBL_NT_STAT_TABLE, BATTERY_MONITOR_GBL_BR_STAT_TABLE,
762 BATTERY_MONITOR_GBL_SGT_STAT_TABLE, BATTERY_MONITOR_GBL_WST_STAT_TABLE,
763 BATTERY_MONITOR_GBL_BST_STAT_TABLE, BATTERY_MONITOR_GBL_CPU_STAT_TABLE);
765 rc = bm_get_record_count(bm_db_handle, query);
767 if (rc != BATTERY_MONITOR_TABLE_COUNT)
768 _ERR("Table count is not matched rc = %d\n", rc);
774 static int bm_create_all_tables(sqlite3 *bm_db_handle)
779 int error_code = BATTERY_MONITOR_ERROR_NONE;
780 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
781 BM_MEMSET(query, 0, sizeof(query));
783 /* Create the appid map table */
784 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
785 BATTERY_MONITOR_APP_ID_MAP_TABLE);
786 rc = bm_get_record_count(bm_db_handle, query);
788 rc = bm_execute_query(bm_db_handle, APP_ID_MAP_SCHEMA);
789 if (rc == SQLITE_BUSY)
790 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
791 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
792 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
793 APP_ID_MAP_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
795 /* Create the app based usage table */
796 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
797 BATTERY_MONITOR_APP_ID_USAGE_TABLE);
798 rc = bm_get_record_count(bm_db_handle, query);
800 rc = bm_execute_query(bm_db_handle, APP_ID_USAGE_SCHEMA);
801 if (rc == SQLITE_BUSY)
802 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
803 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
804 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
805 APP_ID_USAGE_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
807 /* Create the resource based usage table */
808 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
809 BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE);
810 rc = bm_get_record_count(bm_db_handle, query);
812 rc = bm_execute_query(bm_db_handle, RESOURCE_ID_USAGE_SCHEMA);
813 if (rc == SQLITE_BUSY)
814 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
815 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
816 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
817 RESOURCE_ID_USAGE_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
819 /* Create the resource base usage table */
820 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
821 BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE);
822 rc = bm_get_record_count(bm_db_handle, query);
824 rc = bm_execute_query(bm_db_handle, RES_ID_BASE_USAGE_SCHEMA);
825 if (rc == SQLITE_BUSY)
826 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
827 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
828 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
829 RES_ID_BASE_USAGE_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
832 /* Battery Dump Tables */
833 /* Create the global bluetooth stats table */
834 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
835 BATTERY_MONITOR_GBL_BLE_STAT_TABLE);
836 rc = bm_get_record_count(bm_db_handle, query);
838 rc = bm_execute_query(bm_db_handle, GBL_BLE_STAT_SCHEMA);
839 if (rc == SQLITE_BUSY)
840 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
841 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
842 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
843 GBL_BLE_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
845 /* Create the global wifi stats table */
846 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
847 BATTERY_MONITOR_GBL_WFL_STAT_TABLE);
848 rc = bm_get_record_count(bm_db_handle, query);
850 rc = bm_execute_query(bm_db_handle, GBL_WFL_STAT_SCHEMA);
851 if (rc == SQLITE_BUSY)
852 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
853 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
854 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
855 GBL_WFL_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
857 /* Create the global network stats table */
858 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
859 BATTERY_MONITOR_GBL_NT_STAT_TABLE);
860 rc = bm_get_record_count(bm_db_handle, query);
862 rc = bm_execute_query(bm_db_handle, GBL_NT_STAT_SCHEMA);
863 if (rc == SQLITE_BUSY)
864 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
865 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
866 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
867 GBL_NT_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
869 /* Create the global brightness stats table */
870 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
871 BATTERY_MONITOR_GBL_BR_STAT_TABLE);
872 rc = bm_get_record_count(bm_db_handle, query);
874 rc = bm_execute_query(bm_db_handle, GBL_BR_STAT_SCHEMA);
875 if (rc == SQLITE_BUSY)
876 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
877 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
878 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
879 GBL_BR_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
881 /* Create the global signal stats table */
882 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
883 BATTERY_MONITOR_GBL_SGT_STAT_TABLE);
884 rc = bm_get_record_count(bm_db_handle, query);
886 rc = bm_execute_query(bm_db_handle, GBL_SGT_STAT_SCHEMA);
887 if (rc == SQLITE_BUSY)
888 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
889 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
890 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
891 GBL_SGT_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
893 /* Create the global wifi signal stats table */
894 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
895 BATTERY_MONITOR_GBL_WST_STAT_TABLE);
896 rc = bm_get_record_count(bm_db_handle, query);
898 rc = bm_execute_query(bm_db_handle, GBL_WST_STAT_SCHEMA);
899 if (rc == SQLITE_BUSY)
900 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
901 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
902 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
903 GBL_WST_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
905 /* Create the global bt signal stats table */
906 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
907 BATTERY_MONITOR_GBL_BST_STAT_TABLE);
908 rc = bm_get_record_count(bm_db_handle, query);
910 rc = bm_execute_query(bm_db_handle, GBL_BST_STAT_SCHEMA);
911 if (rc == SQLITE_BUSY)
912 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
913 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
914 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
915 GBL_BST_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
917 /* Create the global cpu stats table */
918 BM_SNPRINTF(query, sizeof(query), "select count(*) from sqlite_master where name in ('%s')",
919 BATTERY_MONITOR_GBL_CPU_STAT_TABLE);
920 rc = bm_get_record_count(bm_db_handle, query);
922 rc = bm_execute_query(bm_db_handle, GBL_CPU_STAT_SCHEMA);
923 if (rc == SQLITE_BUSY)
924 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
925 BM_RETURN_VAL((SQLITE_OK == rc), {}, BATTERY_MONITOR_ERROR_DB_FAILED,
926 ("bm_execute_query(bm_db_handle, %s) failed(%d, %s).\n",
927 GBL_CPU_STAT_SCHEMA, rc, bm_db_err_msg(bm_db_handle)));
934 static long int bm_get_time_bias(int period_type)
945 if (period_type == 0) {
946 ret = ret - BM_DURATION_1DAY;
947 } else if (period_type == 1) {
948 ret = ret - BM_DURATION_1WEEK;
950 _ERR("Invalid value for period [%d]", period_type);
958 static int bm_db_open(void)
965 char bm_db_path[256] = {0, };
966 BM_MEMSET(bm_db_path, 0x00, sizeof(bm_db_path));
968 BATTERY_MONITOR_GET_DB_PATH(bm_db_path, sizeof(bm_db_path));
970 if (g_hBatteryMonitorDB) {
971 _ERR("Battery Monitor database is using in another app.");
972 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
975 ret = bm_db_handle_close(g_hBatteryMonitorDB2);
976 if (ret != BATTERY_MONITOR_ERROR_NONE)
977 _DBG("db_util_close(g_hBatteryMonitorDB2) fail ret = %d", ret);
979 _DBG("before bm_db_open()");
980 // if (mode == BM_DB_OPEN_READWRITE)
981 rc = db_util_open(bm_db_path, &g_hBatteryMonitorDB, DB_UTIL_REGISTER_HOOK_METHOD);
982 // else if (mode == BM_DB_OPEN_READONLY)
983 // rc = db_util_open_with_options(bm_db_path, &g_hBatteryMonitorDB, SQLITE_OPEN_READONLY, NULL);
985 // return _BATTERY_MONITOR_ERROR_DB_NOT_OPENED;
986 _DBG("after bm_db_open() sqlite_rc = %d", rc);
988 if (rc == SQLITE_PERM || bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
989 _ERR("Battery Monitor permission denied");
990 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
993 if (rc == SQLITE_BUSY) {
994 _ERR("busy handler fail.");
995 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
998 if (rc != SQLITE_OK) {
999 _ERR("The database isn't connected.");
1000 return BATTERY_MONITOR_ERROR_DB_NOT_OPENED;
1003 rc = bm_check_is_all_table_exists(g_hBatteryMonitorDB);
1006 _ERR("bm_check_is_all_table_exists rc=[%d]", rc);
1008 } else if (rc == BATTERY_MONITOR_TABLE_COUNT) {
1011 int ret = bm_create_all_tables(g_hBatteryMonitorDB);
1012 if (ret != BATTERY_MONITOR_ERROR_NONE) {
1013 _ERR("bm_create_all_tables fail ret=[%d]", ret);
1019 return BATTERY_MONITOR_ERROR_NONE;
1022 static int bm_db_close(void)
1028 ret = bm_db_handle_close(g_hBatteryMonitorDB);
1029 if (ret != BATTERY_MONITOR_ERROR_NONE) {
1030 _ERR("db_util_close(g_hBatteryMonitorDB) fail ret = %d", ret);
1031 g_hBatteryMonitorDB2 = g_hBatteryMonitorDB;
1034 g_hBatteryMonitorDB = NULL;
1040 static gboolean app_name_check_duplicated(sqlite3 *bm_db_handle, const char *app_id, int *error_code)
1044 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1046 *error_code = BATTERY_MONITOR_ERROR_NONE;
1048 BM_RETURN_VAL((bm_db_handle != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, false, ("The database isn't connected."));
1049 BM_RETURN_VAL((app_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, false, ("app_id is NULL."));
1051 BM_MEMSET(query, 0x00, sizeof(query));
1053 BM_SNPRINTF(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE AppId='%s'", BATTERY_MONITOR_APP_ID_MAP_TABLE, app_id);
1055 count = bm_get_record_count(bm_db_handle, query);
1057 _INFO("query=[%s]", query);
1065 static int bm_appid_usage_insert_to_db(sqlite3 *bm_db_handle, appid_usage_s *bm_app_type)
1070 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1071 int error_code = BATTERY_MONITOR_ERROR_NONE;
1072 bm_stmt hstmt = NULL;
1074 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1075 BM_RETURN_VAL((bm_app_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The battery monitor handle is NULL"));
1077 /* check mandatory field(app id)*/
1078 if (!bm_app_type->AppId)
1079 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1081 BM_MEMSET(query, 0x00, sizeof(query));
1082 #ifdef DISABLE_FEATURE_DATA_FROM_GPS_PLUGIN
1083 BM_SNPRINTF(query, sizeof(query), \
1084 "INSERT INTO %s( AppId, log_time, rId_ble, rId_wifi, rId_cpu, rId_display, rId_device_network, rId_gps, rId_battery ) values "
1085 "(?, ?, ?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_APP_ID_USAGE_TABLE);
1087 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s( AppId, log_time, rId_ble, rId_wifi, rId_cpu, rId_display, rId_device_network) values "
1088 "(?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_APP_ID_USAGE_TABLE);
1091 hstmt = bm_prepare_query(bm_db_handle, query);
1092 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1093 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1094 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1095 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1096 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1097 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1100 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1102 bm_appid_usage_convert_to_sql(bm_app_type, hstmt, query);
1104 rc = bm_query_step(hstmt);
1105 if (rc == SQLITE_BUSY) {
1106 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1107 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1108 } else if (rc != SQLITE_DONE) {
1109 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1110 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1113 rc = bm_query_finalize(hstmt);
1114 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1121 static int bm_battery_stat_insert_to_db(sqlite3 *bm_db_handle, void *str_data, int type)
1125 if(str_data == NULL) {
1126 _ERR("Invalid Stat");
1127 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1130 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1131 int error_code = BATTERY_MONITOR_ERROR_NONE;
1132 bm_stmt hstmt = NULL;
1134 BM_MEMSET(query, 0x00, sizeof(query));
1137 case 0: //;GBLE DATA
1139 bd_gl_ble_stat_s *gble_st = (bd_gl_ble_stat_s *)str_data;
1140 _DBG("time %ld idle_time %ld rx_time %ld tx_time %ld pwi %ld", gble_st->time_s, gble_st->ble_idle_time,
1141 gble_st->ble_rx_time, gble_st->ble_tx_time, gble_st->ble_pwi_val);
1142 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, ble_idle_time, ble_rx_time, \
1143 ble_tx_time, ble_pwi_val) values " "(?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_BLE_STAT_TABLE);
1144 hstmt = bm_prepare_query(bm_db_handle, query);
1145 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1146 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1147 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1148 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1149 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1150 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1152 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1153 bm_gl_ble_stat_convert_to_sql(gble_st, hstmt, query);
1157 bd_gl_wifi_stat_s *gwfl_st = (bd_gl_wifi_stat_s *)str_data;
1158 _DBG("time %ld on_time %ld conn_time %ld idle_time %ld rx_time %ld tx_time %ld pwi %ld", gwfl_st->time_s,
1159 gwfl_st->wifi_on_time, gwfl_st->wifi_conn_time, gwfl_st->wifi_idle_time, gwfl_st->wifi_rx_time,
1160 gwfl_st->wifi_tx_time, gwfl_st->wifi_pwi_val);
1161 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, wifi_on_time, wifi_conn_time, wifi_idle_time, \
1162 wifi_rx_time, wifi_tx_time, wifi_pwi_val) values" "(?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_WFL_STAT_TABLE);
1163 hstmt = bm_prepare_query(bm_db_handle, query);
1164 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1165 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1166 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1167 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1168 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1169 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1171 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1172 bm_gl_wfl_stat_convert_to_sql(gwfl_st, hstmt, query);
1176 bd_gl_ntw_stat_s *gn_st = (bd_gl_ntw_stat_s *)str_data;
1177 _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",
1178 gn_st->time_s, gn_st->dn_rx_byt, gn_st->dn_tx_byt, gn_st->wifi_rx_byt, gn_st->wifi_tx_byt,
1179 gn_st->dn_rx_pkt, gn_st->dn_tx_pkt, gn_st->wifi_rx_pkt, gn_st->wifi_tx_pkt);
1180 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, dn_rx_byt, dn_tx_byt, wifi_rx_byt, wifi_tx_byt, \
1181 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);
1182 hstmt = bm_prepare_query(bm_db_handle, query);
1183 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1184 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1185 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1186 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1187 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1188 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1190 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1191 bm_gl_ntw_stat_convert_to_sql(gn_st, hstmt, query);
1195 bd_gl_sbr_stat_s *gbr_st = (bd_gl_sbr_stat_s *)str_data;
1196 _DBG("time %ld dark %ld dim %ld medium %ld light %ld bright %ld", gbr_st->time_s,
1197 gbr_st->dark, gbr_st->dim, gbr_st->medium, gbr_st->light, gbr_st->bright);
1198 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, dark, dim, medium, light, bright) values" \
1199 "(?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_BR_STAT_TABLE);
1200 hstmt = bm_prepare_query(bm_db_handle, query);
1201 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1202 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1203 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1204 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1205 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1206 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1208 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1209 bm_gl_sbr_stat_convert_to_sql(gbr_st, hstmt, query);
1213 bd_gl_sgt_stat_s *gst_st = (bd_gl_sgt_stat_s *)str_data;
1214 _DBG("time %ld scan %ld no %ld poor %ld med %ld good %ld great %ld", gst_st->time_s, gst_st->scan_time,
1215 gst_st->none_time, gst_st->poor_time, gst_st->med_time, gst_st->good_time, gst_st->grt_time);
1216 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, scan_time, none_time, poor_time, med_time, good_time, \
1217 grt_time) values" "(?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_SGT_STAT_TABLE);
1218 hstmt = bm_prepare_query(bm_db_handle, query);
1219 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1220 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1221 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1222 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1223 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1224 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1226 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1227 bm_gl_sgt_stat_convert_to_sql(gst_st, hstmt, query);
1231 bd_gl_wst_stat_s *gwst_st = (bd_gl_wst_stat_s *)str_data;
1232 _DBG("time %ld wscan %ld wno %ld wpoor %ld wmed %ld wgood %ld wgreat %ld", gwst_st->time_s, gwst_st->wscan_time,
1233 gwst_st->wnone_time, gwst_st->wpoor_time, gwst_st->wmed_time, gwst_st->wgood_time, gwst_st->wgrt_time);
1234 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, wscan_time, wnone_time, wpoor_time, wmed_time, wgood_time, \
1235 wgrt_time) values" "(?, ?, ?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_WST_STAT_TABLE);
1236 hstmt = bm_prepare_query(bm_db_handle, query);
1237 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1238 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1239 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1240 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1241 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1242 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1244 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1245 bm_gl_wst_stat_convert_to_sql(gwst_st, hstmt, query);
1249 bd_gl_bst_stat_s *gbst_st = (bd_gl_bst_stat_s *)str_data;
1250 _DBG("time %ld off %ld low %ld med %ld high %ld", gbst_st->time_s, gbst_st->off_time, gbst_st->low_time,
1251 gbst_st->med_time, gbst_st->high_time);
1252 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, off_time, low_time, med_time, high_time) values "\
1253 "(?, ?, ?, ?, ?)", BATTERY_MONITOR_GBL_BST_STAT_TABLE);
1254 hstmt = bm_prepare_query(bm_db_handle, query);
1255 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1256 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1257 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1258 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1259 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1260 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1262 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1263 bm_gl_bst_stat_convert_to_sql(gbst_st, hstmt, query);
1267 bd_gl_cpu_stat_s *gcpu_st = (bd_gl_cpu_stat_s *)str_data;
1268 _DBG("time %ld usr %ld sys %ld", gcpu_st->time_s, gcpu_st->usr_time, gcpu_st->sys_time);
1269 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s(time_s, usr_time, sys_time) values "\
1270 "(?, ?, ?)", BATTERY_MONITOR_GBL_CPU_STAT_TABLE);
1271 hstmt = bm_prepare_query(bm_db_handle, query);
1272 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1273 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1274 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1275 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1276 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1277 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1279 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1280 bm_gl_cpu_stat_convert_to_sql(gcpu_st, hstmt, query);
1283 _ERR("Invalid Type");
1284 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1287 rc = bm_query_step(hstmt);
1288 if (rc == SQLITE_BUSY) {
1289 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1290 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1291 } else if (rc != SQLITE_DONE) {
1292 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1293 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1296 rc = bm_query_finalize(hstmt);
1298 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1304 static int bm_resourceid_usage_insert_to_db(sqlite3 *bm_db_handle, resourceid_usage_s *bm_resource_type)
1309 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1310 int error_code = BATTERY_MONITOR_ERROR_NONE;
1311 bm_stmt hstmt = NULL;
1313 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1314 BM_RETURN_VAL((bm_resource_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The battery monitor handle is NULL"));
1316 /* check mandatory field(Resource id)*/
1317 if (!bm_resource_type->ResourceId)
1318 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1320 BM_MEMSET(query, 0x00, sizeof(query));
1321 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s( ResourceId, log_time, usage ) values " "(?, ?, ?)", BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE);
1323 hstmt = bm_prepare_query(bm_db_handle, query);
1324 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1325 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1326 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1327 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1328 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1329 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1332 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1334 bm_resourceid_usage_convert_to_sql(bm_resource_type, hstmt, query);
1335 rc = bm_query_step(hstmt);
1336 if (rc == SQLITE_BUSY) {
1337 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1338 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1339 } else if (rc != SQLITE_DONE) {
1340 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1341 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1344 rc = bm_query_finalize(hstmt);
1345 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1352 static int bm_resourceid_base_usage_insert_to_db(sqlite3 *bm_db_handle, resourceid_usage_s *bm_resource_type)
1357 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1358 int error_code = BATTERY_MONITOR_ERROR_NONE;
1359 bm_stmt hstmt = NULL;
1361 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1362 BM_RETURN_VAL((bm_resource_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The battery monitor handle is NULL"));
1364 /* check mandatory field(Resource id)*/
1365 if (!bm_resource_type->ResourceId)
1366 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1368 BM_MEMSET(query, 0x00, sizeof(query));
1369 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s( ResourceId, log_time, usage ) values " "(?, ?, ?)", BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE);
1371 hstmt = bm_prepare_query(bm_db_handle, query);
1372 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1373 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1374 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1375 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1376 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1377 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1380 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1382 bm_resourceid_usage_convert_to_sql(bm_resource_type, hstmt, query);
1383 rc = bm_query_step(hstmt);
1384 if (rc == SQLITE_BUSY) {
1385 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1386 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1387 } else if (rc != SQLITE_DONE) {
1388 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1389 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1392 rc = bm_query_finalize(hstmt);
1393 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1400 int bm_appid_map_insert_to_db(sqlite3 *bm_db_handle, const char *app_id)
1405 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1406 int error_code = BATTERY_MONITOR_ERROR_NONE;
1407 bm_stmt hstmt = NULL;
1409 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1411 /* check mandatory field(app id)*/
1413 return BATTERY_MONITOR_ERROR_INVALID_PARAMETER;
1415 /* The AppId integer value should be auto increment */
1416 BM_MEMSET(query, 0x00, sizeof(query));
1417 BM_SNPRINTF(query, sizeof(query), "INSERT INTO %s( AppId ) values "
1418 "(?)", BATTERY_MONITOR_APP_ID_MAP_TABLE);
1420 hstmt = bm_prepare_query(bm_db_handle, query);
1421 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1422 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1423 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1424 } else if (bm_db_err_code(bm_db_handle) == SQLITE_BUSY) {
1425 _ERR("Database Busy(%s)", bm_db_err_msg(bm_db_handle));
1426 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1429 BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
1431 bm_appid_map_usage_convert_to_sql(app_id, hstmt, query);
1433 rc = bm_query_step(hstmt);
1434 if (rc == SQLITE_BUSY) {
1435 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1436 error_code = BATTERY_MONITOR_ERROR_DATABASE_BUSY;
1437 } else if (rc != SQLITE_DONE) {
1438 _ERR("bm_db_query_step() failed(%d, %s)", rc, bm_db_err_msg(bm_db_handle));
1439 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1442 rc = bm_query_finalize(hstmt);
1443 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1450 GSList* bm_query_appid_map(sqlite3 *bm_db_handle, int *error_code)
1452 bm_stmt hstmt = NULL;
1453 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1455 *error_code = BATTERY_MONITOR_ERROR_NONE;
1456 GSList* appid_map_list = NULL;
1458 BM_RETURN_VAL((bm_db_handle != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; },
1459 NULL, ("The database isn't connected."));
1460 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1461 BM_SNPRINTF(query, sizeof(query), "SELECT * FROM %s", BATTERY_MONITOR_APP_ID_MAP_TABLE);
1463 hstmt = bm_prepare_query(bm_db_handle, query);
1464 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1465 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1466 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1470 appid_map_s *gappid_map = NULL;
1471 rc = bm_query_step(hstmt);
1472 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND,
1473 ("The record isn't found.\n"));
1474 while (rc == SQLITE_ROW) {
1475 gappid_map = (appid_map_s *)calloc(1, sizeof(appid_map_s));
1476 if (gappid_map == NULL) {
1477 _ERR("Memory Allocation Failed");
1478 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1481 bm_convert_column_to_appid_map(hstmt, gappid_map);
1482 appid_map_list = g_slist_append(appid_map_list, gappid_map);
1483 rc = bm_query_step(hstmt);
1486 rc = bm_query_finalize(hstmt);
1487 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1490 *error_code = BATTERY_MONITOR_ERROR_NONE;
1492 if (hstmt != NULL) {
1493 rc = bm_query_finalize(hstmt);
1494 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1496 _ERR("finalize error");
1500 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && appid_map_list != NULL)
1501 bm_set_free_gslist_appid_map(appid_map_list);
1502 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && appid_map_list != NULL) {
1503 _INFO("Returning appid map list");
1504 return appid_map_list;
1510 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)
1514 bm_stmt hstmt = NULL;
1516 *error_code = BATTERY_MONITOR_ERROR_NONE;
1518 long int s_t = (long)s_time;
1519 long int e_t = (long)e_time;
1520 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1521 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1522 BM_SNPRINTF(query, sizeof(query), "SELECT AppId, sum(rId_ble), sum(rId_wifi), sum(rId_cpu), \
1523 sum(rId_display), sum(rId_device_network), sum(rId_gps) FROM %s WHERE \
1524 AppId = ? AND log_time > ? AND log_time < ? ", BATTERY_MONITOR_APP_ID_USAGE_TABLE);
1525 hstmt = bm_prepare_query(bm_db_handle, query);
1526 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1527 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1528 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1532 bm_query_app_usage_convert_to_sql_ci(app_id, s_t, e_t, hstmt);
1533 appid_usage_s *bm_app_type = NULL;
1534 rc = bm_query_step(hstmt);
1535 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND,
1536 ("The record isn't found.(%s)\n", app_id));
1537 bm_app_type = (appid_usage_s *)calloc(1, sizeof(appid_usage_s));
1538 if (bm_app_type == NULL) {
1539 _ERR("memory allocation failed");
1540 if (hstmt != NULL) {
1541 rc = bm_query_finalize(hstmt);
1542 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; },
1543 NULL, ("finalize error"));
1546 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1549 bm_convert_column_to_appid_usage(hstmt, bm_app_type);
1550 rc = bm_query_finalize(hstmt);
1551 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1553 *error_code = BATTERY_MONITOR_ERROR_NONE;
1556 if (hstmt != NULL) {
1557 rc = bm_query_finalize(hstmt);
1558 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1560 _ERR("finalize error");
1564 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_app_type) {
1565 BM_FREE(bm_app_type);
1568 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_app_type != NULL) {
1569 _INFO("Returning appid usage");
1577 static int bm_battery_stat_query_from_db(sqlite3 *bm_db_handle, void* str_data, int type, long int duration)
1581 _DBG("Value for duration is [%ld]", duration);
1582 bm_stmt hstmt = NULL;
1583 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1585 int error_code = BATTERY_MONITOR_ERROR_NONE;
1587 BM_RETURN_VAL((bm_db_handle != NULL), { error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; },
1588 error_code, ("The database isn't connected."));
1589 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1594 BM_SNPRINTF(query, sizeof(query), "SELECT sum(ble_idle_time), sum(ble_rx_time), sum(ble_tx_time), \
1595 sum(ble_pwi_val) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BLE_STAT_TABLE, duration);
1596 hstmt = bm_prepare_query(bm_db_handle, query);
1597 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1598 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1599 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1602 rc = bm_query_step(hstmt);
1603 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1604 bm_convert_column_to_gl_ble_stat(hstmt, str_data);
1608 BM_SNPRINTF(query, sizeof(query), "SELECT sum(wifi_on_time), sum(wifi_conn_time), sum(wifi_idle_time), \
1609 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);
1610 hstmt = bm_prepare_query(bm_db_handle, query);
1611 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1612 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1613 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1616 rc = bm_query_step(hstmt);
1617 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1618 bm_convert_column_to_gl_wfl_stat(hstmt, str_data);
1622 BM_SNPRINTF(query, sizeof(query), "SELECT sum(dn_rx_byt), sum(dn_tx_byt), sum(wifi_rx_byt), \
1623 sum(wifi_tx_byt), sum(dn_rx_pkt), sum(dn_tx_pkt), sum(wifi_rx_pkt), sum(wifi_tx_pkt), \
1624 sum(bt_rx_byt), sum(bt_tx_byt) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_NT_STAT_TABLE, duration);
1625 hstmt = bm_prepare_query(bm_db_handle, query);
1626 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1627 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1628 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1631 rc = bm_query_step(hstmt);
1632 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1633 bm_convert_column_to_gl_ntw_stat(hstmt, str_data);
1637 BM_SNPRINTF(query, sizeof(query), "SELECT sum(dark), sum(dim), sum(medium), \
1638 sum(light), sum(bright) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BR_STAT_TABLE, duration);
1639 hstmt = bm_prepare_query(bm_db_handle, query);
1640 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1641 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1642 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1645 rc = bm_query_step(hstmt);
1646 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1647 bm_convert_column_to_gl_sbr_stat(hstmt, str_data);
1651 BM_SNPRINTF(query, sizeof(query), "SELECT sum(scan_time), sum(none_time), sum(poor_time), \
1652 sum(med_time), sum(good_time), sum(grt_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_SGT_STAT_TABLE, duration);
1653 hstmt = bm_prepare_query(bm_db_handle, query);
1654 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1655 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1656 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1659 rc = bm_query_step(hstmt);
1660 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1661 bm_convert_column_to_gl_sgt_stat(hstmt, str_data);
1665 BM_SNPRINTF(query, sizeof(query), "SELECT sum(wscan_time), sum(wnone_time), sum(wpoor_time), \
1666 sum(wmed_time), sum(wgood_time), sum(wgrt_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_WST_STAT_TABLE, duration);
1667 hstmt = bm_prepare_query(bm_db_handle, query);
1668 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1669 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1670 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1673 rc = bm_query_step(hstmt);
1674 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1675 bm_convert_column_to_gl_wst_stat(hstmt, str_data);
1679 BM_SNPRINTF(query, sizeof(query), "SELECT sum(off_time), sum(low_time), sum(med_time), \
1680 sum(high_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BST_STAT_TABLE, duration);
1681 hstmt = bm_prepare_query(bm_db_handle, query);
1682 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1683 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1684 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1687 rc = bm_query_step(hstmt);
1688 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1689 bm_convert_column_to_gl_bst_stat(hstmt, str_data);
1693 BM_SNPRINTF(query, sizeof(query), "SELECT sum(usr_time), sum(sys_time) \
1694 FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_CPU_STAT_TABLE, duration);
1695 hstmt = bm_prepare_query(bm_db_handle, query);
1696 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1697 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1698 error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1701 rc = bm_query_step(hstmt);
1702 BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
1703 bm_convert_column_to_gl_cpu_stat(hstmt, str_data);
1709 rc = bm_query_finalize(hstmt);
1710 BM_CATCH_ERROR((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1712 error_code = BATTERY_MONITOR_ERROR_NONE;
1714 if (hstmt != NULL) {
1715 rc = bm_query_finalize(hstmt);
1716 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1718 _ERR("finalize error");
1723 if ((error_code == BATTERY_MONITOR_ERROR_NONE) && str_data != NULL) {
1724 _INFO("Returning Battery Stat");
1732 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)
1735 bm_stmt hstmt = NULL;
1737 *error_code = BATTERY_MONITOR_ERROR_NONE;
1738 long int s_t = (long)s_time;
1739 long int e_t = (long)e_time;
1740 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1741 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1742 BM_SNPRINTF(query, sizeof(query), "SELECT ResourceId, sum(usage) FROM %s WHERE ResourceId = '%s' \
1743 AND log_time > %ld AND log_time < %ld", BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE, resource_id, s_t, e_t);
1745 hstmt = bm_prepare_query(bm_db_handle, query);
1746 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1747 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1748 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1752 resourceid_usage_s *bm_resource_type = NULL;
1753 rc = bm_query_step(hstmt);
1754 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.(%s)\n", resource_id));
1756 bm_resource_type = (resourceid_usage_s *)calloc(1, sizeof(resourceid_usage_s));
1757 if (bm_resource_type == NULL) {
1758 _ERR("memory allocation failed");
1759 if (hstmt != NULL) {
1760 rc = bm_query_finalize(hstmt);
1761 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; }, NULL, ("finalize error"));
1764 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1767 bm_convert_column_to_resourceid_usage(hstmt, bm_resource_type);
1769 rc = bm_query_finalize(hstmt);
1770 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1772 *error_code = BATTERY_MONITOR_ERROR_NONE;
1775 if (hstmt != NULL) {
1776 rc = bm_query_finalize(hstmt);
1777 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1779 _ERR("finalize error");
1783 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_resource_type) {
1784 BM_FREE(bm_resource_type);
1785 bm_resource_type = NULL;
1787 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_resource_type != NULL) {
1788 _INFO("Returning appid usage");
1789 return bm_resource_type;
1795 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)
1798 bm_stmt hstmt = NULL;
1800 *error_code = BATTERY_MONITOR_ERROR_NONE;
1801 long int s_t = (long)s_time;
1802 long int e_t = (long)e_time;
1803 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1804 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1805 BM_SNPRINTF(query, sizeof(query), "SELECT ResourceId, sum(usage) FROM %s WHERE ResourceId = '%s' \
1806 AND log_time > %ld AND log_time < %ld", BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE, resource_id, s_t, e_t);
1808 hstmt = bm_prepare_query(bm_db_handle, query);
1809 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1810 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1811 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1815 resourceid_usage_s *bm_resource_type = NULL;
1816 rc = bm_query_step(hstmt);
1817 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.(%s)\n", resource_id));
1819 bm_resource_type = (resourceid_usage_s *)calloc(1, sizeof(resourceid_usage_s));
1820 if (bm_resource_type == NULL) {
1821 _ERR("memory allocation failed");
1822 if (hstmt != NULL) {
1823 rc = bm_query_finalize(hstmt);
1824 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; }, NULL, ("finalize error"));
1827 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1830 bm_convert_column_to_resourceid_usage(hstmt, bm_resource_type);
1832 rc = bm_query_finalize(hstmt);
1833 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1835 *error_code = BATTERY_MONITOR_ERROR_NONE;
1838 if (hstmt != NULL) {
1839 rc = bm_query_finalize(hstmt);
1840 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1842 _ERR("finalize error");
1846 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_resource_type) {
1847 BM_FREE(bm_resource_type);
1848 bm_resource_type = NULL;
1850 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_resource_type != NULL) {
1851 _INFO("Returning appid usage");
1852 return bm_resource_type;
1858 static resourceid_usage_s* bm_query_battery_last_charge(sqlite3 *bm_db_handle, const char *resource_id, int *error_code)
1861 bm_stmt hstmt = NULL;
1863 *error_code = BATTERY_MONITOR_ERROR_NONE;
1864 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1865 BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
1866 BM_SNPRINTF(query, sizeof(query), "SELECT MAX(log_time) FROM %s WHERE ResourceId = '%s'",
1867 BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE, resource_id);
1869 hstmt = bm_prepare_query(bm_db_handle, query);
1870 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1871 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1872 *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1876 resourceid_usage_s *bm_resource_type = NULL;
1877 rc = bm_query_step(hstmt);
1878 BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.(%s)\n", resource_id));
1880 bm_resource_type = (resourceid_usage_s *)calloc(1, sizeof(resourceid_usage_s));
1881 if (bm_resource_type == NULL) {
1882 _ERR("memory allocation failed");
1883 if (hstmt != NULL) {
1884 rc = bm_query_finalize(hstmt);
1885 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), { *error_code = rc; }, NULL, ("finalize error"));
1888 *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
1891 bm_convert_column_to_battery_last_charge(hstmt, bm_resource_type);
1893 rc = bm_query_finalize(hstmt);
1894 BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
1896 *error_code = BATTERY_MONITOR_ERROR_NONE;
1899 if (hstmt != NULL) {
1900 rc = bm_query_finalize(hstmt);
1901 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1903 _ERR("finalize error");
1907 if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_resource_type) {
1908 BM_FREE(bm_resource_type);
1909 bm_resource_type = NULL;
1911 if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_resource_type != NULL) {
1912 _INFO("Returning battery plug time");
1913 return bm_resource_type;
1919 static int bm_delete_table(sqlite3 *bm_db_handle, bm_stmt *phstmt, int num_app_id, const char *app_id, const char* table)
1923 _INFO("bm_delete_table start - table[%s]", table);
1924 int error_code = BATTERY_MONITOR_ERROR_NONE;
1925 int binding_count = 1;
1927 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1929 bm_stmt hstmt = *phstmt;
1931 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1932 BM_RETURN_VAL((table != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("table is null!"));
1934 if ((g_strcmp0(table, BATTERY_MONITOR_APP_ID_USAGE_TABLE) == 0))
1935 BM_SNPRINTF(query, sizeof(query), "DELETE FROM %s WHERE AppId = ?", table);
1936 else if (g_strcmp0(table, BATTERY_MONITOR_APP_ID_MAP_TABLE) == 0)
1937 BM_SNPRINTF(query, sizeof(query), "DELETE FROM %s WHERE AppName = ?", table);
1939 hstmt = bm_prepare_query(bm_db_handle, query);
1940 bm_query_bind_text(hstmt, binding_count++, app_id);
1941 if (hstmt == NULL) {
1942 _ERR("bm_svc_query_prepare(%s) failed(%s).\n", query, bm_db_err_msg(bm_db_handle));
1943 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
1947 rc = bm_query_step(hstmt);
1948 if (rc != SQLITE_DONE) {
1949 _ERR("The record isn't found\n");
1950 error_code = BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND;
1954 rc = bm_query_finalize(hstmt);
1955 if (rc != BATTERY_MONITOR_ERROR_NONE) {
1956 _ERR("finalize error");
1962 _INFO("bm_delete_table end");
1969 static int bm_delete_table_by_app_id(sqlite3 *bm_db_handle, const char *AppId)
1973 int error_code = BATTERY_MONITOR_ERROR_NONE;
1974 bm_stmt hstmt = NULL;
1975 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
1978 int ret_transaction = 0;
1979 bool is_success = FALSE;
1982 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
1983 BM_RETURN_VAL((AppId != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The database isn't connected."));
1985 /* Check requested ID to delete */
1986 BM_SNPRINTF(query, sizeof(query), "SELECT COUNT(*) FROM %s WHERE AppName = '%s'", BATTERY_MONITOR_APP_ID_MAP_TABLE, AppId);
1988 count = bm_get_record_count(bm_db_handle, query);
1989 if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
1990 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
1991 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
1994 BM_SLOGE("App ID(%s) is not exist. count(%d)\n", AppId, count);
1995 return BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND;
1998 /* transaction control required */
1999 ret_transaction = bm_begin_transaction(bm_db_handle);
2000 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2001 _ERR("database busy(%s)", bm_db_err_msg(bm_db_handle));
2002 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2003 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2004 _ERR("bm_delete:bm_begin_transaction fail %d\n", ret_transaction);
2005 return ret_transaction;
2008 /*delete AppId Usage table*/
2009 error_code = bm_delete_table(bm_db_handle, &hstmt, num_AppId, AppId, BATTERY_MONITOR_APP_ID_USAGE_TABLE);
2010 if ((error_code == BATTERY_MONITOR_ERROR_DB_FAILED) || (error_code == BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND)) {
2011 _ERR("bm appid_usage deletion failed - db error[%d]", error_code);
2013 } else if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2014 _ERR("bm appid_usage deletion failed - error[%d]", error_code);
2018 /*delete AppId Map table*/
2019 error_code = bm_delete_table(bm_db_handle, &hstmt, num_AppId, AppId, BATTERY_MONITOR_APP_ID_MAP_TABLE);
2020 if ((error_code == BATTERY_MONITOR_ERROR_DB_FAILED) || (error_code == BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND)) {
2021 _ERR("bm appid_map deletion failed - db error[%d]", error_code);
2023 } else if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2024 _ERR("bm appid_map deletion failed - error[%d]", error_code);
2030 if (hstmt != NULL) {
2031 rc = bm_query_finalize(hstmt);
2032 BM_RETURN_VAL((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
2036 ret_transaction = bm_end_transaction(bm_db_handle, is_success);
2037 if (ret_transaction != BATTERY_MONITOR_ERROR_NONE)
2038 _ERR("bm_svc_delete:bm_svc_end_transaction fail %d, is_success=%d\n", ret_transaction, is_success);
2044 static int bm_delete_table_by_time_interval(sqlite3 *bm_db_handle, const char* table)
2048 _DBG("bm_delete_table start - table[%s]", table);
2049 int error_code = BATTERY_MONITOR_ERROR_NONE;
2051 char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
2052 long int duration = bm_get_time_bias(1);
2053 bm_stmt hstmt = NULL;
2055 BM_RETURN_VAL((bm_db_handle != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2056 BM_RETURN_VAL((table != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("table is null!"));
2058 if ((g_strcmp0(table, BATTERY_MONITOR_APP_ID_USAGE_TABLE) == 0 || g_strcmp0(table, BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE) == 0
2059 || g_strcmp0(table, BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE) == 0))
2060 BM_SNPRINTF(query, sizeof(query), "DELETE FROM %s WHERE log_time <= %ld", table, duration);
2062 BM_SNPRINTF(query, sizeof(query), "DELETE FROM %s WHERE time_s <= %ld", table, duration);
2064 hstmt = bm_prepare_query(bm_db_handle, query);
2065 if (bm_db_err_code(bm_db_handle) != SQLITE_OK || hstmt == NULL) {
2066 _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
2067 return BATTERY_MONITOR_ERROR_DB_FAILED;
2070 rc = bm_query_step(hstmt);
2071 if (rc != SQLITE_DONE) {
2072 _ERR("Query Failed");
2073 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
2076 rc = bm_query_finalize(hstmt);
2077 if (rc != BATTERY_MONITOR_ERROR_NONE) {
2078 _ERR("finalize error");
2079 error_code = BATTERY_MONITOR_ERROR_DB_FAILED;
2088 /* Manager Functions */
2089 int bm_server_appid_insert_to_db(const char* app_id)
2093 int error_code = BATTERY_MONITOR_ERROR_NONE;
2094 int ret_transaction = 0;
2095 int to_insert = true;
2097 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2098 BM_RETURN_VAL((app_id != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("Mandatory field app_id NULL"));
2100 /* Checking if already inserted */
2101 to_insert = app_name_check_duplicated(g_hBatteryMonitorDB, app_id, &error_code);
2102 if (to_insert && error_code == BATTERY_MONITOR_ERROR_NONE) {
2103 _DBG("AppID - [%s] already exists", app_id);
2104 return BATTERY_MONITOR_ERROR_NONE;
2105 } else if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2106 _ERR("Duplicate check failed");
2110 pthread_mutex_lock(&battery_monitor_mutex);
2112 /* Transaction Control Required */
2113 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2114 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2115 pthread_mutex_unlock(&battery_monitor_mutex);
2116 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2117 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2119 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2120 _ERR("AppId map table insert:bm_begin_transaction fail %d\n", ret_transaction);
2121 pthread_mutex_unlock(&battery_monitor_mutex);
2122 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2123 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2124 _ERR("AppId map table insert:bm_begin_transaction fail %d\n", ret_transaction);
2125 pthread_mutex_unlock(&battery_monitor_mutex);
2126 return ret_transaction;
2129 error_code = bm_appid_map_insert_to_db(g_hBatteryMonitorDB, app_id);
2130 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2131 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2132 _ERR("INSERT appid fail, rollback insert query(%d)!!!!\n", ret_transaction);
2133 pthread_mutex_unlock(&battery_monitor_mutex);
2137 pthread_mutex_unlock(&battery_monitor_mutex);
2138 bm_end_transaction(g_hBatteryMonitorDB, true);
2141 return BATTERY_MONITOR_ERROR_NONE;
2144 int bm_server_resource_usage_insert_to_db(resourceid_usage_s *bm_resource_type)
2148 int error_code = BATTERY_MONITOR_ERROR_NONE;
2149 int ret_transaction = 0;
2151 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2152 BM_RETURN_VAL((bm_resource_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The Battery Monitor Handle is NULL"));
2154 pthread_mutex_lock(&battery_monitor_mutex);
2156 /* Transaction Control Required */
2157 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2158 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2159 pthread_mutex_unlock(&battery_monitor_mutex);
2160 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2161 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2163 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2164 _ERR("Resource Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2165 pthread_mutex_unlock(&battery_monitor_mutex);
2166 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2167 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2168 _ERR("Resource Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2169 pthread_mutex_unlock(&battery_monitor_mutex);
2170 return ret_transaction;
2173 error_code = bm_resourceid_usage_insert_to_db(g_hBatteryMonitorDB, bm_resource_type);
2174 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2175 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2176 _ERR("INSERT resource usage fail, rollback insert query(%d)!!!!\n", ret_transaction);
2177 pthread_mutex_unlock(&battery_monitor_mutex);
2180 pthread_mutex_unlock(&battery_monitor_mutex);
2181 bm_end_transaction(g_hBatteryMonitorDB, true);
2184 return BATTERY_MONITOR_ERROR_NONE;
2187 int bm_server_resource_base_usage_insert_to_db(resourceid_usage_s *bm_resource_type)
2191 int error_code = BATTERY_MONITOR_ERROR_NONE;
2192 int ret_transaction = 0;
2194 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2195 BM_RETURN_VAL((bm_resource_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The Battery Monitor Handle is NULL"));
2197 pthread_mutex_lock(&battery_monitor_mutex);
2199 /* Transaction Control Required */
2200 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2201 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2202 pthread_mutex_unlock(&battery_monitor_mutex);
2203 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2204 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2206 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2207 _ERR("Resource Base Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2208 pthread_mutex_unlock(&battery_monitor_mutex);
2209 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2210 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2211 _ERR("Resource Base Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2212 pthread_mutex_unlock(&battery_monitor_mutex);
2213 return ret_transaction;
2216 error_code = bm_resourceid_base_usage_insert_to_db(g_hBatteryMonitorDB, bm_resource_type);
2217 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2218 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2219 _ERR("INSERT resource base usage fail, rollback insert query(%d)!!!!\n", ret_transaction);
2220 pthread_mutex_unlock(&battery_monitor_mutex);
2223 pthread_mutex_unlock(&battery_monitor_mutex);
2224 bm_end_transaction(g_hBatteryMonitorDB, true);
2227 return BATTERY_MONITOR_ERROR_NONE;
2230 int bm_server_app_usage_insert_to_db(appid_usage_s *bm_app_type)
2234 int error_code = BATTERY_MONITOR_ERROR_NONE;
2235 int ret_transaction = 0;
2237 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2238 BM_RETURN_VAL((bm_app_type != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The Battery Monitor Handle is NULL"));
2240 pthread_mutex_lock(&battery_monitor_mutex);
2242 /* Transaction Control Required */
2243 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2244 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2245 pthread_mutex_unlock(&battery_monitor_mutex);
2246 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2247 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2249 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2250 _ERR("App Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2251 pthread_mutex_unlock(&battery_monitor_mutex);
2252 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2253 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2254 _ERR("App Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2255 pthread_mutex_unlock(&battery_monitor_mutex);
2256 return ret_transaction;
2259 error_code = bm_appid_usage_insert_to_db(g_hBatteryMonitorDB, bm_app_type);
2260 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2261 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2262 _ERR("INSERT app usage fail, rollback insert query(%d)!!!!\n", ret_transaction);
2263 pthread_mutex_unlock(&battery_monitor_mutex);
2267 pthread_mutex_unlock(&battery_monitor_mutex);
2268 bm_end_transaction(g_hBatteryMonitorDB, true);
2271 return BATTERY_MONITOR_ERROR_NONE;
2274 /* For App usage related queries */
2275 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)
2279 appid_usage_s *bm_app_type = NULL;
2280 *error_code = BATTERY_MONITOR_ERROR_NONE;
2282 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2283 BM_RETURN_VAL((app_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL"));
2285 bm_app_type = bm_query_usage_by_appid_ci(g_hBatteryMonitorDB, app_id, s_time, e_time, error_code);
2291 /* For Resource usage related queries */
2292 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)
2294 resourceid_usage_s *bm_resource_type = NULL;
2295 *error_code = BATTERY_MONITOR_ERROR_NONE;
2297 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2298 BM_RETURN_VAL((resource_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL"));
2300 bm_resource_type = bm_query_usage_by_resourceid_ci(g_hBatteryMonitorDB, resource_id, s_time, e_time, error_code);
2303 return bm_resource_type;
2306 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)
2308 resourceid_usage_s *bm_resource_type = NULL;
2309 *error_code = BATTERY_MONITOR_ERROR_NONE;
2311 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2312 BM_RETURN_VAL((resource_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL"));
2314 bm_resource_type = bm_query_base_usage_by_resourceid_ci(g_hBatteryMonitorDB, resource_id, s_time, e_time, error_code);
2317 return bm_resource_type;
2320 resourceid_usage_s *bm_server_query_battery_last_charge(const char *resource_id, int *error_code)
2322 resourceid_usage_s *bm_resource_type = NULL;
2323 *error_code = BATTERY_MONITOR_ERROR_NONE;
2325 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2326 BM_RETURN_VAL((resource_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, NULL, ("The Battery Monitor Handle is NULL"));
2328 bm_resource_type = bm_query_battery_last_charge(g_hBatteryMonitorDB, resource_id, error_code);
2331 return bm_resource_type;
2334 GSList* bm_server_query_appid_map(int *error_code)
2338 GSList *list = NULL;
2339 *error_code = BATTERY_MONITOR_ERROR_NONE;
2341 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
2342 list = bm_query_appid_map(g_hBatteryMonitorDB, error_code);
2348 int bm_server_delete_table_by_appid(const char* app_id)
2352 int error_code = BATTERY_MONITOR_ERROR_NONE;
2354 BM_RETURN_VAL((app_id != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("Application Id is NULL"));
2355 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2356 pthread_mutex_lock(&battery_monitor_mutex);
2358 error_code = bm_delete_table_by_app_id(g_hBatteryMonitorDB, app_id);
2359 if (error_code != BATTERY_MONITOR_ERROR_NONE)
2360 _ERR("Delete of table by app_id failed");
2362 pthread_mutex_unlock(&battery_monitor_mutex);
2368 int bm_server_delete_table_by_time_interval(void)
2372 int error_code = BATTERY_MONITOR_ERROR_NONE;
2373 int ret_transaction = 0;
2375 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2376 pthread_mutex_lock(&battery_monitor_mutex);
2378 /* Transaction Control Required */
2379 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2380 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2381 pthread_mutex_unlock(&battery_monitor_mutex);
2382 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2383 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2385 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2386 _ERR("Usage Delete:bm_begin_transaction fail %d\n", ret_transaction);
2387 pthread_mutex_unlock(&battery_monitor_mutex);
2388 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2389 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2390 _ERR("Usage Delete:bm_begin_transaction fail %d\n", ret_transaction);
2391 pthread_mutex_unlock(&battery_monitor_mutex);
2392 return ret_transaction;
2394 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE);
2395 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2396 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2397 _ERR("Delete old resource usage fail, rollback delete query(%d)!!!!\n", ret_transaction);
2398 pthread_mutex_unlock(&battery_monitor_mutex);
2401 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_APP_ID_USAGE_TABLE);
2402 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2403 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2404 _ERR("Delete old app usage fail, rollback delete query(%d)!!!!\n", ret_transaction);
2405 pthread_mutex_unlock(&battery_monitor_mutex);
2408 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_RES_ID_BASE_USAGE_TABLE);
2409 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2410 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2411 _ERR("Delete old resource base usage fail, rollback delete query(%d)!!!!\n", ret_transaction);
2412 pthread_mutex_unlock(&battery_monitor_mutex);
2415 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_BLE_STAT_TABLE);
2416 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2417 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2418 _ERR("Delete ble_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2419 pthread_mutex_unlock(&battery_monitor_mutex);
2422 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_WFL_STAT_TABLE);
2423 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2424 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2425 _ERR("Delete wifi_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2426 pthread_mutex_unlock(&battery_monitor_mutex);
2429 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_CPU_STAT_TABLE);
2430 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2431 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2432 _ERR("Delete gcpu_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2433 pthread_mutex_unlock(&battery_monitor_mutex);
2436 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_BR_STAT_TABLE);
2437 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2438 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2439 _ERR("Delete sbr_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2440 pthread_mutex_unlock(&battery_monitor_mutex);
2443 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_SGT_STAT_TABLE);
2444 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2445 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2446 _ERR("Delete sgt_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2447 pthread_mutex_unlock(&battery_monitor_mutex);
2450 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_WST_STAT_TABLE);
2451 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2452 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2453 _ERR("Delete wst_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2454 pthread_mutex_unlock(&battery_monitor_mutex);
2457 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_BST_STAT_TABLE);
2458 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2459 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2460 _ERR("Delete bst_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2461 pthread_mutex_unlock(&battery_monitor_mutex);
2464 error_code = bm_delete_table_by_time_interval(g_hBatteryMonitorDB, BATTERY_MONITOR_GBL_NT_STAT_TABLE);
2465 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2466 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2467 _ERR("Delete nt_stat fail, rollback delete query(%d)!!!!\n", ret_transaction);
2468 pthread_mutex_unlock(&battery_monitor_mutex);
2472 pthread_mutex_unlock(&battery_monitor_mutex);
2473 bm_end_transaction(g_hBatteryMonitorDB, true);
2476 return BATTERY_MONITOR_ERROR_NONE;
2479 /* Battery Dump DB Operations */
2480 int bm_server_battery_dump_insert_to_db(void *str_data, int type)
2484 int error_code = BATTERY_MONITOR_ERROR_NONE;
2485 int ret_transaction = 0;
2487 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), {}, BATTERY_MONITOR_ERROR_DB_NOT_OPENED, ("The database isn't connected."));
2488 BM_RETURN_VAL((str_data != NULL), {}, BATTERY_MONITOR_ERROR_INVALID_PARAMETER, ("The Battery Dump Data is NULL"));
2490 pthread_mutex_lock(&battery_monitor_mutex);
2492 /* Transaction Control Required */
2493 ret_transaction = bm_begin_transaction(g_hBatteryMonitorDB);
2494 if (bm_db_err_code(g_hBatteryMonitorDB) == SQLITE_PERM) {
2495 pthread_mutex_unlock(&battery_monitor_mutex);
2496 _ERR("Access failed(%s)", bm_db_err_msg(g_hBatteryMonitorDB));
2497 return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
2499 if (ret_transaction == BATTERY_MONITOR_ERROR_DATABASE_BUSY) {
2500 _ERR("Resource Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2501 pthread_mutex_unlock(&battery_monitor_mutex);
2502 return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
2503 } else if (ret_transaction != BATTERY_MONITOR_ERROR_NONE) {
2504 _ERR("Resource Usage insert:bm_begin_transaction fail %d\n", ret_transaction);
2505 pthread_mutex_unlock(&battery_monitor_mutex);
2506 return ret_transaction;
2508 error_code = bm_battery_stat_insert_to_db(g_hBatteryMonitorDB, str_data, type);
2509 if (error_code != BATTERY_MONITOR_ERROR_NONE) {
2510 ret_transaction = bm_end_transaction(g_hBatteryMonitorDB, false);
2511 _ERR("INSERT resource usage fail, rollback insert query(%d)!!!!\n", ret_transaction);
2512 pthread_mutex_unlock(&battery_monitor_mutex);
2516 pthread_mutex_unlock(&battery_monitor_mutex);
2517 bm_end_transaction(g_hBatteryMonitorDB, true);
2520 return BATTERY_MONITOR_ERROR_NONE;
2523 int bm_server_battery_dump_query_from_db(void *str_data, int type, long int duration)
2526 int ret = BATTERY_MONITOR_ERROR_NONE;
2528 BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), \
2529 { ret = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, ret, ("The database isn't connected."));
2531 BM_RETURN_VAL((str_data != NULL), \
2532 { ret = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, ret, ("The Battery Dump Handle is NULL"));
2534 ret = bm_battery_stat_query_from_db(g_hBatteryMonitorDB, str_data, type, duration);
2540 int initialize_database(void)
2544 int return_code = BATTERY_MONITOR_ERROR_NONE;
2546 return_code = bm_db_open();
2547 if (return_code != BATTERY_MONITOR_ERROR_NONE) {
2548 _ERR("Battery Monitor DB Open Error");
2553 return BATTERY_MONITOR_ERROR_NONE;
2556 int deinitialize_database(void)
2560 int return_code = BATTERY_MONITOR_ERROR_NONE;
2562 return_code = bm_db_close();
2563 if (return_code != BATTERY_MONITOR_ERROR_NONE) {
2564 _ERR("Battery Monitor DB Open Error");
2569 return BATTERY_MONITOR_ERROR_NONE;