Add permanent log 19/221219/1
authorDeokhyun Kim <dukan.kim@samsung.com>
Mon, 30 Dec 2019 07:10:36 +0000 (16:10 +0900)
committerDeokhyun Kim <dukan.kim@samsung.com>
Mon, 30 Dec 2019 07:10:36 +0000 (16:10 +0900)
Change-Id: I7501ccf20e7446a5932d4598f25eb11cc62b58b5
Signed-off-by: Deokhyun Kim <dukan.kim@samsung.com>
19 files changed:
bt-oal/hardware/bluetooth.h
bt-oal/include/oal-event.h
bt-oal/oal-device-mgr.c
bt-service-adaptation/services/adapter/bt-service-core-adapter-le.c
bt-service-adaptation/services/adapter/bt-service-core-adapter.c
bt-service-adaptation/services/audio/a2dp_sink/bt-service-a2dp-sink.c
bt-service-adaptation/services/audio/a2dp_src/bt-service-a2dp-src.c
bt-service-adaptation/services/audio/avrcp/bt-service-avrcp-ctrl.c
bt-service-adaptation/services/audio/avrcp/bt-service-avrcp-tg.c
bt-service-adaptation/services/audio/bt-service-audio.c
bt-service-adaptation/services/audio/hf/bt-service-hf-client.c
bt-service-adaptation/services/audio/hf/bt-service-hf.c
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/bt-service-common.c
bt-service-adaptation/services/bt-service-event-receiver.c
bt-service-adaptation/services/device/bt-service-core-device.c
bt-service-adaptation/services/hid/bt-service-hiddevice.c
bt-service-adaptation/services/hid/bt-service-hidhost.c
bt-service-adaptation/services/include/bt-service-common.h

index e4c3fa1..b365a20 100644 (file)
@@ -501,16 +501,6 @@ typedef enum {
        BT_PINCODE_ENTRY,
 } bt_gap_auth_variant_t;
 
-/** DBFW+ Event Code */
-typedef enum {
-       BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_INFO = 0x10,
-       BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_CLOCK_INFO = 0x11,
-       BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_PAGE_SLOTS = 0x12,
-       BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_LMP_TRACE = 0x13,
-       BT_DBFW_PLUS_EVENT_CODE_A2DP_INFO = 0x20,
-       BT_DBFW_PLUS_EVENT_CODE_HFP_INFO = 0x31,
-       BT_DBFW_PLUS_EVENT_CODE_HFP_SCO_PACKET_TYPE_INFO = 0x32,
-} bt_dbfw_plus_event_code_t;
 #endif
 
 /** Bluetooth Interface callbacks */
