blob: c646ed5853ddeece4b19a3a3078fef4d8d358803 [file] [log] [blame]
Darin Petkovdaf43862011-10-27 11:37:28 +02001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SHILL_CELLULAR_CAPABILITY_GSM_
6#define SHILL_CELLULAR_CAPABILITY_GSM_
7
Darin Petkovcb547732011-11-09 13:55:26 +01008#include <base/memory/scoped_ptr.h>
Darin Petkovb05315f2011-11-07 10:14:25 +01009#include <base/task.h>
Darin Petkov1272a432011-11-10 15:53:37 +010010#include <gtest/gtest_prod.h> // for FRIEND_TEST
Darin Petkovb05315f2011-11-07 10:14:25 +010011
Darin Petkov1272a432011-11-10 15:53:37 +010012#include "shill/accessor_interface.h"
Darin Petkovdaf43862011-10-27 11:37:28 +020013#include "shill/cellular_capability.h"
Darin Petkovcb547732011-11-09 13:55:26 +010014#include "shill/modem_gsm_card_proxy_interface.h"
Darin Petkov1272a432011-11-10 15:53:37 +010015#include "shill/modem_gsm_network_proxy_interface.h"
Darin Petkovdaf43862011-10-27 11:37:28 +020016
17namespace shill {
18
Darin Petkovcb547732011-11-09 13:55:26 +010019class CellularCapabilityGSM : public CellularCapability,
Darin Petkov184c54e2011-11-15 12:44:39 +010020 public ModemGSMCardProxyDelegate,
21 public ModemGSMNetworkProxyDelegate {
Darin Petkovdaf43862011-10-27 11:37:28 +020022 public:
23 CellularCapabilityGSM(Cellular *cellular);
24
Darin Petkovb05315f2011-11-07 10:14:25 +010025 // Inherited from CellularCapability.
Darin Petkovdaf43862011-10-27 11:37:28 +020026 virtual void InitProxies();
Darin Petkovae0c64e2011-11-15 15:50:27 +010027 virtual void UpdateStatus(const DBusPropertiesMap &properties);
28 virtual void SetupConnectProperties(DBusPropertiesMap *properties);
Darin Petkov3e509242011-11-10 14:46:44 +010029 virtual void GetSignalQuality();
Darin Petkov184c54e2011-11-15 12:44:39 +010030 virtual void GetRegistrationState();
31 virtual void GetProperties();
32 virtual void Register();
33 virtual void RegisterOnNetwork(const std::string &network_id, Error *error);
Darin Petkovb05315f2011-11-07 10:14:25 +010034 virtual void RequirePIN(const std::string &pin, bool require, Error *error);
35 virtual void EnterPIN(const std::string &pin, Error *error);
36 virtual void UnblockPIN(const std::string &unblock_code,
37 const std::string &pin,
38 Error *error);
39 virtual void ChangePIN(const std::string &old_pin,
40 const std::string &new_pin,
41 Error *error);
Darin Petkov1272a432011-11-10 15:53:37 +010042 virtual void Scan(Error *error);
Darin Petkov20c13ec2011-11-09 15:07:15 +010043 virtual std::string GetNetworkTechnologyString() const;
44 virtual std::string GetRoamingStateString() const;
Darin Petkovae0c64e2011-11-15 15:50:27 +010045 virtual void OnModemManagerPropertiesChanged(
46 const DBusPropertiesMap &properties);
47 virtual void OnServiceCreated();
Darin Petkovdaf43862011-10-27 11:37:28 +020048
Darin Petkovcb547732011-11-09 13:55:26 +010049 // Obtains the IMEI, IMSI, SPN and MSISDN.
50 virtual void GetIdentifiers();
51
Darin Petkovae0c64e2011-11-15 15:50:27 +010052 const std::string &spn() const { return spn_; }
53
Darin Petkovdaf43862011-10-27 11:37:28 +020054 private:
Darin Petkovcb547732011-11-09 13:55:26 +010055 friend class CellularCapabilityGSMTest;
Darin Petkov1272a432011-11-10 15:53:37 +010056 FRIEND_TEST(CellularCapabilityGSMTest, ParseScanResult);
57 FRIEND_TEST(CellularCapabilityGSMTest, ParseScanResultProviderLookup);
Darin Petkov184c54e2011-11-15 12:44:39 +010058 FRIEND_TEST(CellularCapabilityGSMTest, RegisterOnNetwork);
Darin Petkov1272a432011-11-10 15:53:37 +010059 FRIEND_TEST(CellularCapabilityGSMTest, Scan);
Darin Petkovae0c64e2011-11-15 15:50:27 +010060 FRIEND_TEST(CellularCapabilityGSMTest, SetAccessTechnology);
61 FRIEND_TEST(CellularCapabilityGSMTest, UpdateOperatorInfo);
Darin Petkov1272a432011-11-10 15:53:37 +010062
63 static const char kNetworkPropertyAccessTechnology[];
64 static const char kNetworkPropertyID[];
65 static const char kNetworkPropertyLongName[];
66 static const char kNetworkPropertyShortName[];
67 static const char kNetworkPropertyStatus[];
Darin Petkovae0c64e2011-11-15 15:50:27 +010068 static const char kPhoneNumber[];
69 static const char kPropertyAccessTechnology[];
Darin Petkovcb547732011-11-09 13:55:26 +010070
Darin Petkov184c54e2011-11-15 12:44:39 +010071 void RegisterOnNetworkTask(const std::string &network_id);
Darin Petkovb05315f2011-11-07 10:14:25 +010072 void RequirePINTask(const std::string &pin, bool require);
73 void EnterPINTask(const std::string &pin);
74 void UnblockPINTask(const std::string &unblock_code, const std::string &pin);
75 void ChangePINTask(const std::string &old_pin, const std::string &new_pin);
Darin Petkov1272a432011-11-10 15:53:37 +010076 void ScanTask();
77
Darin Petkovae0c64e2011-11-15 15:50:27 +010078 void SetAccessTechnology(uint32 access_technology);
79
80 // Updates the GSM operator name and country based on a newly obtained network
81 // id.
82 void UpdateOperatorInfo();
83
84 // Updates the serving operator on the active service.
85 void UpdateServingOperator();
86
Darin Petkov1272a432011-11-10 15:53:37 +010087 Stringmap ParseScanResult(
88 const ModemGSMNetworkProxyInterface::ScanResult &result);
Darin Petkovb05315f2011-11-07 10:14:25 +010089
Darin Petkov184c54e2011-11-15 12:44:39 +010090 // Signal callbacks inherited from ModemGSMNetworkProxyDelegate.
91 virtual void OnGSMNetworkModeChanged(uint32 mode);
92 virtual void OnGSMRegistrationInfoChanged(uint32 status,
93 const std::string &operator_code,
94 const std::string &operator_name);
95 virtual void OnGSMSignalQualityChanged(uint32 quality);
96
Darin Petkovcb547732011-11-09 13:55:26 +010097 scoped_ptr<ModemGSMCardProxyInterface> card_proxy_;
Darin Petkov184c54e2011-11-15 12:44:39 +010098 scoped_ptr<ModemGSMNetworkProxyInterface> network_proxy_;
Darin Petkovcb547732011-11-09 13:55:26 +010099
Darin Petkovb05315f2011-11-07 10:14:25 +0100100 ScopedRunnableMethodFactory<CellularCapabilityGSM> task_factory_;
101
Darin Petkov184c54e2011-11-15 12:44:39 +0100102 uint32 registration_state_;
Darin Petkovae0c64e2011-11-15 15:50:27 +0100103 uint32 access_technology_;
104 std::string network_id_;
105 std::string operator_name_;
106 std::string operator_country_;
107 std::string spn_;
Darin Petkov184c54e2011-11-15 12:44:39 +0100108
Darin Petkov1272a432011-11-10 15:53:37 +0100109 // Properties.
Darin Petkov184c54e2011-11-15 12:44:39 +0100110 std::string selected_network_;
Darin Petkov1272a432011-11-10 15:53:37 +0100111 Stringmaps found_networks_;
112 bool scanning_;
113 uint16 scan_interval_;
114
Darin Petkovdaf43862011-10-27 11:37:28 +0200115 DISALLOW_COPY_AND_ASSIGN(CellularCapabilityGSM);
116};
117
118} // namespace shill
119
120#endif // SHILL_CELLULAR_CAPABILITY_GSM_