1 2 3 #pragma once 4 5 #include <base/strings/stringprintf.h> 6 7 #include <list> 8 #include <map> 9 #include <string> 10 11 #include "include/hardware/bluetooth.h" 12 #include "test/headless/log.h" 13 #include "types/raw_address.h" 14 15 struct callback_data_t { Namecallback_data_t16 std::string Name() const { return std::string(name_); } TimestampInMscallback_data_t17 uint64_t TimestampInMs() const { 18 return static_cast<uint64_t>(timestamp_ms_); 19 } 20 21 protected: callback_data_tcallback_data_t22 callback_data_t(const char* name) 23 : name_(name), timestamp_ms_(GetTimestampMs()) {} 24 virtual ~callback_data_t() = default; 25 26 private: 27 const char* name_; 28 const long long timestamp_ms_; 29 }; 30 31 struct callback_params_t : public callback_data_t { 32 protected: callback_params_tcallback_params_t33 callback_params_t(const char* name) : callback_data_t(name) {} 34 virtual ~callback_params_t() = default; 35 virtual std::string ToString() const = 0; 36 }; 37 38 struct acl_state_changed_params_t : public callback_params_t { acl_state_changed_params_tacl_state_changed_params_t39 acl_state_changed_params_t(bt_status_t status, RawAddress remote_bd_addr, 40 bt_acl_state_t state, int transport_link_type, 41 bt_hci_error_code_t hci_reason, 42 bt_conn_direction_t direction, uint16_t acl_handle) 43 : callback_params_t("acl_state_changed"), 44 status(status), 45 remote_bd_addr(remote_bd_addr), 46 state(state), 47 transport_link_type(transport_link_type), 48 hci_reason(hci_reason), 49 direction(direction), 50 acl_handle(acl_handle) {} 51 acl_state_changed_params_t(const acl_state_changed_params_t& params) = 52 default; ~acl_state_changed_params_tacl_state_changed_params_t53 virtual ~acl_state_changed_params_t() {} 54 55 bt_status_t status; 56 RawAddress remote_bd_addr; 57 bt_acl_state_t state; 58 int transport_link_type; 59 bt_hci_error_code_t hci_reason; 60 bt_conn_direction_t direction; 61 uint16_t acl_handle; 62 ToStringacl_state_changed_params_t63 std::string ToString() const override { 64 return base::StringPrintf( 65 "status:%s remote_bd_addr:%s state:%s transport:%s reason:%s " 66 "direction:%d handle:%d", 67 bt_status_text(status).c_str(), remote_bd_addr.ToString().c_str(), 68 (state == BT_ACL_STATE_CONNECTED) ? "CONNECTED" : "DISCONNECTED", 69 bt_transport_text(static_cast<const tBT_TRANSPORT>(transport_link_type)) 70 .c_str(), 71 bt_status_text(static_cast<const bt_status_t>(hci_reason)).c_str(), 72 direction, acl_handle); 73 } 74 }; 75 76 struct discovery_state_changed_params_t : public callback_params_t { discovery_state_changed_params_tdiscovery_state_changed_params_t77 discovery_state_changed_params_t(bt_discovery_state_t state) 78 : callback_params_t("discovery_state_changed"), state(state) {} 79 discovery_state_changed_params_t( 80 const discovery_state_changed_params_t& params) = default; 81 ~discovery_state_changed_params_tdiscovery_state_changed_params_t82 virtual ~discovery_state_changed_params_t() {} 83 84 bt_discovery_state_t state; ToStringdiscovery_state_changed_params_t85 std::string ToString() const override { 86 return base::StringPrintf( 87 "state:%s", (state == BT_DISCOVERY_STOPPED) ? "STOPPED" : "STARTED"); 88 } 89 }; 90 91 struct remote_device_properties_params_t : public callback_params_t { remote_device_properties_params_tremote_device_properties_params_t92 remote_device_properties_params_t(bt_status_t status, RawAddress bd_addr, 93 int num_properties, 94 bt_property_t* properties) 95 : callback_params_t("remote_device_properties"), 96 status(status), 97 bd_addr(bd_addr), 98 num_properties(num_properties), 99 properties(properties) {} 100 remote_device_properties_params_t( 101 const remote_device_properties_params_t& params) = default; 102 ~remote_device_properties_params_tremote_device_properties_params_t103 virtual ~remote_device_properties_params_t() {} 104 bt_status_t status; 105 RawAddress bd_addr; 106 int num_properties; 107 bt_property_t* properties; ToStringremote_device_properties_params_t108 std::string ToString() const override { 109 return base::StringPrintf( 110 "status:%s bd_addr:%s num_properties:%d properties:%p", 111 bt_status_text(status).c_str(), bd_addr.ToString().c_str(), 112 num_properties, properties); 113 } 114 }; 115 116 using callback_function_t = void (*)(callback_data_t*); 117 118 void headless_add_callback(const std::string interface_name, 119 callback_function_t function); 120 void headless_remove_callback(const std::string interface_name, 121 callback_function_t function); 122