index 798663a..3c224ef 100644 (file)
@@ -75,6 +75,7 @@ extern "C" {
        EVENT(OAL_EVENT_RSSI_MONITORING_DISABLED)       /* event_dev_rssi_info_t */\
        EVENT(OAL_EVENT_RSSI_ALERT_RECEIVED)            /* event_dev_rssi_info_t */\
        EVENT(OAL_EVENT_RAW_RSSI_RECEIVED)              /* */\
+       EVENT(OAL_EVENT_DEVICE_DBFW_PLUS_INFO)          /* event_dev_dbfw_plus_info_t */\
        EVENT(OAL_EVENT_OAL_INITIALISED_SUCCESS)                /* OAL Initialisation event */  \
        EVENT(OAL_EVENT_OAL_INITIALISED_FAILED)                 /* OAL Initialisation event */  \
        EVENT(OAL_EVENT_HID_CONNECTED)                                          /* event_hid_conn_t */\
@@ -270,7 +271,6 @@ typedef struct {
 typedef struct {
        bt_address_t address;
        oal_status_t status;
-       int rssi;
 } event_dev_conn_status_t;
 
 typedef event_dev_conn_status_t event_dev_bond_failed_t;
@@ -287,6 +287,12 @@ typedef struct {
        int rssi;
 } event_dev_rssi_info_t;
 
+typedef struct {
+       uint8_t event_code;
+       uint8_t data[512];
+       int length;
+} event_dev_dbfw_plus_info_t;
+
 /*********Datastructures for HID callback******************/
 /* HID :: connection state callback response data */
 typedef struct {
index f95c325..aedbd1a 100755 (executable)
@@ -31,9 +31,6 @@
 #include "oal-device-mgr.h"
 
 static const bt_interface_t * blued_api;
-#ifdef TIZEN_BT_HAL
-static int dbfw_rssi;
-#endif
 
 void device_mgr_init(const bt_interface_t * stack_if)
 {
@@ -756,7 +753,6 @@ void cb_device_acl_state_changed(bt_status_t status, bt_bdaddr_t *bd_addr,
 
 #ifdef TIZEN_BT_HAL
        conn_status->status = convert_to_oal_status(status);
-       conn_status->rssi = dbfw_rssi;
 #else
        if (BT_STATUS_SUCCESS != status) {
                /* At present only timeout will cause non-success status, later we can add more */
@@ -800,7 +796,6 @@ void cb_device_le_conn_state_changed(bt_status_t status, bt_bdaddr_t *bd_addr,
        BT_DBG("LE conn status:%d, state: %d", status, state);
        memcpy(conn_status->address.addr, bd_addr->address, 6);
        conn_status->status = convert_to_oal_status(status);
-       conn_status->rssi = dbfw_rssi;
 
        switch (state) {
        case BT_LE_CONN_STATE_CONNECTED:
@@ -1004,70 +999,20 @@ void cb_raw_rssi_received(bt_bdaddr_t *bd_addr, int32_t link_type, int32_t rssi)
        BT_DBG("-");
 }
 
-static gboolean __device_init_dbfw_rssi_cb(gpointer user_data)
+void cb_dbfw_plus_info_received(unsigned char *data, uint32_t length, uint8_t event_code)
 {
-       dbfw_rssi = 0;
-       return FALSE;
-}
+       event_dev_dbfw_plus_info_t *dbfw_info;
+       int len = (length > 512)?512:length;
 
-static void __device_parse_dbfw_set_rssi(unsigned char *data, uint32_t length)
-{
-       ret_if(length < 5);
-       dbfw_rssi = 0xFFFFFF00 | data[4];
-       BT_INFO("dbfw_rssi = %d", dbfw_rssi);
-       g_timeout_add(1000, __device_init_dbfw_rssi_cb, NULL);
-}
+       ret_if(data == NULL || length == 0);
 
-void cb_dbfw_plus_info_received(unsigned char *data, uint32_t length, uint8_t event_code)
-{
-       char evt_str[18];
-       char *data_str = NULL;
-       int i;
-
-       ret_if(data == NULL);
-
-       data_str = g_malloc0(length * 2 + 1);
-       for (i = 0; i < length; i++)
-               snprintf(&data_str[i * 2], 3, "%02X", data[i]);
-       data_str[i * 2] = '\0';
-
-       switch(event_code) {
-               case BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_INFO:
-                       BT_DBG("## Event Code: Linkloss Debug Info");
-                       snprintf(evt_str, 18, "[DBFW]Linkloss(D)");
-                       __device_parse_dbfw_set_rssi(data, length);
-                       break;
-               case BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_CLOCK_INFO:
-                       BT_DBG("## Event Code: Linkloss Clock Info");
-                       snprintf(evt_str, 18, "[DBFW]Linkloss(C)");
-                       break;
-               case BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_PAGE_SLOTS:
-                       BT_DBG("## Event Code: Linkloss Page slots");
-                       snprintf(evt_str, 18, "[DBFW]Linkloss(P)");
-                       break;
-               case BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_LMP_TRACE:
-                       BT_DBG("## Event Code: Linkloss LMP trace");
-                       snprintf(evt_str, 18, "[DBFW]Linkloss(L)");
-                       break;
-               case BT_DBFW_PLUS_EVENT_CODE_A2DP_INFO:
-                       BT_DBG("## Event Code: A2DP Info");
-                       snprintf(evt_str, 18, "[DBFW]A2DP");
-                       break;
-               case BT_DBFW_PLUS_EVENT_CODE_HFP_INFO:
-                       BT_DBG("## Event Code: HFP Info");
-                       snprintf(evt_str, 18, "[DBFW]HFP");
-                       break;
-               case BT_DBFW_PLUS_EVENT_CODE_HFP_SCO_PACKET_TYPE_INFO:
-                       BT_DBG("## Event Code: HFP SCO Packet Type");
-                       snprintf(evt_str, 18, "[DBFW]SCO");
-                       break;
-               default:
-                       BT_DBG("## Unknown event code (0x%02x)", event_code);
-                       snprintf(evt_str, 18, "[DBFW]0x%02X", event_code);
-                       break;
-       }
+       dbfw_info = g_new0(event_dev_dbfw_plus_info_t, 1);
+       dbfw_info->event_code = event_code;
+       memcpy(dbfw_info->data, data, len);
+       dbfw_info->length = len;
 
-       g_free(data_str);
+       send_event(OAL_EVENT_DEVICE_DBFW_PLUS_INFO,
+               dbfw_info, sizeof(event_dev_dbfw_plus_info_t));
 }
 
 #endif
index 203834d..f2d22f3 100644 (file)
@@ -449,6 +449,8 @@ static void __bt_le_multi_advertising_enabled(event_ble_multiadv_status *event)
                /* Free data */
                g_free(info->sender);
                g_free(info);
+
+               BT_PERMANENT_LOG("Adv started %d", event->server_inst);
        }
 }
 
@@ -485,6 +487,8 @@ static void __bt_le_multi_advertising_disabled(event_ble_multiadv_status *event)
                /* Free data */
                g_free(info->sender);
                g_free(info);
+
+               BT_PERMANENT_LOG("Adv stopped %d", event->server_inst);
        }
 }
 
index b0e4ffa..ad35c0f 100644 (file)
@@ -1029,6 +1029,24 @@ static void __bt_adapter_event_handler(int event_type, gpointer event_data)
                count = list->num;
                service_list = list->service_list;
                __bt_adapter_handle_pending_requests(BT_IS_SERVICE_USED, service_list, count);
+
+               char uuids[512] = {0,};
+               char standard_prefix[2] = {0,};
+               int index = 0;
+               for (int i = 0; i < count; i++) {
+                       if (i > 0)
+                               g_snprintf(uuids + (index++), 2, ",");
+                       if (memcmp(service_list[i].uuid, standard_prefix, 2) == 0) {
+                               g_snprintf(uuids + index, 5, "%.2x%.2x",
+                                       service_list[i].uuid[2], service_list[i].uuid[3]);
+                               index += 4;
+                       } else {
+                               g_snprintf(uuids + index, 9, "%.2x%.2x..%.2x,",
+                                       service_list[i].uuid[0], service_list[i].uuid[1], service_list[i].uuid[15]);
+                               index += 8;
+                       }
+               }
+               BT_PERMANENT_LOG("UUIDs %s", uuids);
                break;
        }
        case OAL_EVENT_ADAPTER_BONDED_DEVICE_LIST: {
@@ -1311,6 +1329,8 @@ static gboolean __bt_adapter_post_set_enabled(gpointer user_data)
        _bt_send_event(BT_ADAPTER_EVENT, BLUETOOTH_EVENT_ENABLED,
                        g_variant_new("(i)", result));
 
+       BT_PERMANENT_LOG("BT Enabled");
+
        return FALSE;
 }
 
@@ -1725,5 +1745,6 @@ void _bt_set_disabled(int result)
                        g_variant_new("(i)", result));
 
        BT_INFO("Adapter disabled");
+       BT_PERMANENT_LOG("BT Disabled");
 }
 
