• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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