• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef LOG_TAG
16 #define LOG_TAG "bt_ipc_host_observer_stub"
17 #endif
18 
19 #include "bluetooth_host_observer_stub.h"
20 #include "bluetooth_log.h"
21 
22 namespace OHOS {
23 namespace Bluetooth {
BluetoothHostObserverStub()24 BluetoothHostObserverStub::BluetoothHostObserverStub()
25 {
26     HILOGD("enter");
27     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_STATE_CHANGE)] =
28         BluetoothHostObserverStub::OnStateChangedInner;
29     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_DISCOVERY_STATE_CHANGE)] =
30         BluetoothHostObserverStub::OnDiscoveryStateChangedInner;
31     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_DISCOVERY_RESULT)] =
32         BluetoothHostObserverStub::OnDiscoveryResultInner;
33     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_PAIR_REQUESTED)] =
34         BluetoothHostObserverStub::OnPairRequestedInner;
35     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_PAIR_CONFIRMED)] =
36         BluetoothHostObserverStub::OnPairConfirmedInner;
37     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_SCAN_MODE_CHANGED)] =
38         BluetoothHostObserverStub::OnScanModeChangedInner;
39     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_DEVICE_NAME_CHANGED)] =
40         BluetoothHostObserverStub::OnDeviceNameChangedInner;
41     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_DEVICE_ADDR_CHANGED)] =
42         BluetoothHostObserverStub::OnDeviceAddrChangedInner;
43     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_STATE_CHANGE_V2)] =
44         BluetoothHostObserverStub::OnBluetoothStateChangedInner;
45     memberFuncMap_[static_cast<uint32_t>(BluetoothHostObserverInterfaceCode::BT_HOST_OBSERVER_REFUSE_POLICY_CHANGE)] =
46         BluetoothHostObserverStub::OnBluetoothRefusePolicyChangedInner;
47 }
48 
~BluetoothHostObserverStub()49 BluetoothHostObserverStub::~BluetoothHostObserverStub()
50 {
51     HILOGD("enter");
52     memberFuncMap_.clear();
53 }
54 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)55 int32_t BluetoothHostObserverStub::OnRemoteRequest(
56     uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
57 {
58     HILOGD("transaction of code: %{public}d is received", code);
59     if (BluetoothHostObserverStub::GetDescriptor() != data.ReadInterfaceToken()) {
60         HILOGE("BluetoothHostObserverStub::OnRemoteRequest, local descriptor is not equal to remote");
61         return ERR_INVALID_STATE;
62     }
63 
64     auto itFunc = memberFuncMap_.find(code);
65     if (itFunc != memberFuncMap_.end()) {
66         auto memberFunc = itFunc->second;
67         if (memberFunc != nullptr) {
68             return memberFunc(this, data, reply);
69         }
70     }
71 
72     HILOGW("OnRemoteRequest, default case, need check.");
73     return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
74 }
75 
OnStateChangedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)76 int32_t BluetoothHostObserverStub::OnStateChangedInner(BluetoothHostObserverStub *stub,
77     MessageParcel &data, MessageParcel &reply)
78 {
79     int32_t transport = data.ReadInt32();
80     int32_t status = data.ReadInt32();
81 
82     HILOGD("OnStateChangedInner starts");
83     stub->OnStateChanged(transport, status);
84 
85     return NO_ERROR;
86 }
87 
88 // ON_DIS_STA_CHANGE_CODE
OnDiscoveryStateChangedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)89 int32_t BluetoothHostObserverStub::OnDiscoveryStateChangedInner(BluetoothHostObserverStub *stub,
90     MessageParcel &data, MessageParcel &reply)
91 {
92     int32_t status = data.ReadInt32();
93 
94     HILOGD("OnDiscoveryStateChangedInner starts");
95     stub->OnDiscoveryStateChanged(status);
96 
97     return NO_ERROR;
98 }
99 
OnDiscoveryResultInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)100 int32_t BluetoothHostObserverStub::OnDiscoveryResultInner(BluetoothHostObserverStub *stub,
101     MessageParcel &data, MessageParcel &reply)
102 {
103     std::shared_ptr<BluetoothRawAddress> device(data.ReadParcelable<BluetoothRawAddress>());
104     if (!device) {
105         return TRANSACTION_ERR;
106     }
107 
108     int32_t rssi = data.ReadInt32();
109     std::string deviceName = data.ReadString();
110     int32_t deviceClass = data.ReadInt32();
111     HILOGD("OnDiscoveryResultInner starts");
112     stub->OnDiscoveryResult(*device, rssi, deviceName, deviceClass);
113 
114     return NO_ERROR;
115 }
116 
OnPairRequestedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)117 int32_t BluetoothHostObserverStub::OnPairRequestedInner(BluetoothHostObserverStub *stub,
118     MessageParcel &data, MessageParcel &reply)
119 {
120     int32_t transport = data.ReadInt32();
121     std::shared_ptr<BluetoothRawAddress> device(data.ReadParcelable<BluetoothRawAddress>());
122     if (!device) {
123         return TRANSACTION_ERR;
124     }
125 
126     HILOGI("OnPairRequestedInner starts");
127     stub->OnPairRequested(transport, *device);
128 
129     return NO_ERROR;
130 }
131 
OnPairConfirmedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)132 int32_t BluetoothHostObserverStub::OnPairConfirmedInner(BluetoothHostObserverStub *stub,
133     MessageParcel &data, MessageParcel &reply)
134 {
135     int32_t transport = data.ReadInt32();
136     std::shared_ptr<BluetoothRawAddress> device(data.ReadParcelable<BluetoothRawAddress>());
137     if (!device) {
138         return TRANSACTION_ERR;
139     }
140     int32_t reqType = data.ReadInt32();
141     int32_t number = data.ReadInt32();
142 
143     HILOGD("OnPairConfirmedInner starts");
144     stub->OnPairConfirmed(transport, *device, reqType, number);
145 
146     return NO_ERROR;
147 }
148 
OnScanModeChangedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)149 int32_t BluetoothHostObserverStub::OnScanModeChangedInner(BluetoothHostObserverStub *stub,
150     MessageParcel &data, MessageParcel &reply)
151 {
152     int32_t mode = data.ReadInt32();
153 
154     HILOGI("OnScanModeChangedInner starts");
155     stub->OnScanModeChanged(mode);
156 
157     return NO_ERROR;
158 }
159 
OnDeviceNameChangedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)160 int32_t BluetoothHostObserverStub::OnDeviceNameChangedInner(BluetoothHostObserverStub *stub,
161     MessageParcel &data, MessageParcel &reply)
162 {
163     std::string deviceName = data.ReadString();
164 
165     HILOGI("OnDeviceNameChangedInner starts");
166     stub->OnDeviceNameChanged(deviceName);
167 
168     return NO_ERROR;
169 }
170 
OnDeviceAddrChangedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)171 int32_t BluetoothHostObserverStub::OnDeviceAddrChangedInner(BluetoothHostObserverStub *stub,
172     MessageParcel &data, MessageParcel &reply)
173 {
174     std::string address = data.ReadString();
175 
176     HILOGI("OnDeviceAddrChangedInner starts");
177     stub->OnDeviceAddrChanged(address);
178 
179     return NO_ERROR;
180 }
181 
OnBluetoothStateChangedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)182 int32_t BluetoothHostObserverStub::OnBluetoothStateChangedInner(BluetoothHostObserverStub *stub,
183     MessageParcel &data, MessageParcel &reply)
184 {
185     int32_t state = data.ReadInt32();
186     stub->OnBluetoothStateChanged(state);
187     return NO_ERROR;
188 }
189 
OnBluetoothRefusePolicyChangedInner(BluetoothHostObserverStub * stub,MessageParcel & data,MessageParcel & reply)190 int32_t BluetoothHostObserverStub::OnBluetoothRefusePolicyChangedInner(
191     BluetoothHostObserverStub *stub, MessageParcel &data, MessageParcel &reply)
192 {
193     int32_t pid = data.ReadInt32();
194     int64_t time = data.ReadInt64();
195     stub->OnRefusePolicyChanged(pid, time);
196     return NO_ERROR;
197 }
198 }  // namespace Bluetooth
199 }  // namespace OHOS
200