index 6a8370b..0f6962f 100644 (file)
@@ -358,10 +358,12 @@ void _bt_a2dp_sink_event_handler(int oal_event, gpointer event_data)
        case OAL_EVENT_A2DP_SINK_CONNECTED:
                BT_INFO("A2DP Sink Profile connected..");
                __bt_handle_av_source_connected_state(bd_addr);
+               BT_PERMANENT_LOG("Connected A2DP sink");
                break;
        case OAL_EVENT_A2DP_SINK_DISCONNECTED:
                BT_INFO("A2DP Sink Profile dissconnected..");
                __bt_handle_av_source_disconnected_state(bd_addr);
+               BT_PERMANENT_LOG("Disconnected A2DP sink");
                break;
        default:
                BT_INFO("Invalid Event = %d", oal_event);
index eb8510e..8ca051d 100644 (file)
@@ -300,10 +300,12 @@ void _bt_a2dp_source_event_handler(int oal_event, gpointer event_data)
        case OAL_EVENT_AUDIO_CONNECTED:
                BT_INFO("A2DP Audio Profile connected..");
                __bt_handle_av_connected_state(bd_addr);
+               BT_PERMANENT_LOG("Connected A2DP src");
                break;
        case OAL_EVENT_AUDIO_DISCONNECTED:
                BT_INFO("A2DP Audio Profile dissconnected..");
                __bt_handle_av_disconnected_state(bd_addr);
