1a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan//
2a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// Copyright (C) 2016 The Android Open Source Project
3a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan//
4a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// Licensed under the Apache License, Version 2.0 (the "License");
5a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// you may not use this file except in compliance with the License.
6a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// You may obtain a copy of the License at
7a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan//
8a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan//      http://www.apache.org/licenses/LICENSE-2.0
9a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan//
10a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// Unless required by applicable law or agreed to in writing, software
11a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// distributed under the License is distributed on an "AS IS" BASIS,
12a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// See the License for the specific language governing permissions and
14a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// limitations under the License.
15a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan//
16a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
17a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include "shill/binder/manager_binder_adaptor.h"
18a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
19a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <binder/Status.h>
20b857a0f3b0cab7f2ba61fd9ac2235555c7098243Samuel Tan#include <binderwrapper/binder_wrapper.h>
21a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <utils/String16.h>
22b857a0f3b0cab7f2ba61fd9ac2235555c7098243Samuel Tan#include <utils/String8.h>
23a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
24a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include "shill/logging.h"
25a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include "shill/manager.h"
26a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
27a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanusing android::binder::Status;
28b857a0f3b0cab7f2ba61fd9ac2235555c7098243Samuel Tanusing android::BinderWrapper;
29a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanusing android::IBinder;
30a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanusing android::sp;
31a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanusing android::String16;
32b857a0f3b0cab7f2ba61fd9ac2235555c7098243Samuel Tanusing android::String8;
33a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanusing android::system::connectivity::shill::IPropertyChangedCallback;
34a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanusing std::string;
35a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanusing std::vector;
36a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
37a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace shill {
38a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
39a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace Logging {
40a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanstatic auto kModuleLogScope = ScopeLogger::kBinder;
41a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanstatic string ObjectID(ManagerBinderAdaptor* m) {
42a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return "Manager binder adaptor (id " + m->GetRpcIdentifier() + ")";
43a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
44a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}  // namespace Logging
45a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
46a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanManagerBinderAdaptor::ManagerBinderAdaptor(Manager* manager,
47a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                                           const std::string& id)
48a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan    : BinderAdaptor(id), manager_(manager) {}
49a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
50a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanManagerBinderAdaptor::~ManagerBinderAdaptor() { manager_ = nullptr; }
51a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
52a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanvoid ManagerBinderAdaptor::RegisterAsync(
53a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan    const base::Callback<void(bool)>& /*completion_callback*/) {
54a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // Registration is performed synchronously in Binder.
55b857a0f3b0cab7f2ba61fd9ac2235555c7098243Samuel Tan  BinderWrapper::Get()->RegisterService(
56b857a0f3b0cab7f2ba61fd9ac2235555c7098243Samuel Tan      String8(getInterfaceDescriptor()).string(), this);
57a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
58a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
59a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanvoid ManagerBinderAdaptor::EmitBoolChanged(const string& name, bool /*value*/) {
60a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SLOG(this, 2) << __func__ << ": " << name;
61a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SendPropertyChangedSignal(name);
62a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
63a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
64a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanvoid ManagerBinderAdaptor::EmitUintChanged(const string& name,
65a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                                           uint32_t /*value*/) {
66a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SLOG(this, 2) << __func__ << ": " << name;
67a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SendPropertyChangedSignal(name);
68a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
69a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
70a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanvoid ManagerBinderAdaptor::EmitIntChanged(const string& name, int /*value*/) {
71a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SLOG(this, 2) << __func__ << ": " << name;
72a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SendPropertyChangedSignal(name);
73a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
74a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
75a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanvoid ManagerBinderAdaptor::EmitStringChanged(const string& name,
76a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                                             const string& /*value*/) {
77a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SLOG(this, 2) << __func__ << ": " << name;
78a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SendPropertyChangedSignal(name);
79a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
80a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
81a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanvoid ManagerBinderAdaptor::EmitStringsChanged(const string& name,
82a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                                              const vector<string>& /*value*/) {
83a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SLOG(this, 2) << __func__ << ": " << name;
84a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SendPropertyChangedSignal(name);
85a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
86a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
87a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanvoid ManagerBinderAdaptor::EmitRpcIdentifierChanged(const string& name,
88a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                                                    const string& /*value*/) {
89a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SLOG(this, 2) << __func__ << ": " << name;
90a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SendPropertyChangedSignal(name);
91a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
92a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
93a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanvoid ManagerBinderAdaptor::EmitRpcIdentifierArrayChanged(
94a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan    const string& name, const vector<string>& /*value*/) {
95a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SLOG(this, 2) << __func__ << ": " << name;
96a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  SendPropertyChangedSignal(name);
97a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
98a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
99a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanStatus ManagerBinderAdaptor::SetupApModeInterface(String16* _aidl_return) {
100a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // STUB IMPLEMENTATION.
101a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return Status::ok();
102a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
103a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
104a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanStatus ManagerBinderAdaptor::SetupStationModeInterface(String16* _aidl_return) {
105a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // STUB IMPLEMENTATION.
106a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // TODO(samueltan): replace this with proper implementation.
107a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return Status::ok();
108a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
109a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
110a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanStatus ManagerBinderAdaptor::ClaimInterface(const String16& claimer_name,
111a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                                            const String16& interface_name) {
112a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // STUB IMPLEMENTATION.
113a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // TODO(samueltan): replace this with proper implementation.
114a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return Status::ok();
115a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
116a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
117a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanStatus ManagerBinderAdaptor::ReleaseInterface(const String16& claimer_name,
118a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                                              const String16& interface_name) {
119a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // STUB IMPLEMENTATION.
120a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // TODO(samueltan): replace this with proper implementation.
121a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return Status::ok();
122a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
123a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
124a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanStatus ManagerBinderAdaptor::ConfigureService(
125a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan    const android::os::PersistableBundle& properties,
126a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan    sp<IBinder>* _aidl_return) {
127a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // STUB IMPLEMENTATION.
128a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // TODO(samueltan): replace this with proper implementation.
129a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return Status::ok();
130a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
131a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
132a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanStatus ManagerBinderAdaptor::RequestScan(int32_t type) {
133a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // STUB IMPLEMENTATION.
134a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // TODO(samueltan): replace this with proper implementation.
135a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return Status::ok();
136a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
137a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
138a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanStatus ManagerBinderAdaptor::GetDevices(vector<sp<IBinder>>* _aidl_return) {
139a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // STUB IMPLEMENTATION.
140a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // TODO(samueltan): replace this with proper implementation.
141a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return Status::ok();
142a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
143a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
144a04c6448da585d8bef65b8bbd44711fd7882c917Samuel TanStatus ManagerBinderAdaptor::RegisterPropertyChangedSignalHandler(
145a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan    const sp<IPropertyChangedCallback>& callback) {
146a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  AddPropertyChangedSignalHandler(callback);
147a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  return Status::ok();
148a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}
149a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
150a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}  // namespace shill
151