From 1c00af99f761cde21b084cb0cfea04265274259e Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Fri, 3 Apr 2015 21:58:10 +0200 Subject: [PATCH] emit event for ATT MTU size --- ble/att_server.c | 21 +++++++++++++++++++++ include/btstack/hci_cmds.h | 11 +++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/ble/att_server.c b/ble/att_server.c index d1fdb3724..cd144649b 100644 --- a/ble/att_server.c +++ b/ble/att_server.c @@ -104,6 +104,21 @@ static void att_handle_value_indication_notify_client(uint8_t status, uint16_t c (*att_client_packet_handler)(HCI_EVENT_PACKET, 0, &event[0], sizeof(event)); } +static void att_emit_mtu_event(uint16_t handle, uin16_t mtu){ + + if (!att_client_packet_handler) return; + + uint8_t event[5]; + int pos = 0; + event[pos++] = ATT_MTU_EXCHANGE_COMPLETE; + event[pos++] = sizeof(event) - 2; + bt_store_16(event, pos, handle); + pos += 2; + bt_store_16(event, pos, mtu); + pos += 2; + (*att_client_packet_handler)(HCI_EVENT_PACKET, 0, &event[0], sizeof(event)); +} + static void att_handle_value_indication_timeout(timer_source_t *ts){ uint16_t att_handle = att_handle_value_indication_handle; att_handle_value_indication_notify_client(ATT_HANDLE_VALUE_INDICATION_TIMEOUT, att_connection.con_handle, att_handle); @@ -289,6 +304,12 @@ static void att_run(void){ } l2cap_send_prepared_connectionless(att_connection.con_handle, L2CAP_CID_ATTRIBUTE_PROTOCOL, att_response_size); + + // notify client about MTU exchange result + if (att_response_buffer[0] == ATT_EXCHANGE_MTU_RESPONSE){ + att_emit_mtu_event(att_connection.con_handle, att_connection.mtu); + } + break; } } diff --git a/include/btstack/hci_cmds.h b/include/btstack/hci_cmds.h index c0ab6cf6c..9ad4fb1b8 100644 --- a/include/btstack/hci_cmds.h +++ b/include/btstack/hci_cmds.h @@ -534,9 +534,16 @@ extern "C" { #define GATT_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT 0xA9 #define GATT_LONG_CHARACTERISTIC_DESCRIPTOR_QUERY_RESULT 0xAA - + +/** + * @format H2 + * @param handle + * @param MTU + */ +#define ATT_MTU_EXCHANGE_COMPLETE 0xB5 + // data: event(8), len(8), status (8), hci_handle (16), attribute_handle (16) -#define ATT_HANDLE_VALUE_INDICATION_COMPLETE 0xB6 +#define ATT_HANDLE_VALUE_INDICATION_COMPLETE 0xB6 // data: event(8), len(8), status (8), bnep service uuid (16)