+               BT_PERMANENT_LOG("Disconnected A2DP src");
                break;
        case OAL_EVENT_AUDIO_STOPPED:
                BT_INFO("A2DP Audio Stream stopped..");
index 7a43fad..ebfc5cb 100644 (file)
@@ -711,12 +711,14 @@ void _bt_avrcp_ctrl_event_handler(int oal_event, gpointer event_data)
                BT_INFO("AVRCP Controller Profile connected..");
                bd_addr = (bluetooth_device_address_t*)event_data;
                __bt_handle_avrcp_target_connected_state(bd_addr);
+               BT_PERMANENT_LOG("Connected AVRCP ct");
                break;
        }
        case OAL_EVENT_AVRCP_CT_DISCONNECTED: {
                BT_INFO("AVRCP Controller Profile dissconnected..");
                bd_addr = (bluetooth_device_address_t*)event_data;
                __bt_handle_avrcp_target_disconnected_state(bd_addr);
+               BT_PERMANENT_LOG("Disconnected AVRCP ct");
                break;
        }
        case OAL_EVENT_AVRCP_CT_EQUALIZER_STATUS:
index 76ce276..5023648 100644 (file)
@@ -560,11 +560,13 @@ static void __handle_avrcp_target_events(int event_type, gpointer event_data)
                __handle_avrcp_connection_event(
                                BLUETOOTH_EVENT_AVRCP_CONNECTED,
                                (bt_address_t *)event_data);
+               BT_PERMANENT_LOG("Connected AVRCP tg");
                break;
        case OAL_EVENT_AVRCP_DISCONNECTED:
                __handle_avrcp_connection_event(
                                BLUETOOTH_EVENT_AVRCP_DISCONNECTED,
                                (bt_address_t *)event_data);
+               BT_PERMANENT_LOG("Disconnected AVRCP tg");
                break;
        case OAL_EVENT_AVRCP_SETTING_EQUALIZER_STATUS:
                __handle_player_property_equalizer((unsigned char *)event_data);
index ef7aac7..8662999 100644 (file)
@@ -429,6 +429,7 @@ static int __bt_process_audio_profile_connect(bt_audio_type_t type, bluetooth_de
                //_bt_headset_set_local_connection(TRUE);
                /* Add data to the connected list */
                _bt_add_headset_to_list(type, BT_STATE_CONNECTING, addr);
+               BT_PERMANENT_LOG("Connect %d", type);
        } else {
                BT_ERR("Profile [%d] connect failed!!", type);
        }
@@ -485,6 +486,7 @@ static int __bt_process_audio_profile_disconnect(bt_audio_type_t type, bluetooth
 
                /* Update device status in connected list */
                _bt_add_headset_to_list(type, BT_STATE_DISCONNECTING, addr);
+               BT_PERMANENT_LOG("Disconnect %d", type);
        } else {
                BT_ERR("Profile [%d] connect failed!!", type);
        }
@@ -846,6 +848,7 @@ int __bt_handle_audio_all_connect(bt_pending_audio_conn_t *info)
                        goto fail;
                }
 
