Add CONTROLLER_ERROR event on frwk 28/227328/1
authorSangki Park <sangki79.park@samsung.com>
Tue, 10 Mar 2020 06:12:06 +0000 (15:12 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Wed, 11 Mar 2020 07:46:19 +0000 (16:46 +0900)
[Model] ALL
[BinType] AP
[Customer] ALL

[Issue#] N/A
[Request] N/A
[Occurrence Version] N/A

[Problem] N/A
[Cause & Measure] N/A
[Checking Method] N/A

[Team] Bluetooth
[Developer] Sangki Park
[Solution company] Samsung
[Change Type] Specification change

Change-Id: I0bee8fda427fd4a16a0de89c65f338ae422fd753

bt-oal/bluez_hal/inc/bt-hal-msg.h
bt-oal/bluez_hal/src/bt-hal-bluetooth.c
bt-oal/bluez_hal/src/bt-hal-event-receiver.c
bt-oal/hardware/bluetooth.h
bt-oal/include/oal-event.h
bt-oal/oal-adapter-mgr.c
bt-service-adaptation/services/adapter/bt-service-core-adapter.c
bt-service-adaptation/services/bt-service-event-receiver.c

index aef24bb..5caaaa8 100644 (file)
@@ -823,4 +823,12 @@ struct hal_ev_gatt_client_mtu_exchange_completed {
        int32_t mtu;
        int32_t status;
 } __attribute__((packed));
+
+#define HAL_CONTROLLER_ERROR_HW_ERROR  0x00
+#define HAL_CONTROLLER_ERROR_TX_TIMEOUT        0x01
+
+#define HAL_EV_CONTROLLER_ERROR_RECIEVED       0xD1
+struct hal_ev_controller_error_recieved {
+       uint8_t code;
+} __attribute__((packed));
 #endif //_BT_HAL_MSG_H_
index 3e8752e..49a7ad7 100644 (file)
@@ -1003,6 +1003,17 @@ static void __bt_handle_dbfw_plus_info_recieved(void *buf, uint16_t len)
 #endif
 }
 
+static void __bt_handle_controller_error_recieved(void *buf, uint16_t len)
+{
+       struct hal_ev_controller_error_recieved *info = buf;
+       uint8_t error_code = info->code;
+
+#ifdef TIZEN_BT_HAL
+       if (bt_hal_cbacks->controller_error_received_cb)
+               bt_hal_cbacks->controller_error_received_cb(error_code);
+#endif
+}
+
 static void __bt_hal_handle_stack_messages(int message, void *buf, uint16_t len)
 {
        switch (message) {
@@ -1084,6 +1095,10 @@ static void __bt_hal_handle_stack_messages(int message, void *buf, uint16_t len)
                DBG("Event: HAL_EV_DBFW_PLUS_INFO_RECIEVED");
                __bt_handle_dbfw_plus_info_recieved(buf, len);
                break;
+       case HAL_EV_CONTROLLER_ERROR_RECIEVED:
+               DBG("Event: HAL_EV_CONTROLLER_ERROR_RECIEVED");
+               __bt_handle_controller_error_recieved(buf, len);
+               break;
        default:
                DBG("Event Currently not handled!!");
                break;
index e79c661..8369fb9 100644 (file)
@@ -581,9 +581,25 @@ void _bt_hal_handle_adapter_event(GVariant *msg, const char *member)
 
                g_free(address);
        } else if (strcasecmp(member, BT_HAL_HARDWARE_ERROR) == 0) {
+#ifndef TIZEN_BT_HAL
                DBG("BT Hardware Error: Unhandled");
+#else
+               struct hal_ev_controller_error_recieved info;
+
+               INFO("### BT Hardware Error");
+               info.code = HAL_CONTROLLER_ERROR_HW_ERROR;
+               event_cb(HAL_EV_CONTROLLER_ERROR_RECIEVED, &info, sizeof(info));
+#endif
        } else if (strcasecmp(member, BT_HAL_TX_TIMEOUT_ERROR) == 0) {
-               DBG("BT TX Timeout Error: Unhandled");
+#ifndef TIZEN_BT_HAL
+               DBG("BT Hardware Error: Unhandled");
+#else
+               struct hal_ev_controller_error_recieved info;
+
+               INFO("### BT TX Timeout Error");
+               info.code = HAL_CONTROLLER_ERROR_TX_TIMEOUT;
+               event_cb(HAL_EV_CONTROLLER_ERROR_RECIEVED, &info, sizeof(info));
+#endif
        } else if (strcasecmp(member, BT_HAL_DBFW_PLUS_INFO) == 0) {
 #ifdef TIZEN_BT_HAL
                DBG("### DBFW+ info received from BLUEZ");
index e9515c3..598a74a 100644 (file)
@@ -627,6 +627,8 @@ typedef void (*raw_rssi_received_callback)(bt_bdaddr_t *bd_addr, int32_t link_ty
 
 /** DBFW plus info received callback */
 typedef void (*dbfw_plus_info_received_callback)(unsigned char *data, uint32_t length, uint8_t event_code);
+
+typedef void (*controller_error_received_callback)(uint8_t code);
 #endif
 
 /** TODO: Add callbacks for Link Up/Down and other generic
@@ -664,6 +666,7 @@ typedef struct {
        rssi_alert_callback rssi_alert_cb;
        raw_rssi_received_callback raw_rssi_received_cb;
        dbfw_plus_info_received_callback dbfw_plus_info_received_cb;
+       controller_error_received_callback controller_error_received_cb;
 #endif
 } bt_callbacks_t;
 
index 26d6c7d..5d18a79 100644 (file)
@@ -50,6 +50,7 @@ extern "C" {
        EVENT(OAL_EVENT_ADAPTER_INQUIRY_RESULT_BREDR_ONLY)      /* event_dev_found_t */\
        EVENT(OAL_EVENT_ADAPTER_INQUIRY_RESULT_BLE)             /* event_ble_dev_found_t */\
        EVENT(OAL_EVENT_ADAPTER_INQUIRY_FINISHED)       \
+       EVENT(OAL_EVENT_CONTROLLER_ERROR_RECEIVED)              /* */\
        EVENT(OAL_EVENT_DEVICE_PROPERTIES)                                      /* remote_device_t */\
        EVENT(OAL_EVENT_DEVICE_NAME)                                            /* remote_device_t */\
        EVENT(OAL_EVENT_DEVICE_VIDPID)                                          /* remote_device_t */\
index 57e9755..258a3ea 100644 (file)
@@ -80,6 +80,7 @@ extern void cb_rssi_monitor_state_changed(bt_bdaddr_t *bd_addr, int32_t link_typ
 extern void cb_rssi_alert(bt_bdaddr_t *bd_addr, int32_t link_type, int32_t alert_type, int32_t rssi);
 extern void cb_raw_rssi_received(bt_bdaddr_t *bd_addr, int32_t link_type, int32_t rssi);
 extern void cb_dbfw_plus_info_received(unsigned char *data, uint32_t length, uint8_t event_code);
+extern void cb_controller_error_received(uint8_t error_code);
 #endif
 
 static bt_callbacks_t callbacks = {
@@ -108,6 +109,7 @@ static bt_callbacks_t callbacks = {
        .rssi_alert_cb = cb_rssi_alert,
        .raw_rssi_received_cb = cb_raw_rssi_received,
        .dbfw_plus_info_received_cb = cb_dbfw_plus_info_received,
+       .controller_error_received_cb = cb_controller_error_received,
 #endif
 };
 
@@ -1105,3 +1107,13 @@ static void cb_adapter_device_found(int num_properties, bt_property_t *propertie
 
        BT_DBG("-");
 }
+
+void cb_controller_error_received(uint8_t error_code)
+{
+       BT_DBG("+");
+
+       send_event(OAL_EVENT_CONTROLLER_ERROR_RECEIVED,
+               &error_code, sizeof(uint8_t));
+
+       BT_DBG("-");
+}
\ No newline at end of file
index 8a0a58b..ad89b41 100644 (file)
@@ -1279,6 +1279,16 @@ static void __bt_adapter_event_handler(int event_type, gpointer event_data)
 
                break;
        }
+       case OAL_EVENT_CONTROLLER_ERROR_RECEIVED: {
+               uint8_t *error_code = event_data;
+
+               BT_INFO("OAL_EVENT_CONTROLLER_ERROR_RECEIVED: [%d]", *error_code);
+#ifdef TIZEN_FEATURE_BT_PERMANENT_LOG
+               _bt_start_log_dump("syslog");
+#endif
+               _bt_recover_adapter();
+               break;
+       }
        default:
                BT_ERR("Unhandled event..");
                break;
index 0299e49..d9bf04d 100644 (file)
@@ -202,6 +202,7 @@ static gboolean __bt_handle_oal_events(gpointer data)
        case OAL_EVENT_ADAPTER_MODE_DISCOVERABLE_TIMEOUT:
        case OAL_EVENT_ADAPTER_INQUIRY_STARTED:
        case OAL_EVENT_ADAPTER_INQUIRY_FINISHED:
+       case OAL_EVENT_CONTROLLER_ERROR_RECEIVED:
                if (adapter_cb)
                        adapter_cb(event_type, event_data);
                break;