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#ifndef SHILL_BINDER_MANAGER_BINDER_ADAPTOR_H_
18a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#define SHILL_BINDER_MANAGER_BINDER_ADAPTOR_H_
19a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
20a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <string>
21a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <vector>
22a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
23a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <base/macros.h>
24a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include <utils/StrongPointer.h>
25a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
26a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include "android/system/connectivity/shill/BnManager.h"
27a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include "shill/adaptor_interfaces.h"
28a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#include "shill/binder/binder_adaptor.h"
29a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
30a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace android {
31a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanclass String16;
32a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace binder {
33a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanclass Status;
34a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}  // namespace binder
35a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace system {
36a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace connectivity {
37a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace shill {
38a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanclass IPropertyChangedCallback;
39a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}  // namespace shill
40a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}  // namespace connectivity
41a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}  // namespace system
42a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}  // namespace android
43a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
44a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tannamespace shill {
45a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
46a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanclass Manager;
47a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
48a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// Subclass of BinderAdaptor for Manager objects
49a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// There is a 1:1 mapping between Manager and ManagerBinderAdaptor
50a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// instances.  Furthermore, the Manager owns the ManagerBinderAdaptor
51a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// and manages its lifetime, so we're OK with ManagerBinderAdaptor
52a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan// having a bare pointer to its owner manager.
53a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tanclass ManagerBinderAdaptor
54a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan    : public android::system::connectivity::shill::BnManager,
55a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      public BinderAdaptor,
56a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      public ManagerAdaptorInterface {
57a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan public:
58a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  ManagerBinderAdaptor(Manager* manager, const std::string& id);
59a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  ~ManagerBinderAdaptor() override;
60a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
61a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // Implementation of ManagerAdaptorInterface.
62a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  void RegisterAsync(
63a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const base::Callback<void(bool)>& completion_callback) override;
64a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  const std::string& GetRpcIdentifier() override { return id(); }
65a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  void EmitBoolChanged(const std::string& name, bool value) override;
66a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  void EmitUintChanged(const std::string& name, uint32_t value) override;
67a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  void EmitIntChanged(const std::string& name, int value) override;
68a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  void EmitStringChanged(const std::string& name,
69a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                         const std::string& value) override;
70a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  void EmitStringsChanged(const std::string& name,
71a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan                          const std::vector<std::string>& value) override;
72a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  void EmitRpcIdentifierChanged(
73a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const std::string& name, const std::string& value) override;
74a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  void EmitRpcIdentifierArrayChanged(
75a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const std::string& name, const std::vector<std::string>& value) override;
76a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
77a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  // Implementation of BnManager.
78a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  android::binder::Status SetupApModeInterface(android::String16* _aidl_return);
79a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  android::binder::Status SetupStationModeInterface(
80a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      android::String16* _aidl_return);
81a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  android::binder::Status ClaimInterface(
82a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const android::String16& claimer_name,
83a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const android::String16& interface_name);
84a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  android::binder::Status ReleaseInterface(
85a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const android::String16& claimer_name,
86a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const android::String16& interface_name);
87a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  android::binder::Status ConfigureService(
88a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const android::os::PersistableBundle& properties,
89a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      android::sp<android::IBinder>* _aidl_return);
90a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  android::binder::Status RequestScan(int32_t type);
91a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  android::binder::Status GetDevices(
92a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      ::std::vector<android::sp<android::IBinder>>* _aidl_return);
93a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  android::binder::Status RegisterPropertyChangedSignalHandler(
94a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan      const android::sp<
95a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan          android::system::connectivity::shill::IPropertyChangedCallback>&
96a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan          callback);
97a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
98a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan private:
99a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  Manager* manager_;
100a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
101a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan  DISALLOW_COPY_AND_ASSIGN(ManagerBinderAdaptor);
102a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan};
103a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
104a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan}  // namespace shill
105a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan
106a04c6448da585d8bef65b8bbd44711fd7882c917Samuel Tan#endif  // SHILL_BINDER_MANAGER_BINDER_ADAPTOR_H_
107