blob: a796ffa684c34822b7a589d73bc6e20278ad1f8a [file] [log] [blame]
Jason Glasgow82f9ab32012-04-04 14:27:19 -04001// Copyright (c) 2012 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_CLASSIC_
6#define SHILL_CELLULAR_CAPABILITY_CLASSIC_
7
8#include <string>
9#include <vector>
10
11#include <base/basictypes.h>
12#include <base/callback.h>
13#include <base/memory/scoped_ptr.h>
14#include <base/memory/weak_ptr.h>
15#include <gtest/gtest_prod.h> // for FRIEND_TEST
16
17#include "shill/cellular_capability.h"
18#include "shill/dbus_properties.h"
19#include "shill/modem_proxy_interface.h"
20#include "shill/modem_simple_proxy_interface.h"
21
22namespace shill {
23
24class Cellular;
25class Error;
26class EventDispatcher;
27class ProxyFactory;
28
29// CellularCapabilityClassic handles modems using the
30// org.chromium.ModemManager DBUS interface.
31class CellularCapabilityClassic : public CellularCapability {
32 public:
33 static const char kConnectPropertyApn[];
34 static const char kConnectPropertyApnUsername[];
35 static const char kConnectPropertyApnPassword[];
36 static const char kConnectPropertyHomeOnly[];
37 static const char kConnectPropertyPhoneNumber[];
38
39 // |cellular| is the parent Cellular device.
40 CellularCapabilityClassic(Cellular *cellular, ProxyFactory *proxy_factory);
41 virtual ~CellularCapabilityClassic();
42
43 virtual void StopModem(Error *error, const ResultCallback &callback);
44 virtual void Connect(const DBusPropertiesMap &properties, Error *error,
45 const ResultCallback &callback);
46 virtual void Disconnect(Error *error, const ResultCallback &callback);
47
48 virtual void Activate(const std::string &carrier,
49 Error *error, const ResultCallback &callback);
50
51 // Network registration.
52 virtual void RegisterOnNetwork(const std::string &network_id,
53 Error *error,
54 const ResultCallback &callback);
55
56 // PIN management. The default implementation fails by returning an error.
57 virtual void RequirePIN(const std::string &pin, bool require,
58 Error *error, const ResultCallback &callback);
59 virtual void EnterPIN(const std::string &pin,
60 Error *error, const ResultCallback &callback);
61 virtual void UnblockPIN(const std::string &unblock_code,
62 const std::string &pin,
63 Error *error, const ResultCallback &callback);
64 virtual void ChangePIN(const std::string &old_pin,
65 const std::string &new_pin,
66 Error *error, const ResultCallback &callback);
67
68 virtual void Scan(Error *error, const ResultCallback &callback);
69
70 virtual void OnDBusPropertiesChanged(
71 const std::string &interface,
72 const DBusPropertiesMap &changed_properties,
73 const std::vector<std::string> &invalidated_properties);
74
75 protected:
76 // The following five methods are only ever called as
77 // callbacks (from the main loop), which is why they
78 // don't take an Error * argument.
79 virtual void EnableModem(const ResultCallback &callback);
80 virtual void DisableModem(const ResultCallback &callback);
81 virtual void GetModemStatus(const ResultCallback &callback);
82 virtual void GetModemInfo(const ResultCallback &callback);
83 virtual void GetProperties(const ResultCallback &callback) = 0;
84
85 void FinishEnable(const ResultCallback &callback);
86 void FinishDisable(const ResultCallback &callback);
87 virtual void InitProxies();
88 virtual void ReleaseProxies();
89
90 static void OnUnsupportedOperation(const char *operation, Error *error);
91
92 virtual void OnConnectReply(const ResultCallback &callback,
93 const Error &error);
94
95 // Properties
96 bool scanning_supported_;
97 std::string meid_;
98 std::string imsi_;
99 std::string imei_;
100 std::string esn_;
101 std::string mdn_;
102 std::string min_;
103 std::string model_id_;
104 std::string manufacturer_;
105 std::string firmware_revision_;
106 std::string hardware_revision_;
107 std::string carrier_;
108
109 private:
110 friend class CellularTest;
111 friend class CellularCapabilityTest;
112 friend class CellularCapabilityGSMTest;
113 FRIEND_TEST(CellularCapabilityGSMTest, SetProxy);
114 FRIEND_TEST(CellularCapabilityGSMTest, SetStorageIdentifier);
115 FRIEND_TEST(CellularCapabilityGSMTest, UpdateStatus);
116 FRIEND_TEST(CellularCapabilityTest, AllowRoaming);
117 FRIEND_TEST(CellularCapabilityTest, EnableModemFail);
118 FRIEND_TEST(CellularCapabilityTest, EnableModemSucceed);
119 FRIEND_TEST(CellularCapabilityTest, FinishEnable);
120 FRIEND_TEST(CellularCapabilityTest, GetModemInfo);
121 FRIEND_TEST(CellularCapabilityTest, GetModemStatus);
122 FRIEND_TEST(CellularCapabilityTest, TryApns);
123 FRIEND_TEST(CellularServiceTest, FriendlyName);
124 FRIEND_TEST(CellularTest, StartCDMARegister);
125 FRIEND_TEST(CellularTest, StartConnected);
126 FRIEND_TEST(CellularTest, StartGSMRegister);
127 FRIEND_TEST(CellularTest, StartLinked);
128 FRIEND_TEST(CellularTest, Connect);
129 FRIEND_TEST(CellularTest, ConnectFailure);
130 FRIEND_TEST(CellularTest, Disconnect);
131
132 void HelpRegisterDerivedBool(
133 const std::string &name,
134 bool(CellularCapability::*get)(Error *error),
135 void(CellularCapability::*set)(const bool &value, Error *error));
136
137 // Method reply and signal callbacks from Modem interface
138 virtual void OnModemStateChangedSignal(
139 uint32 old_state, uint32 new_state, uint32 reason);
140 virtual void OnGetModemInfoReply(const ResultCallback &callback,
141 const ModemHardwareInfo &info,
142 const Error &error);
143
144 // Method reply callbacks from Modem.Simple interface
145 virtual void OnGetModemStatusReply(const ResultCallback &callback,
146 const DBusPropertiesMap &props,
147 const Error &error);
148 virtual void OnDisconnectReply(const ResultCallback &callback,
149 const Error &error);
150
151 Cellular *cellular_;
152 base::WeakPtrFactory<CellularCapabilityClassic> weak_ptr_factory_;
153
154 scoped_ptr<ModemProxyInterface> proxy_;
155 scoped_ptr<ModemSimpleProxyInterface> simple_proxy_;
156
157 DISALLOW_COPY_AND_ASSIGN(CellularCapabilityClassic);
158};
159
160} // namespace shill
161
162#endif // SHILL_CELLULAR_CAPABILITY_CLASSIC_