+               BT_PERMANENT_LOG("Connect %d", info->type);
                /* If multiple profiles are supported, queue pending connection info */
                if ((info->is_hfp_supported && info->is_a2dp_sink_supported) ||
                                (info->is_hfp_supported && info->is_a2dp_src_supported)) {
@@ -1283,6 +1286,8 @@ int _bt_hf_connect(bluetooth_device_address_t *device_address)
        result = _bt_connect_remote_ag(device_address);
        if (result != BLUETOOTH_ERROR_NONE)
                BT_ERR("HF Client connect to remote AG failed");
+       else
+               BT_PERMANENT_LOG("Connect AG");
 
        return result;
 }
@@ -1295,6 +1300,8 @@ int _bt_hf_disconnect(bluetooth_device_address_t *device_address)
        result = _bt_disconnect_remote_ag(device_address);
        if (result != BLUETOOTH_ERROR_NONE)
                BT_ERR("HF Client disconnect to remote AG failed");
+       else
+               BT_PERMANENT_LOG("Disconnect AG");
 
        return result;
 }
index 6830b0d..9d4f054 100644 (file)
@@ -129,10 +129,12 @@ void _bt_hf_client_event_handler(int oal_event, gpointer event_data)
                /* Reply to async request for HF Client connect or disconnect request, if any */
                BT_INFO("HF client Profile disconnected, reply pending DBUS request and check waiting device");
                __bt_reply_hf_client_disconnection_pending_request(bt_addr);
+               BT_PERMANENT_LOG("Disconnected HF");
                break;
        case OAL_EVENT_HF_CLIENT_CONNECTED:
                BT_INFO("HF Client Profile connected, Event & DBUS context will be handled at finalizing SCO connect..");
                __bt_reply_hf_client_connection_pending_request(bt_addr);
+               BT_PERMANENT_LOG("Connected HF");
                break;
        case OAL_EVENT_HF_CLIENT_CONNECTING:
                BT_INFO("HF Client Profile connection successful, wait for Audio connect..");
index 4e074b0..edfa888 100755 (executable)
@@ -241,19 +241,23 @@ void _bt_hf_event_handler(int oal_event, gpointer event_data)
                /* Reply to async request for HF connect or disconnect request, if any */
                BT_INFO("HF Profile disconnected, reply pending DBUS request and check waiting device");
                __bt_reply_hf_disconnection_pending_request(bt_addr);
+               BT_PERMANENT_LOG("Disconnected AG");
                break;
        case OAL_EVENT_HFP_AUDIO_DISCONNECTED:
                /* Reply to async request for HF connect or disconnect request, if any */
                BT_INFO("HF SCO disconnected, reply pending request if any and send event");
                __bt_hf_handle_audio_disconnection_state(bt_addr);
+               BT_PERMANENT_LOG("Disconnected SCO");
                break;
        case OAL_EVENT_HFP_CONNECTED:
                BT_INFO("HFP Profile connected, Event & DBUS context will be handled at finalizing SCO connect..");
                __bt_reply_hf_connection_pending_request(bt_addr);
+               BT_PERMANENT_LOG("Connected AG");
                break;
        case OAL_EVENT_HFP_AUDIO_CONNECTED:
                BT_INFO("HFP SCO conencted, handle the event..");
                __bt_hf_handle_audio_connection_state(bt_addr);
+               BT_PERMANENT_LOG("Connected SCO");
                break;
        case OAL_EVENT_HFP_CONNECTING:
                BT_INFO("HFP Profile connection successful, wait for Audio connect..");
