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_
#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) {
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;
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");
/** 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
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;
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 */\
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 = {
.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
};
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
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;
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;