• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <cstdint>
20 #include <vector>
21 
22 #include "types/bluetooth/uuid.h"
23 #include "types/raw_address.h"
24 
25 namespace bluetooth {
26 namespace ras {
27 
28 enum class RasDisconnectReason {
29   GATT_DISCONNECT,
30   SERVER_NOT_AVAILABLE,
31   FATAL_ERROR,
32 };
33 
34 struct VendorSpecificCharacteristic {
35   bluetooth::Uuid characteristicUuid_;
36   std::vector<uint8_t> value_;
37   std::vector<uint8_t> reply_value_;
38 };
39 
40 class RasServerCallbacks {
41 public:
42   virtual ~RasServerCallbacks() = default;
43   virtual void OnVendorSpecificReply(
44           const RawAddress& address,
45           const std::vector<VendorSpecificCharacteristic>& vendor_specific_reply) = 0;
46   virtual void OnRasServerConnected(const RawAddress& identity_address) = 0;
47   virtual void OnMtuChangedFromServer(const RawAddress& address, uint16_t mtu) = 0;
48   virtual void OnRasServerDisconnected(const RawAddress& identity_address) = 0;
49 };
50 
51 class RasServer {
52 public:
53   virtual ~RasServer() = default;
54   virtual void Initialize() = 0;
55   virtual void RegisterCallbacks(RasServerCallbacks* callbacks) = 0;
56   virtual void SetVendorSpecificCharacteristic(
57           const std::vector<VendorSpecificCharacteristic>& vendor_specific_characteristics) = 0;
58   virtual void HandleVendorSpecificReplyComplete(RawAddress address, bool success) = 0;
59   virtual void PushProcedureData(RawAddress address, uint16_t procedure_count, bool is_last,
60                                  std::vector<uint8_t> data) = 0;
61 };
62 
63 RasServer* GetRasServer();
64 
65 class RasClientCallbacks {
66 public:
67   virtual ~RasClientCallbacks() = default;
68   virtual void OnConnected(
69           const RawAddress& address, uint16_t att_handle,
70           const std::vector<VendorSpecificCharacteristic>& vendor_specific_characteristics,
71           uint16_t conn_interval) = 0;
72   virtual void OnConnIntervalUpdated(const RawAddress& address, uint16_t conn_interval) = 0;
73   virtual void OnDisconnected(const RawAddress& address,
74                               const RasDisconnectReason& ras_disconnect_reason) = 0;
75   virtual void OnWriteVendorSpecificReplyComplete(const RawAddress& address, bool success) = 0;
76   virtual void OnRemoteData(const RawAddress& address, const std::vector<uint8_t>& data) = 0;
77   virtual void OnRemoteDataTimeout(const RawAddress& address) = 0;
78   virtual void OnMtuChangedFromClient(const RawAddress& address, uint16_t mtu) = 0;
79 };
80 
81 class RasClient {
82 public:
83   virtual ~RasClient() = default;
84   virtual void Initialize() = 0;
85   virtual void RegisterCallbacks(RasClientCallbacks* callbacks) = 0;
86   virtual void Connect(const RawAddress& address) = 0;
87   virtual void SendVendorSpecificReply(
88           const RawAddress& address,
89           const std::vector<VendorSpecificCharacteristic>& vendor_specific_data) = 0;
90 };
91 
92 RasClient* GetRasClient();
93 
94 }  // namespace ras
95 }  // namespace bluetooth
96