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_a2dp_src_observer_proxy.h"
17 #include "bluetooth_log.h"
18
19 namespace OHOS {
20 namespace Bluetooth {
OnConnectionStateChanged(const RawAddress & device,int state,int cause)21 void BluetoothA2dpSrcObserverProxy::OnConnectionStateChanged(const RawAddress &device, int state, int cause)
22 {
23 MessageParcel data;
24 if (!data.WriteInterfaceToken(BluetoothA2dpSrcObserverProxy::GetDescriptor())) {
25 HILOGE("BluetoothA2dpSrcObserverProxy::OnConnectionStateChanged WriteInterfaceToken error");
26 return;
27 }
28 if (!data.WriteString(device.GetAddress())) {
29 HILOGE("BluetoothA2dpSrcObserverProxy::OnConnectionStateChanged write device error");
30 return;
31 }
32 if (!data.WriteInt32(state)) {
33 HILOGE("BluetoothA2dpSrcObserverProxy::OnConnectionStateChanged state error");
34 return;
35 }
36 if (!data.WriteInt32(cause)) {
37 HILOGE("BluetoothA2dpSrcObserverProxy::OnConnectionStateChanged cause error");
38 return;
39 }
40
41 MessageParcel reply;
42 MessageOption option {
43 MessageOption::TF_ASYNC
44 };
45
46 ErrCode result = InnerTransact(BT_A2DP_SRC_OBSERVER_CONNECTION_STATE_CHANGED, option, data, reply);
47 if (result != NO_ERROR) {
48 HILOGE("BluetoothA2dpSrcObserverProxy::OnConnectionStateChanged done fail, error: %{public}d", result);
49 return;
50 }
51 }
52
OnPlayingStatusChanged(const RawAddress & device,int playingState,int error)53 void BluetoothA2dpSrcObserverProxy::OnPlayingStatusChanged(const RawAddress &device, int playingState, int error)
54 {
55 MessageParcel data;
56 if (!data.WriteInterfaceToken(BluetoothA2dpSrcObserverProxy::GetDescriptor())) {
57 HILOGE("BluetoothA2dpSrcObserverProxy::OnPlayingStatusChanged WriteInterfaceToken error");
58 return;
59 }
60 if (!data.WriteString(device.GetAddress())) {
61 HILOGE("BluetoothA2dpSrcObserverProxy::OnPlayingStatusChanged write device error");
62 return;
63 }
64 if (!data.WriteInt32(playingState)) {
65 HILOGE("BluetoothA2dpSrcObserverProxy::OnPlayingStatusChanged playingState error");
66 return;
67 }
68
69 if (!data.WriteInt32(error)) {
70 HILOGE("BluetoothA2dpSrcObserverProxy::OnPlayingStatusChanged error error");
71 return;
72 }
73
74 MessageParcel reply;
75 MessageOption option {
76 MessageOption::TF_ASYNC
77 };
78
79 ErrCode result = InnerTransact(BT_A2DP_SRC_OBSERVER_PLAYING_STATUS_CHANGED, option, data, reply);
80 if (result != NO_ERROR) {
81 HILOGE("BluetoothA2dpSrcObserverProxy::OnPlayingStatusChanged done fail, error: %{public}d", result);
82 return;
83 }
84 }
85
OnConfigurationChanged(const RawAddress & device,const BluetoothA2dpCodecInfo & info,int error)86 void BluetoothA2dpSrcObserverProxy::OnConfigurationChanged(
87 const RawAddress &device, const BluetoothA2dpCodecInfo &info, int error)
88 {
89 MessageParcel data;
90 if (!data.WriteInterfaceToken(BluetoothA2dpSrcObserverProxy::GetDescriptor())) {
91 HILOGE("BluetoothA2dpSrcObserverProxy::OnConfigurationChanged WriteInterfaceToken error");
92 return;
93 }
94 if (!data.WriteString(device.GetAddress())) {
95 HILOGE("BluetoothA2dpSrcObserverProxy::OnConfigurationChanged write device error");
96 return;
97 }
98 if (!data.WriteParcelable(&info)) {
99 HILOGE("BluetoothA2dpSrcObserverProxy::OnConfigurationChanged transport error");
100 return;
101 }
102 if (!data.WriteInt32(error)) {
103 HILOGE("BluetoothA2dpSrcObserverProxy::OnConfigurationChanged error error");
104 return;
105 }
106
107 MessageParcel reply;
108 MessageOption option {
109 MessageOption::TF_ASYNC
110 };
111
112 ErrCode result = InnerTransact(BT_A2DP_SRC_OBSERVER_CONFIGURATION_CHANGED, option, data, reply);
113 if (result != NO_ERROR) {
114 HILOGE("BluetoothA2dpSrcObserverProxy::OnConfigurationChanged done fail, error: %{public}d", result);
115 return;
116 }
117 }
118
OnMediaStackChanged(const RawAddress & device,int action)119 void BluetoothA2dpSrcObserverProxy::OnMediaStackChanged(
120 const RawAddress &device, int action)
121 {
122 MessageParcel data;
123 if (!data.WriteInterfaceToken(BluetoothA2dpSrcObserverProxy::GetDescriptor())) {
124 HILOGE("BluetoothA2dpSrcObserverProxy::OnMediaStackChanged WriteInterfaceToken error");
125 return;
126 }
127 if (!data.WriteString(device.GetAddress())) {
128 HILOGE("BluetoothA2dpSrcObserverProxy::OnMediaStackChanged write device error");
129 return;
130 }
131 if (!data.WriteInt32(action)) {
132 HILOGE("BluetoothA2dpSrcObserverProxy::OnMediaStackChanged error error");
133 return;
134 }
135
136 MessageParcel reply;
137 MessageOption option {
138 MessageOption::TF_ASYNC
139 };
140
141 ErrCode result = InnerTransact(BT_A2DP_SRC_OBSERVER_MEDIASTACK_CHANGED, option, data, reply);
142 if (result != NO_ERROR) {
143 HILOGE("BluetoothA2dpSrcObserverProxy::OnMediaStackChanged done fail, error: %{public}d", result);
144 return;
145 }
146 }
147
InnerTransact(uint32_t code,MessageOption & flags,MessageParcel & data,MessageParcel & reply)148 ErrCode BluetoothA2dpSrcObserverProxy::InnerTransact(
149 uint32_t code, MessageOption &flags, MessageParcel &data, MessageParcel &reply)
150 {
151 auto remote = Remote();
152 if (remote == nullptr) {
153 HILOGE("[InnerTransact] fail: get Remote fail code %{public}d", code);
154 return ERR_DEAD_OBJECT;
155 }
156 int err = remote->SendRequest(code, data, reply, flags);
157 switch (err) {
158 case NO_ERROR: {
159 return ERR_OK;
160 }
161 case DEAD_OBJECT: {
162 HILOGE("[InnerTransact] fail: ipcErr=%{public}d code %{public}d", err, code);
163 return ERR_DEAD_OBJECT;
164 }
165 default: {
166 HILOGE("[InnerTransact] fail: ipcErr=%{public}d code %{public}d", err, code);
167 return TRANSACTION_ERR;
168 }
169 }
170 }
171
OnVirtualDeviceChanged(int32_t action,std::string address)172 void BluetoothA2dpSrcObserverProxy::OnVirtualDeviceChanged(int32_t action, std::string address)
173 {
174 MessageParcel data;
175 if (!data.WriteInterfaceToken(BluetoothA2dpSrcObserverProxy::GetDescriptor())) {
176 HILOGE("BluetoothA2dpSrcObserverProxy::OnVirtualDeviceChanged WriteInterfaceToken error");
177 return;
178 }
179 if (!data.WriteInt32(action)) {
180 HILOGE("BluetoothA2dpSrcObserverProxy::OnVirtualDeviceChanged WriteInt32 error");
181 return;
182 }
183 if (!data.WriteString(address)) {
184 HILOGE("BluetoothA2dpSrcObserverProxy::OnVirtualDeviceChanged WriteString error");
185 return;
186 }
187 MessageParcel reply;
188 MessageOption option {
189 MessageOption::TF_ASYNC
190 };
191 ErrCode result = InnerTransact(BT_A2DP_SRC_OBSERVER_VIRTUALDEVICE_CHANGED, option, data, reply);
192 if (result != NO_ERROR) {
193 HILOGE("BluetoothA2dpSrcObserverProxy::OnVirtualDeviceChanged done fail, error: %{public}d", result);
194 return;
195 }
196 }
197 } // namespace Bluetooth
198 } // namespace OHOS