From 578507ce97a4ea7812ed31c8c735d03f6c461e22 Mon Sep 17 00:00:00 2001 From: Sangki Park Date: Tue, 10 Mar 2020 15:12:06 +0900 Subject: [PATCH] Add CONTROLLER_ERROR event on frwk [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 | 8 ++++++++ bt-oal/bluez_hal/src/bt-hal-bluetooth.c | 15 +++++++++++++++ bt-oal/bluez_hal/src/bt-hal-event-receiver.c | 18 +++++++++++++++++- bt-oal/hardware/bluetooth.h | 3 +++ bt-oal/include/oal-event.h | 1 + bt-oal/oal-adapter-mgr.c | 12 ++++++++++++ .../services/adapter/bt-service-core-adapter.c | 10 ++++++++++ .../services/bt-service-event-receiver.c | 1 + 8 files changed, 67 insertions(+), 1 deletion(-) diff --git a/bt-oal/bluez_hal/inc/bt-hal-msg.h b/bt-oal/bluez_hal/inc/bt-hal-msg.h index aef24bb..5caaaa8 100644 --- a/bt-oal/bluez_hal/inc/bt-hal-msg.h +++ b/bt-oal/bluez_hal/inc/bt-hal-msg.h @@ -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_ diff --git a/bt-oal/bluez_hal/src/bt-hal-bluetooth.c b/bt-oal/bluez_hal/src/bt-hal-bluetooth.c index 3e8752e..49a7ad7 100644 --- a/bt-oal/bluez_hal/src/bt-hal-bluetooth.c +++ b/bt-oal/bluez_hal/src/bt-hal-bluetooth.c @@ -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; diff --git a/bt-oal/bluez_hal/src/bt-hal-event-receiver.c b/bt-oal/bluez_hal/src/bt-hal-event-receiver.c index e79c661..8369fb9 100644 --- a/bt-oal/bluez_hal/src/bt-hal-event-receiver.c +++ b/bt-oal/bluez_hal/src/bt-hal-event-receiver.c @@ -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"); diff --git a/bt-oal/hardware/bluetooth.h b/bt-oal/hardware/bluetooth.h index e9515c3..598a74a 100644 --- a/bt-oal/hardware/bluetooth.h +++ b/bt-oal/hardware/bluetooth.h @@ -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; diff --git a/bt-oal/include/oal-event.h b/bt-oal/include/oal-event.h index 26d6c7d..5d18a79 100644 --- a/bt-oal/include/oal-event.h +++ b/bt-oal/include/oal-event.h @@ -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 */\ diff --git a/bt-oal/oal-adapter-mgr.c b/bt-oal/oal-adapter-mgr.c index 57e9755..258a3ea 100644 --- a/bt-oal/oal-adapter-mgr.c +++ b/bt-oal/oal-adapter-mgr.c @@ -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 diff --git a/bt-service-adaptation/services/adapter/bt-service-core-adapter.c b/bt-service-adaptation/services/adapter/bt-service-core-adapter.c index 8a0a58b..ad89b41 100644 --- a/bt-service-adaptation/services/adapter/bt-service-core-adapter.c +++ b/bt-service-adaptation/services/adapter/bt-service-core-adapter.c @@ -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; diff --git a/bt-service-adaptation/services/bt-service-event-receiver.c b/bt-service-adaptation/services/bt-service-event-receiver.c index 0299e49..d9bf04d 100644 --- a/bt-service-adaptation/services/bt-service-event-receiver.c +++ b/bt-service-adaptation/services/bt-service-event-receiver.c @@ -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; -- 2.7.4