• 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 
16 #include "bluetooth_remote_device_observer_stub.h"
17 #include "bluetooth_bt_uuid.h"
18 #include "bluetooth_log.h"
19 #include "bluetooth_errorcode.h"
20 
21 namespace OHOS {
22 namespace Bluetooth {
23 constexpr uint16_t UUID_SIZE_MAX = 1024;
24 
BluetoothRemoteDeviceObserverstub()25 BluetoothRemoteDeviceObserverstub::BluetoothRemoteDeviceObserverstub()
26 {
27     HILOGD("start.");
28     memberFuncMap_[static_cast<uint32_t>(
29         BluetoothRemoteDeviceObserverInterfaceCode::BT_REMOTE_DEVICE_OBSERVER_ACL_STATE)] =
30         BluetoothRemoteDeviceObserverstub::OnAclStateChangedInner;
31     memberFuncMap_[static_cast<uint32_t>(
32         BluetoothRemoteDeviceObserverInterfaceCode::BT_REMOTE_DEVICE_OBSERVER_PAIR_STATUS)] =
33         BluetoothRemoteDeviceObserverstub::OnPairStatusChangedInner;
34     memberFuncMap_[static_cast<uint32_t>(
35         BluetoothRemoteDeviceObserverInterfaceCode::BT_REMOTE_DEVICE_OBSERVER_REMOTE_UUID)] =
36         BluetoothRemoteDeviceObserverstub::OnRemoteNameUuidChangedInner;
37     memberFuncMap_[static_cast<uint32_t>(
38         BluetoothRemoteDeviceObserverInterfaceCode::BT_REMOTE_DEVICE_OBSERVER_REMOTE_NAME)] =
39         BluetoothRemoteDeviceObserverstub::OnRemoteNameChangedInner;
40     memberFuncMap_[static_cast<uint32_t>(
41         BluetoothRemoteDeviceObserverInterfaceCode::BT_REMOTE_DEVICE_OBSERVER_REMOTE_ALIAS)] =
42         BluetoothRemoteDeviceObserverstub::OnRemoteAliasChangedInner;
43     memberFuncMap_[static_cast<uint32_t>(
44         BluetoothRemoteDeviceObserverInterfaceCode::BT_REMOTE_DEVICE_OBSERVER_REMOTE_COD)] =
45         BluetoothRemoteDeviceObserverstub::OnRemoteCodChangedInner;
46     memberFuncMap_[static_cast<uint32_t>(
47         BluetoothRemoteDeviceObserverInterfaceCode::BT_REMOTE_DEVICE_OBSERVER_REMOTE_BATTERY_LEVEL)] =
48         BluetoothRemoteDeviceObserverstub::OnRemoteBatteryChangedInner;
49     memberFuncMap_[static_cast<uint32_t>(
50         BluetoothRemoteDeviceObserverInterfaceCode::BT_REMOTE_DEVICE_OBSERVER_REMOTE_BATTERY_INFO_REPORT)] =
51         BluetoothRemoteDeviceObserverstub::OnRemoteDeviceCommonInfoReportInner;
52 }
53 
~BluetoothRemoteDeviceObserverstub()54 BluetoothRemoteDeviceObserverstub::~BluetoothRemoteDeviceObserverstub()
55 {
56     HILOGD("start.");
57     memberFuncMap_.clear();
58 }
59 
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)60 int BluetoothRemoteDeviceObserverstub::OnRemoteRequest(
61     uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
62 {
63     HILOGD("OnRemoteRequest, cmd = %{public}d, flags= %{public}d", code, option.GetFlags());
64     if (BluetoothRemoteDeviceObserverstub::GetDescriptor() != data.ReadInterfaceToken()) {
65         HILOGE("BluetoothHostStub::OnRemoteRequest, local descriptor is not equal to remote");
66         return ERR_INVALID_STATE;
67     }
68     auto itFunc = memberFuncMap_.find(code);
69     if (itFunc != memberFuncMap_.end()) {
70         auto memberFunc = itFunc->second;
71         if (memberFunc != nullptr) {
72             return memberFunc(this, data, reply);
73         }
74     }
75     return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
76 }
77 
OnAclStateChangedInner(BluetoothRemoteDeviceObserverstub * stub,MessageParcel & data,MessageParcel & reply)78 int32_t BluetoothRemoteDeviceObserverstub::OnAclStateChangedInner(BluetoothRemoteDeviceObserverstub *stub,
79     MessageParcel &data, MessageParcel &reply)
80 {
81     std::shared_ptr<BluetoothRawAddress> result(data.ReadParcelable<BluetoothRawAddress>());
82     if (!result) {
83         return TRANSACTION_ERR;
84     }
85     int32_t state = data.ReadInt32();
86     uint32_t reason = data.ReadUint32();
87     stub->OnAclStateChanged(*result, state, reason);
88     return NO_ERROR;
89 }
90 
OnPairStatusChangedInner(BluetoothRemoteDeviceObserverstub * stub,MessageParcel & data,MessageParcel & reply)91 int32_t BluetoothRemoteDeviceObserverstub::OnPairStatusChangedInner(BluetoothRemoteDeviceObserverstub *stub,
92     MessageParcel &data, MessageParcel &reply)
93 {
94     int32_t transport = data.ReadInt32();
95     std::shared_ptr<BluetoothRawAddress> result(data.ReadParcelable<BluetoothRawAddress>());
96     if (!result) {
97         return TRANSACTION_ERR;
98     }
99     int32_t status = data.ReadInt32();
100     int32_t cause = data.ReadInt32();
101     stub->OnPairStatusChanged(transport, *result, status, cause);
102     return NO_ERROR;
103 }
104 
OnRemoteNameUuidChangedInner(BluetoothRemoteDeviceObserverstub * stub,MessageParcel & data,MessageParcel & reply)105 int32_t BluetoothRemoteDeviceObserverstub::OnRemoteNameUuidChangedInner(BluetoothRemoteDeviceObserverstub *stub,
106     MessageParcel &data, MessageParcel &reply)
107 {
108     std::shared_ptr<BluetoothRawAddress> result(data.ReadParcelable<BluetoothRawAddress>());
109     if (!result) {
110         return TRANSACTION_ERR;
111     }
112     uint16_t uuidSize = data.ReadUint16();
113     if (uuidSize > UUID_SIZE_MAX) {
114         HILOGE("uuidSize = %{public}hu exceeds the maximum 1024.", uuidSize);
115         return INVALID_DATA;
116     }
117     std::vector<bluetooth::Uuid> uuids;
118     for (uint16_t i = 0; i < uuidSize; ++i) {
119         std::shared_ptr<BluetoothUuid> uuid(data.ReadParcelable<BluetoothUuid>());
120         if (!uuid) {
121             return TRANSACTION_ERR;
122         }
123         uuids.push_back(*uuid);
124     }
125     stub->OnRemoteUuidChanged(*result, uuids);
126     return NO_ERROR;
127 }
128 
OnRemoteNameChangedInner(BluetoothRemoteDeviceObserverstub * stub,MessageParcel & data,MessageParcel & reply)129 int32_t BluetoothRemoteDeviceObserverstub::OnRemoteNameChangedInner(BluetoothRemoteDeviceObserverstub *stub,
130     MessageParcel &data, MessageParcel &reply)
131 {
132     std::shared_ptr<BluetoothRawAddress> result(data.ReadParcelable<BluetoothRawAddress>());
133     if (!result) {
134         return TRANSACTION_ERR;
135     }
136     std::string deviceName = data.ReadString();
137     stub->OnRemoteNameChanged(*result, deviceName);
138     return NO_ERROR;
139 }
140 
OnRemoteAliasChangedInner(BluetoothRemoteDeviceObserverstub * stub,MessageParcel & data,MessageParcel & reply)141 int32_t BluetoothRemoteDeviceObserverstub::OnRemoteAliasChangedInner(BluetoothRemoteDeviceObserverstub *stub,
142     MessageParcel &data, MessageParcel &reply)
143 {
144     std::shared_ptr<BluetoothRawAddress> result(data.ReadParcelable<BluetoothRawAddress>());
145     if (!result) {
146         return TRANSACTION_ERR;
147     }
148     std::string alias = data.ReadString();
149     stub->OnRemoteAliasChanged(*result, alias);
150     return NO_ERROR;
151 }
152 
OnRemoteCodChangedInner(BluetoothRemoteDeviceObserverstub * stub,MessageParcel & data,MessageParcel & reply)153 int32_t BluetoothRemoteDeviceObserverstub::OnRemoteCodChangedInner(BluetoothRemoteDeviceObserverstub *stub,
154     MessageParcel &data, MessageParcel &reply)
155 {
156     std::shared_ptr<BluetoothRawAddress> result(data.ReadParcelable<BluetoothRawAddress>());
157     if (!result) {
158         return TRANSACTION_ERR;
159     }
160     int32_t cod = data.ReadInt32();
161     stub->OnRemoteCodChanged(*result, cod);
162     return NO_ERROR;
163 }
164 
OnRemoteBatteryChangedInner(BluetoothRemoteDeviceObserverstub * stub,MessageParcel & data,MessageParcel & reply)165 int32_t BluetoothRemoteDeviceObserverstub::OnRemoteBatteryChangedInner(BluetoothRemoteDeviceObserverstub *stub,
166     MessageParcel &data, MessageParcel &reply)
167 {
168     std::shared_ptr<BluetoothRawAddress> device(data.ReadParcelable<BluetoothRawAddress>());
169     CHECK_AND_RETURN_LOG_RET((device != nullptr), BT_ERR_INTERNAL_ERROR, "Read device error");
170     std::shared_ptr<BluetoothBatteryInfo> batteryInfo(data.ReadParcelable<BluetoothBatteryInfo>());
171     CHECK_AND_RETURN_LOG_RET((batteryInfo != nullptr), BT_ERR_INTERNAL_ERROR, "Read batteryInfo error");
172 
173     stub->OnRemoteBatteryChanged(*device, *batteryInfo);
174     return BT_NO_ERROR;
175 }
176 
OnRemoteDeviceCommonInfoReportInner(BluetoothRemoteDeviceObserverstub * stub,MessageParcel & data,MessageParcel & reply)177 int32_t BluetoothRemoteDeviceObserverstub::OnRemoteDeviceCommonInfoReportInner(BluetoothRemoteDeviceObserverstub *stub,
178     MessageParcel &data,
179     MessageParcel &reply)
180 {
181     std::shared_ptr<BluetoothRawAddress> device(data.ReadParcelable<BluetoothRawAddress>());
182     CHECK_AND_RETURN_LOG_RET((device != nullptr), BT_ERR_INTERNAL_ERROR, "Read device error");
183     std::vector<uint8_t> dataValue;
184     CHECK_AND_RETURN_LOG_RET(data.ReadUInt8Vector(&dataValue), BT_ERR_INTERNAL_ERROR, "Read dataValue error");
185 
186     stub->OnRemoteDeviceCommonInfoReport(*device, dataValue);
187     return NO_ERROR;
188 }
189 }  // namespace Bluetooth
190 }  // namespace OHOS