Home | History | Annotate | Download | only in dbus
      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 
     54   void set_signal_quality_callback(
     55       const SignalQualitySignalCallback& callback) override {
     56     signal_quality_callback_ = callback;
     57   }
     58 
     59   void set_network_mode_callback(
     60       const NetworkModeSignalCallback& callback) override {
     61     network_mode_callback_ = callback;
     62   }
     63 
     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