__u8 le_ext_opcode;
} __packed;
-struct hci_ev_vendor_specific_rssi_alert {
- __le16 conn_handle;
- __s8 alert_type;
- __s8 rssi_dbm;
-} __packed;
-
/*
* Vendor Specific HCI Command
* Vendor: Broadcom
} __packed;
#define LE_RSSI_LINK_ALERT 0x02
+struct hci_ev_vendor_specific_rssi_alert {
+ __le16 conn_handle;
+ __s8 alert_type;
+ __s8 rssi_dbm;
+} __packed;
#endif
#define HCI_EV_LE_CONN_COMPLETE 0x01
void *data, struct hci_cc_rsp_enable_rssi *rp, int success);
int mgmt_set_rssi_threshold(struct sock *sk, struct hci_dev *hdev,
void *data, u16 len);
-void mgmt_rssi_alert_evt(struct hci_dev *hdev, struct sk_buff *skb);
+void mgmt_rssi_alert_evt(struct hci_dev *hdev, u16 conn_handle,
+ s8 alert_type, s8 rssi_dbm);
void mgmt_raw_rssi_response(struct hci_dev *hdev,
struct hci_cc_rp_get_raw_rssi *rp, int success);
void mgmt_enable_rssi_cc(struct hci_dev *hdev, void *response, u8 status);
mgmt_raw_rssi_response(hdev, rp, rp->status);
}
+static void hci_vendor_ext_rssi_link_alert_evt(struct hci_dev *hdev,
+ struct sk_buff *skb)
+{
+ struct hci_ev_vendor_specific_rssi_alert *ev = (void *)skb->data;
+
+ BT_DBG("RSSI event LE_RSSI_LINK_ALERT %X", LE_RSSI_LINK_ALERT);
+
+ mgmt_rssi_alert_evt(hdev, ev->conn_handle, ev->alert_type,
+ ev->rssi_dbm);
+}
+
static void hci_vendor_specific_group_ext_evt(struct hci_dev *hdev,
struct sk_buff *skb)
{
switch (event_le_ext_sub_code) {
case LE_RSSI_LINK_ALERT:
- BT_DBG("RSSI event LE_RSSI_LINK_ALERT %X",
- LE_RSSI_LINK_ALERT);
- mgmt_rssi_alert_evt(hdev, skb);
+ hci_vendor_ext_rssi_link_alert_evt(hdev, skb);
break;
default:
return err;
}
-void mgmt_rssi_alert_evt(struct hci_dev *hdev, struct sk_buff *skb)
+void mgmt_rssi_alert_evt(struct hci_dev *hdev, u16 conn_handle,
+ s8 alert_type, s8 rssi_dbm)
{
- struct hci_ev_vendor_specific_rssi_alert *ev = (void *)skb->data;
struct mgmt_ev_vendor_specific_rssi_alert mgmt_ev;
struct hci_conn *conn;
BT_DBG("RSSI alert [%2.2X %2.2X %2.2X]",
- ev->conn_handle, ev->alert_type, ev->rssi_dbm);
+ conn_handle, alert_type, rssi_dbm);
- conn = hci_conn_hash_lookup_handle(hdev, ev->conn_handle);
+ conn = hci_conn_hash_lookup_handle(hdev, conn_handle);
if (!conn) {
BT_ERR("RSSI alert Error: Device not found for handle");
else
mgmt_ev.link_type = 0x00;
- mgmt_ev.alert_type = ev->alert_type;
- mgmt_ev.rssi_dbm = ev->rssi_dbm;
+ mgmt_ev.alert_type = alert_type;
+ mgmt_ev.rssi_dbm = rssi_dbm;
mgmt_event(MGMT_EV_RSSI_ALERT, hdev, &mgmt_ev,
sizeof(struct mgmt_ev_vendor_specific_rssi_alert),