• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (C) 2015 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #ifndef SHILL_DBUS_CHROMEOS_MODEM_GSM_NETWORK_PROXY_H_
18 #define SHILL_DBUS_CHROMEOS_MODEM_GSM_NETWORK_PROXY_H_
19 
20 #include <string>
21 #include <tuple>
22 
23 #include "cellular/dbus-proxies.h"
24 #include "shill/cellular/modem_gsm_network_proxy_interface.h"
25 
26 namespace shill {
27 
28 // A proxy to (old) ModemManager.Modem.Gsm.Network.
29 class ChromeosModemGSMNetworkProxy : public ModemGSMNetworkProxyInterface {
30  public:
31   // Constructs a ModemManager.Modem.Gsm.Network DBus object proxy at |path|
32   // owned by |service|.
33   ChromeosModemGSMNetworkProxy(const scoped_refptr<dbus::Bus>& bus,
34                                const std::string& path,
35                                const std::string& service);
36   ~ChromeosModemGSMNetworkProxy() override;
37 
38   // Inherited from ModemGSMNetworkProxyInterface.
39   void GetRegistrationInfo(Error* error,
40                            const RegistrationInfoCallback& callback,
41                            int timeout) override;
42   void GetSignalQuality(Error* error,
43                         const SignalQualityCallback& callback,
44                         int timeout) override;
45   void Register(const std::string& network_id,
46                 Error* error,
47                 const ResultCallback& callback,
48                 int timeout) override;
49   void Scan(Error* error,
50             const ScanResultsCallback& callback,
51             int timeout) override;
52   uint32_t AccessTechnology() override;
53 
set_signal_quality_callback(const SignalQualitySignalCallback & callback)54   void set_signal_quality_callback(
55       const SignalQualitySignalCallback& callback) override {
56     signal_quality_callback_ = callback;
57   }
58 
set_network_mode_callback(const NetworkModeSignalCallback & callback)59   void set_network_mode_callback(
60       const NetworkModeSignalCallback& callback) override {
61     network_mode_callback_ = callback;
62   }
63 
set_registration_info_callback(const RegistrationInfoSignalCallback & callback)64   void set_registration_info_callback(
65       const RegistrationInfoSignalCallback& callback) override {
66     registration_info_callback_ = callback;
67   }
68 
69  private:
70   typedef std::tuple<uint32_t, std::string, std::string> GSMRegistrationInfo;
71 
72   class PropertySet : public dbus::PropertySet {
73    public:
74     PropertySet(dbus::ObjectProxy* object_proxy,
75                 const std::string& interface_name,
76                 const PropertyChangedCallback& callback);
77     brillo::dbus_utils::Property<uint32_t> access_technology;
78 
79    private:
80     DISALLOW_COPY_AND_ASSIGN(PropertySet);
81   };
82 
83   static const char kPropertyAccessTechnology[];
84 
85   // Signal handlers.
86   void SignalQuality(uint32_t quality);
87   void RegistrationInfo(uint32_t status,
88                         const std::string& operator_code,
89                         const std::string& operator_name);
90   void NetworkMode(uint32_t mode);
91 
92   // Callbacks for Register async call.
93   void OnRegisterSuccess(const ResultCallback& callback);
94   void OnRegisterFailure(const ResultCallback& callback,
95                          brillo::Error* dbus_error);
96 
97   // Callbacks for GetRegistrationInfo async call.
98   void OnGetRegistrationInfoSuccess(
99       const RegistrationInfoCallback& callback,
100       const GSMRegistrationInfo& info);
101   void OnGetRegistrationInfoFailure(
102       const RegistrationInfoCallback& callback, brillo::Error* dbus_error);
103 
104   // Callbacks for GetSignalQuality async call.
105   void OnGetSignalQualitySuccess(const SignalQualityCallback& callback,
106                                  uint32_t quality);
107   void OnGetSignalQualityFailure(const SignalQualityCallback& callback,
108                                  brillo::Error* dbus_error);
109 
110   // Callbacks for Scan async call.
111   void OnScanSuccess(const ScanResultsCallback& callback,
112                      const GSMScanResults& results);
113   void OnScanFailure(const ScanResultsCallback& callback,
114                      brillo::Error* dbus_error);
115 
116   // Called when signal is connected to the ObjectProxy.
117   void OnSignalConnected(const std::string& interface_name,
118                          const std::string& signal_name,
119                          bool success);
120 
121   // Callback invoked when the value of property |property_name| is changed.
122   void OnPropertyChanged(const std::string& property_name);
123 
124   SignalQualitySignalCallback signal_quality_callback_;
125   RegistrationInfoSignalCallback registration_info_callback_;
126   NetworkModeSignalCallback network_mode_callback_;
127 
128   std::unique_ptr<org::freedesktop::ModemManager::Modem::Gsm::NetworkProxy>
129       proxy_;
130   std::unique_ptr<PropertySet> properties_;
131 
132   base::WeakPtrFactory<ChromeosModemGSMNetworkProxy> weak_factory_{this};
133   DISALLOW_COPY_AND_ASSIGN(ChromeosModemGSMNetworkProxy);
134 };
135 
136 }  // namespace shill
137 
138 #endif  // SHILL_DBUS_CHROMEOS_MODEM_GSM_NETWORK_PROXY_H_
139