index 752f5de..54285f0 100644 (file)
@@ -3828,8 +3828,12 @@ gboolean __bt_service_check_privilege(int function_name,
        case BT_SEARCH_SERVICE:
 
        case BT_RFCOMM_CLIENT_CONNECT:
+               if (function_name == BT_RFCOMM_CLIENT_CONNECT)
+                       BT_PERMANENT_LOG("Connect socket");
        case BT_RFCOMM_CLIENT_CANCEL_CONNECT:
        case BT_RFCOMM_SOCKET_DISCONNECT:
+               if (function_name == BT_RFCOMM_SOCKET_DISCONNECT)
+                       BT_PERMANENT_LOG("Disconnect socket");
        case BT_RFCOMM_SOCKET_WRITE:
        case BT_RFCOMM_CREATE_SOCKET:
        case BT_RFCOMM_REMOVE_SOCKET:
index 573d842..6baf5fa 100644 (file)
@@ -1296,3 +1296,59 @@ void _bt_copy_remote_dev_info(bt_remote_dev_info_t *dest, bt_remote_dev_info_t *
 
        BT_DBG("-");
 }
+
+#define BT_PERMANENT_LOG_FILE_PATH "/opt/usr/home/owner/media/Downloads/.bt_dump/permanent_log.txt"
+#define BT_PERMANENT_LOG_OLD_FILE_PATH "/opt/usr/home/owner/media/Downloads/.bt_dump/permanent_log_old.txt"
+#define PERMANENT_LOG_MAX (128 * 1024)
+void _bt_permanent_log(const char *fmt, ...)
+{
+       FILE *fp;
+       time_t t;
+       struct tm *lt;
+       char time_buf[32];
+       long lsize = 0;
+       va_list ap;
+
+       t = time(&t);
+       lt = localtime(&t);
+       strftime(time_buf, sizeof(time_buf), "%m-%d %H:%M:%S", lt);
+
+       fp = fopen(BT_PERMANENT_LOG_FILE_PATH, "r");
+       if (fp != NULL) {
+               fseek(fp, 0, SEEK_END);
+               lsize = ftell(fp);
+       }
+
+       if (lsize > PERMANENT_LOG_MAX) {
+               FILE *fp2;
+               int character;
+               fp2 = fopen(BT_PERMANENT_LOG_OLD_FILE_PATH, "w");
+               if (fp2 == NULL)
+                       goto DONE;
+               fseek(fp, 0, SEEK_SET);
+               while (!feof(fp)) {
+                       character = fgetc(fp);
+                       fputc(character, fp2);
+               }
+               fclose(fp);
+               fclose(fp2);
+               fp = fopen(BT_PERMANENT_LOG_FILE_PATH, "w");
+       } else {
+               if (fp != NULL)
+                       fclose(fp);
+               fp = fopen(BT_PERMANENT_LOG_FILE_PATH, "a");
+       }
+
+       if (fp != NULL) {
+               char buf[100];
+               va_start(ap, fmt);
+               vsnprintf(buf, 100, fmt, ap);
+               va_end(ap);
+               fprintf(fp, "%s %s\n", time_buf, buf);
+       }
+
+DONE:
+       if (fp != NULL)
+               fclose(fp);
+}
+
index e8d572e..9c4e3d7 100644 (file)
@@ -229,6 +229,7 @@ static gboolean __bt_handle_oal_events(gpointer data)
        case OAL_EVENT_RSSI_MONITORING_DISABLED:
        case OAL_EVENT_RAW_RSSI_RECEIVED:
        case OAL_EVENT_RSSI_ALERT_RECEIVED:
+       case OAL_EVENT_DEVICE_DBFW_PLUS_INFO:
                if (device_cb)
                        device_cb(event_type, event_data);
                if (adapter_gatt_cb)
index 20d848e..9a1472a 100644 (file)
@@ -138,6 +138,19 @@ static int bond_retry_count;
 static char *passkey_watcher;
 static GSList *pin_info_list = NULL;
 
+/** DBFW+ Event Code */
+typedef enum {
+       BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_INFO = 0x10,
+       BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_CLOCK_INFO = 0x11,
+       BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_PAGE_SLOTS = 0x12,
+       BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_LMP_TRACE = 0x13,
+       BT_DBFW_PLUS_EVENT_CODE_A2DP_INFO = 0x20,
+       BT_DBFW_PLUS_EVENT_CODE_HFP_INFO = 0x31,
+       BT_DBFW_PLUS_EVENT_CODE_HFP_SCO_PACKET_TYPE_INFO = 0x32,
+} bt_dbfw_plus_event_code_t;
+
+static int dbfw_rssi;
+
 #ifdef TIZEN_GATT_CLIENT
 typedef struct {
        char *address;
@@ -716,6 +729,7 @@ static void __bt_handle_ongoing_bond(bt_remote_dev_info_t *remote_dev_info, gboo
                _bt_send_event(BT_ADAPTER_EVENT,
                                BLUETOOTH_EVENT_BONDING_FINISHED,
                                param);
+               BT_PERMANENT_LOG("Paired %s", remote_dev_info->address + 12);
                if (incoming_bond) {
                        __bt_free_bond_info(BT_DEVICE_INCOMING_BOND_INFO);
                } else {
@@ -847,6 +861,7 @@ static void __bt_device_handle_bond_removal_event(bt_address_t *bd_addr)
                _bt_send_event(BT_ADAPTER_EVENT,
                                BLUETOOTH_EVENT_BONDED_DEVICE_REMOVED,
                                param);
+               BT_PERMANENT_LOG("Unpaired %s", trigger_unbond_info->addr + 12);
                __bt_free_bond_info(BT_DEVICE_UNBOND_INFO);
                __bt_free_pairing_info(&trigger_pairing_info);
        } else if (trigger_bond_info) {
@@ -947,6 +962,71 @@ static void __bt_device_handle_bond_failed_event(event_dev_bond_failed_t* bond_f
        BT_INFO("-");
 }
 
+static gboolean __bt_device_init_dbfw_rssi_cb(gpointer user_data)
+{
+       dbfw_rssi = 0;
+       return FALSE;
+}
+
+static void __bt_device_parse_dbfw_set_rssi(unsigned char *data, uint32_t length)
+{
+       ret_if(length < 5);
+       dbfw_rssi = 0xFFFFFF00 | data[4];
+       BT_INFO("dbfw_rssi = %d", dbfw_rssi);
+       g_timeout_add(1000, __bt_device_init_dbfw_rssi_cb, NULL);
+}
+
+static void __bt_device_dbfw_plus_info_callback(event_dev_dbfw_plus_info_t *dbfw_info)
+{
+       char evt_str[18];
+       char *data_str = NULL;
+       int i;
+
+       data_str = g_malloc0(dbfw_info->length * 2 + 1);
+       for (i = 0; i < dbfw_info->length; i++)
+               snprintf(&data_str[i * 2], 3, "%02X", dbfw_info->data[i]);
+       data_str[i * 2] = '\0';
+
+       switch(dbfw_info->event_code) {
+               case BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_INFO:
+                       BT_DBG("## Event Code: Linkloss Debug Info");
+                       snprintf(evt_str, 18, "[DBFW]Linkloss(D)");
+                       __bt_device_parse_dbfw_set_rssi(dbfw_info->data, dbfw_info->length);
+                       break;
+               case BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_CLOCK_INFO:
+                       BT_DBG("## Event Code: Linkloss Clock Info");
+                       snprintf(evt_str, 18, "[DBFW]Linkloss(C)");
+                       break;
+               case BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_PAGE_SLOTS:
+                       BT_DBG("## Event Code: Linkloss Page slots");
+                       snprintf(evt_str, 18, "[DBFW]Linkloss(P)");
+                       break;
+               case BT_DBFW_PLUS_EVENT_CODE_LINK_LOSS_LMP_TRACE:
+                       BT_DBG("## Event Code: Linkloss LMP trace");
+                       snprintf(evt_str, 18, "[DBFW]Linkloss(L)");
+                       break;
+               case BT_DBFW_PLUS_EVENT_CODE_A2DP_INFO:
+                       BT_DBG("## Event Code: A2DP Info");
+                       snprintf(evt_str, 18, "[DBFW]A2DP");
+                       break;
+               case BT_DBFW_PLUS_EVENT_CODE_HFP_INFO:
+                       BT_DBG("## Event Code: HFP Info");
+                       snprintf(evt_str, 18, "[DBFW]HFP");
+                       break;
+               case BT_DBFW_PLUS_EVENT_CODE_HFP_SCO_PACKET_TYPE_INFO:
+                       BT_DBG("## Event Code: HFP SCO Packet Type");
+                       snprintf(evt_str, 18, "[DBFW]SCO");
+                       break;
+               default:
+                       BT_DBG("## Unknown event code (0x%02x)", dbfw_info->event_code);
+                       snprintf(evt_str, 18, "[DBFW]0x%02X", dbfw_info->event_code);
+                       break;
+       }
+
+       BT_PERMANENT_LOG("%s 0x%s", evt_str, data_str);
+       g_free(data_str);
+}
+
 static void __bt_device_event_handler(int event_type, gpointer event_data)
 {
        int eventcheck = OAL_EVENT_DEVICE_PROPERTIES;
@@ -1127,6 +1207,10 @@ static void __bt_device_event_handler(int event_type, gpointer event_data)
                _bt_send_event(BT_DEVICE_EVENT, BLUETOOTH_EVENT_RAW_RSSI, param);
                break;
        }
+       case OAL_EVENT_DEVICE_DBFW_PLUS_INFO: {
+               __bt_device_dbfw_plus_info_callback((event_dev_dbfw_plus_info_t*)event_data);
+               break;
+       }
        default:
                BT_INFO("Unhandled event..");
        }
@@ -1439,11 +1523,13 @@ static void __bt_device_acl_state_changed_callback(event_dev_conn_status_t *acl_
                                BLUETOOTH_EVENT_DEVICE_CONNECTED,
                                param);
        } else {
-               param = g_variant_new("(isyi)", result, address, type, acl_event->rssi);
+               param = g_variant_new("(isyi)", result, address, type, dbfw_rssi);
                _bt_send_event(BT_DEVICE_EVENT,
                                BLUETOOTH_EVENT_DEVICE_DISCONNECTED,
                                param);
        }
+       BT_PERMANENT_LOG("%sonnected %s %s",
+               connected ? "C" : "Disc", !type ? "EDR" : "LE", address + 12);
 
        conn_info.connected = connected;
        conn_info.type = type;
index 213e52f..da3451b 100644 (file)
@@ -52,11 +52,13 @@ static void __bt_hid_device_event_handler(int event_type, gpointer event_data)
                _bt_send_event(BT_HID_DEVICE_EVENT,
                                BLUETOOTH_HID_DEVICE_CONNECTED,
                                g_variant_new("(is)", result, address));
+               BT_PERMANENT_LOG("Connected HID Device");
                break;
        case OAL_EVENT_HID_DEVICE_DISCONNECTED:
                _bt_send_event(BT_HID_DEVICE_EVENT,
                                BLUETOOTH_HID_DEVICE_DISCONNECTED,
                                g_variant_new("(is)", result, address));
+               BT_PERMANENT_LOG("Disconnected HID Device");
                break;
        default:
                BT_ERR("Unhandled event: %d", event_type);
index 4443e82..71fa458 100644 (file)
@@ -118,6 +118,7 @@ static void __bt_send_hid_connected(const char *address)
        /* Send HID connected event to Application */
        param = g_variant_new("(is)", result, address);
        _bt_send_event(BT_HID_EVENT, BLUETOOTH_HID_CONNECTED, param);
+       BT_PERMANENT_LOG("Connected HID Host");
 
        BT_DBG("-");
 }
@@ -186,6 +187,7 @@ static void __bt_handle_hid_disconnection(char *address)
        /* Send HID disconnected event to Application */
        param = g_variant_new("(is)", result, address);
        _bt_send_event(BT_HID_EVENT, BLUETOOTH_HID_DISCONNECTED, param);
+       BT_PERMANENT_LOG("Disconnected HID Host");
 
        BT_DBG("-");
 }
index c8e5e3b..14454b4 100644 (file)
@@ -50,6 +50,8 @@ extern "C" {
 #define LOG_COLOR_BLUE          "\033[36m"
 #define LOG_COLOR_PURPLE   "\033[35m"
 
+#define BT_PERMANENT_LOG(fmt, args...) _bt_permanent_log(fmt, ##args)
+
 #define BT_DBG(fmt, args...) \
        SLOGD(fmt, ##args)
 #define BT_INFO(fmt, args...) \
@@ -445,6 +447,8 @@ void _bt_copy_remote_dev_info(bt_remote_dev_info_t *dest, bt_remote_dev_info_t *
 
 invocation_info_t* _bt_get_request_info_data_from_function_name(int service_function);
 
+void _bt_permanent_log(const char *fmt, ...);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */