| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- #include <string.h>
- #include <stdint.h>
- #include <stdbool.h>
- #include <assert.h>
- #include "wm_bt_config.h"
- #if (WM_BLE_INCLUDED == CFG_ON)
- #include "wm_ble_client.h"
- #include "wm_ble_client_demo.h"
- #include "wm_ble_gap.h"
- #include "wm_bt_util.h"
- static tls_ble_callback_t tls_demo_at_cb_ptr;
- /** Callback invoked in response to register_client */
- void ble_client_demo_register_client_callback(int status, int client_if,
- uint16_t app_uuid)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, status=%d,client_if=%d,uuid=0x%04x\r\n", __FUNCTION__, status, client_if, app_uuid);
- tls_ble_msg_t msg;
- msg.cli_register.status = status;
- msg.cli_register.client_if = client_if;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_REGISTER_EVT, &msg);
- }
- void ble_client_demo_deregister_client_callback(int status, int client_if)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, status=%d,client_if=%d\r\n", __FUNCTION__, status, client_if);
- tls_ble_msg_t msg;
- msg.cli_register.status = status;
- msg.cli_register.client_if = client_if;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_DEREGISTER_EVT, &msg);
- tls_demo_at_cb_ptr = NULL;
- }
- /** GATT open callback invoked in response to open */
- void ble_client_demo_connect_callback(int conn_id, int status, int client_if, tls_bt_addr_t *bda)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, status=%d,client_if=%d,conn_id=%d\r\n", __FUNCTION__, status, client_if, conn_id);
- tls_ble_msg_t msg;
- memcpy(msg.cli_open.bd_addr, bda->address, 6);
- msg.cli_open.client_if = client_if;
- msg.cli_open.conn_id = conn_id;
- msg.cli_open.status = status;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_OPEN_EVT, &msg);
- }
- /** Callback invoked in response to close */
- void ble_client_demo_disconnect_callback(int conn_id, int status,int reason,
- int client_if, tls_bt_addr_t *bda)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, status = %d, reason=%d, conn_id=%d\r\n", __FUNCTION__, status, reason, conn_id);
- tls_ble_msg_t msg;
- msg.cli_close.client_if = client_if;
- msg.cli_close.conn_id = conn_id;
- msg.cli_close.status = status;
- msg.cli_close.reason = reason;
- memcpy(msg.cli_close.remote_bda, bda->address, 6);
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_CLOSE_EVT, &msg);
- }
- /**
- * Invoked in response to search_service when the GATT service search
- * has been completed.
- */
- void ble_client_demo_search_complete_callback(int conn_id, int status)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d, status=%d\r\n", __FUNCTION__, conn_id, status);
- tls_ble_msg_t msg;
- msg.cli_search_cmpl.conn_id = conn_id;
- msg.cli_search_cmpl.status = status;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_SEARCH_CMPL_EVT, &msg);
- }
- void ble_client_demo_search_service_result_callback(int conn_id, tls_bt_uuid_t *p_uuid, uint8_t inst_id)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d\r\n", __FUNCTION__, conn_id);
- }
- /** Callback invoked in response to [de]register_for_notification */
- void ble_client_demo_register_for_notification_callback(int conn_id,
- int registered, int status, uint16_t handle)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d, registered=%d, handle=%d\r\n", __FUNCTION__, conn_id, registered, handle);
- tls_ble_msg_t msg;
- msg.cli_reg_notify.conn_id = conn_id;
- msg.cli_reg_notify.handle = handle;
- msg.cli_reg_notify.reg = registered;
- msg.cli_reg_notify.status = status;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_REG_NOTIFY_EVT, &msg);
- }
- /**
- * Remote device notification callback, invoked when a remote device sends
- * a notification or indication that a client has registered for.
- */
- void ble_client_demo_notify_callback(int conn_id, uint8_t *value, tls_bt_addr_t *addr, uint16_t handle, uint16_t len, uint8_t is_notify)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s\r\n", __FUNCTION__);
- tls_ble_msg_t msg;
- memcpy(msg.cli_notif.bda, addr->address, 6);
- msg.cli_notif.conn_id = conn_id;
- msg.cli_notif.handle = handle;
- msg.cli_notif.is_notify = is_notify;
- msg.cli_notif.len = len;
- msg.cli_notif.value = value;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_NOTIF_EVT, &msg);
- }
- /** Reports result of a GATT read operation */
- void ble_client_demo_read_characteristic_callback(int conn_id, int status,
- uint16_t handle, uint8_t *value, int length, uint16_t value_type, uint8_t p_status)
- {
- //hci_dbg_hexstring("read out:", value, length);
- TLS_BT_APPL_TRACE_DEBUG("%s\r\n", __FUNCTION__);
- tls_ble_msg_t msg;
- msg.cli_read.conn_id = conn_id;
- msg.cli_read.handle = handle;
- msg.cli_read.len = length;
- msg.cli_read.status = status;
- msg.cli_read.value = value;
- msg.cli_read.value_type = value_type;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_READ_CHAR_EVT, &msg);
- }
- /** GATT write characteristic operation callback */
- void ble_client_demo_write_characteristic_callback(int conn_id, int status, uint16_t handle)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d,handle=%d\r\n", __FUNCTION__, conn_id, handle);
- tls_ble_msg_t msg;
- msg.cli_write.conn_id = conn_id;
- msg.cli_write.handle = handle;
- msg.cli_write.status = status;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_WRITE_CHAR_EVT, &msg);
- }
- /** GATT execute prepared write callback */
- void ble_client_demo_execute_write_callback(int conn_id, int status)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d\r\n", __FUNCTION__, conn_id);
- }
- /** Callback invoked in response to read_descriptor */
- void ble_client_demo_read_descriptor_callback(int conn_id, int status, uint16_t handle, uint8_t *p_value, uint16_t length, uint16_t value_type, uint8_t pa_status)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d, handle=%d\r\n", __FUNCTION__, conn_id, handle);
- //hci_dbg_hexstring("value", p_value, length);
- tls_ble_msg_t msg;
- msg.cli_read.conn_id = conn_id;
- msg.cli_read.handle = handle;
- msg.cli_read.len = length;
- msg.cli_read.status = status;
- msg.cli_read.value = p_value;
- msg.cli_read.value_type = value_type;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_READ_DESCR_EVT, &msg);
- }
- /** Callback invoked in response to write_descriptor */
- void ble_client_demo_write_descriptor_callback(int conn_id, int status, uint16_t handle)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d\r\n", __FUNCTION__, conn_id);
- tls_ble_msg_t msg;
- msg.cli_write.conn_id = conn_id;
- msg.cli_write.handle = handle;
- msg.cli_write.status = status;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_WRITE_DESCR_EVT, &msg);
- }
- /** Callback triggered in response to read_remote_rssi */
- void ble_client_demo_read_remote_rssi_callback(int client_if, tls_bt_addr_t *bda,
- int rssi, int status)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, client_if=%d\r\n", __FUNCTION__, client_if);
- }
- /**
- * Callback indicating the status of a listen() operation
- */
- void ble_client_demo_listen_callback(int status, int server_if)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, server_if=%d\r\n", __FUNCTION__, server_if);
- tls_ble_msg_t msg;
- msg.cli_listen.client_if = server_if;
- msg.cli_listen.status = status;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_LISTEN_EVT, &msg);
-
- }
- /** Callback invoked when the MTU for a given connection changes */
- void ble_client_demo_configure_mtu_callback(int conn_id, int status, int mtu)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d\r\n", __FUNCTION__, conn_id);
- tls_ble_msg_t msg;
- msg.cli_cfg_mtu.conn_id = conn_id;
- msg.cli_cfg_mtu.status = status;
- msg.cli_cfg_mtu.mtu = mtu;
-
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_CFG_MTU_EVT, &msg);
- }
- /**
- * Callback notifying an application that a remote device connection is currently congested
- * and cannot receive any more data. An application should avoid sending more data until
- * a further callback is received indicating the congestion status has been cleared.
- */
- void ble_client_demo_congestion_callback(int conn_id, uint8_t congested)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d\r\n", __FUNCTION__, conn_id);
- tls_ble_msg_t msg;
- msg.cli_congest.congested = congested;
- msg.cli_congest.conn_id = conn_id;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_CONGEST_EVT, &msg);
- }
- /** GATT get database callback */
- void ble_client_demo_get_gatt_db_callback(int status, int conn_id, tls_btgatt_db_element_t *db, int count)
- {
- tls_ble_msg_t msg;
- TLS_BT_APPL_TRACE_DEBUG("===========btgattc_get_gatt_db_callback(count=%d)(conn_id=%d)================\r\n", count, conn_id);
- #if 0
- int i = 0;
- uint16_t cared_handle, tmp_uuid;
- for(i = 0; i < count; i++)
- {
- if(db->type == 0)
- {
- hci_dbg_hexstring("#", db->uuid.uu + 12, 2);
- hci_dbg_msg("type:%d, attr_handle:%d, properties:0x%02x, s=%d, e=%d\r\n", db->type, db->attribute_handle, db->properties, db->start_handle, db->end_handle);
- }
- else
- {
- hci_dbg_hexstring("\t#", db->uuid.uu + 12, 2);
- tmp_uuid = db->uuid.uu[12]<<8|db->uuid.uu[13];
- if(tmp_uuid == 0xBC2A)
- {
- cared_handle = db->attribute_handle;
- }
- hci_dbg_msg("\ttype:%d, attr_handle:%d, properties:0x%02x, s=%d, e=%d\r\n", db->type, db->attribute_handle, db->properties, db->start_handle, db->end_handle);
- }
- db++;
- }
- #endif
- msg.cli_db.conn_id = conn_id;
- msg.cli_db.count = count;
- msg.cli_db.db = db;
- msg.cli_db.status = status;
- if(tls_demo_at_cb_ptr)(tls_demo_at_cb_ptr)(WM_BLE_CL_REPORT_DB_EVT, &msg);
- }
- /** GATT services between start_handle and end_handle were removed */
- void ble_client_demo_services_removed_callback(int conn_id, uint16_t start_handle, uint16_t end_handle)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d\r\n", __FUNCTION__, conn_id);
- }
- /** GATT services were added */
- void ble_client_demo_services_added_callback(int conn_id, tls_btgatt_db_element_t *added, int added_count)
- {
- TLS_BT_APPL_TRACE_DEBUG("%s, conn_id=%d\r\n", __FUNCTION__, conn_id);
- }
- static const wm_ble_client_callbacks_t swmbleclientcb =
- {
- ble_client_demo_register_client_callback,
- ble_client_demo_deregister_client_callback,
- ble_client_demo_connect_callback,
- ble_client_demo_disconnect_callback,
- ble_client_demo_search_complete_callback,
- ble_client_demo_search_service_result_callback,
- ble_client_demo_register_for_notification_callback,
- ble_client_demo_notify_callback,
- ble_client_demo_read_characteristic_callback,
- ble_client_demo_write_characteristic_callback,
- ble_client_demo_read_descriptor_callback,
- ble_client_demo_write_descriptor_callback,
- ble_client_demo_execute_write_callback,
- ble_client_demo_read_remote_rssi_callback,
- ble_client_demo_listen_callback,
- ble_client_demo_configure_mtu_callback,
- ble_client_demo_congestion_callback,
- ble_client_demo_get_gatt_db_callback,
- ble_client_demo_services_removed_callback,
- ble_client_demo_services_added_callback,
- } ;
- int tls_ble_demo_cli_init(uint16_t demo_uuid,tls_ble_callback_t at_cb_ptr)
- {
- tls_bt_status_t status;
- if(tls_demo_at_cb_ptr)
- {
- TLS_BT_APPL_TRACE_WARNING("%s, done already\r\n", __FUNCTION__);
- return TLS_BT_STATUS_DONE;
- }
-
- tls_demo_at_cb_ptr = at_cb_ptr;
- status = tls_ble_client_register_client(demo_uuid, &swmbleclientcb);
- if(status != TLS_BT_STATUS_SUCCESS)
- {
- tls_demo_at_cb_ptr = NULL;
- TLS_BT_APPL_TRACE_ERROR("%s, failed, clear the tls_demo_at_cb_ptr\r\n", __FUNCTION__);
- }
- return status;
- }
- int tls_ble_demo_cli_deinit(int client_if)
- {
- if(tls_demo_at_cb_ptr == NULL)
- {
- TLS_BT_APPL_TRACE_WARNING("%s, done already\r\n", __FUNCTION__);
- return TLS_BT_STATUS_DONE;
- }
-
- return tls_ble_client_unregister_client(client_if);
- }
- #endif
|