blob: a3d4e95e3cbce16c4d61fec155d3db8ebfe4cfdc [file] [log] [blame]
Arman Uguray72fab6a2013-01-10 19:32:42 -08001// Copyright (c) 2013 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_UNIVERSAL_CDMA_H_
6#define SHILL_CELLULAR_CAPABILITY_UNIVERSAL_CDMA_H_
7
8#include "shill/cellular_capability_universal.h"
9#include "shill/cellular.h"
10#include "shill/mm1_modem_modemcdma_proxy_interface.h"
11
Arman Uguray0a3e2792013-01-17 16:31:50 -080012#include <base/memory/weak_ptr.h>
13
Arman Uguray72fab6a2013-01-10 19:32:42 -080014#include <string>
15#include <vector>
16
17#include <gtest/gtest_prod.h> // for FRIEND_TEST
18
19namespace shill {
20
21class CellularCapabilityUniversalCDMA : public CellularCapabilityUniversal {
22 public:
23 CellularCapabilityUniversalCDMA(
24 Cellular *cellular,
25 ProxyFactory *proxy_factory,
26 ModemInfo *modem_info);
27
Arman Uguray0a3e2792013-01-17 16:31:50 -080028 // Returns true if the service is activated.
29 bool IsActivated() const;
30
Arman Uguray72fab6a2013-01-10 19:32:42 -080031 // Inherited from CellularCapability.
32 virtual void Activate(const std::string &carrier,
33 Error *error, const ResultCallback &callback);
34 virtual void CompleteActivation(Error *error);
35 virtual std::string CreateFriendlyServiceName();
Arman Uguray72fab6a2013-01-10 19:32:42 -080036 virtual void GetProperties();
37 virtual std::string GetRoamingStateString() const;
Arman Uguray0a3e2792013-01-17 16:31:50 -080038 virtual bool IsActivating() const;
Arman Uguray72fab6a2013-01-10 19:32:42 -080039 virtual bool IsRegistered();
Arman Uguray0a3e2792013-01-17 16:31:50 -080040 virtual bool IsServiceActivationRequired() const;
Arman Uguray72fab6a2013-01-10 19:32:42 -080041 virtual void OnDBusPropertiesChanged(
42 const std::string &interface,
43 const DBusPropertiesMap &changed_properties,
44 const std::vector<std::string> &invalidated_properties);
45 virtual void OnServiceCreated();
46 virtual void SetUnregistered(bool searching);
47
48 // TODO(armansito): Remove once 3GPP is implemented in its own class
49 virtual void Register(const ResultCallback &callback);
50 virtual void RegisterOnNetwork(const std::string &network_id,
51 Error *error,
52 const ResultCallback &callback);
53 virtual void RequirePIN(const std::string &pin, bool require,
54 Error *error, const ResultCallback &callback);
55 virtual void EnterPIN(const std::string &pin,
56 Error *error, const ResultCallback &callback);
57 virtual void UnblockPIN(const std::string &unblock_code,
58 const std::string &pin,
59 Error *error, const ResultCallback &callback);
60 virtual void ChangePIN(const std::string &old_pin,
61 const std::string &new_pin,
62 Error *error, const ResultCallback &callback);
63 virtual void Scan(Error *error, const ResultCallback &callback);
64 virtual void OnSimPathChanged(const std::string &sim_path);
65
66 protected:
67 virtual void InitProxies();
68 virtual void ReleaseProxies();
69
70 virtual void UpdateOLP();
71
Arman Uguray0a3e2792013-01-17 16:31:50 -080072 // Post-payment activation handlers.
73 virtual void UpdatePendingActivationState();
74
Arman Uguray72fab6a2013-01-10 19:32:42 -080075 private:
76 friend class CellularCapabilityUniversalCDMATest;
Arman Uguray0a3e2792013-01-17 16:31:50 -080077 FRIEND_TEST(CellularCapabilityUniversalCDMADispatcherTest,
78 UpdatePendingActivationState);
79 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, ActivateAutomatic);
80 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
81 CreateFriendlyServiceName);
82 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, IsActivating);
83 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
84 IsServiceActivationRequired);
85 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
86 OnCDMARegistrationChanged);
87 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, PropertiesChanged);
88 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, UpdateOLP);
89 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, UpdateOperatorInfo);
90 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
91 UpdateServiceActivationStateProperty);
Arman Uguray72fab6a2013-01-10 19:32:42 -080092
93 // CDMA property change handlers
94 virtual void OnModemCDMAPropertiesChanged(
95 const DBusPropertiesMap &properties,
96 const std::vector<std::string> &invalidated_properties);
Arman Uguray0a3e2792013-01-17 16:31:50 -080097 void OnCDMARegistrationChanged(MMModemCdmaRegistrationState state_1x,
98 MMModemCdmaRegistrationState state_evdo,
99 uint32_t sid, uint32_t nid);
100
101 // CDMA activation handlers
102 void ActivateAutomatic();
103 void OnActivationStateChangedSignal(uint32 activation_state,
104 uint32 activation_error,
105 const DBusPropertiesMap &status_changes);
106 void OnActivateReply(const ResultCallback &callback,
107 const Error &error);
108 void HandleNewActivationStatus(uint32 error);
109
110 void UpdateServiceActivationStateProperty();
111
112 static std::string GetActivationStateString(uint32 state);
113 static std::string GetActivationErrorString(uint32 error);
Arman Uguray72fab6a2013-01-10 19:32:42 -0800114
115 void UpdateOperatorInfo();
116 void UpdateServingOperator();
117
118 scoped_ptr<mm1::ModemModemCdmaProxyInterface> modem_cdma_proxy_;
Arman Uguray0a3e2792013-01-17 16:31:50 -0800119 // TODO(armansito): Should probably call this |weak_ptr_factory_| after
120 // 3gpp refactor
121 base::WeakPtrFactory<CellularCapabilityUniversalCDMA> weak_cdma_ptr_factory_;
122
123 // CDMA ActivationState property.
124 MMModemCdmaActivationState activation_state_;
125
126 // The activation code needed for OTASP activation.
127 std::string activation_code_;
Arman Uguray72fab6a2013-01-10 19:32:42 -0800128
129 MMModemCdmaRegistrationState cdma_1x_registration_state_;
130 MMModemCdmaRegistrationState cdma_evdo_registration_state_;
131
132 // Current network operator. Since CDMA operator information is acquired
133 // using the (SID, NID) pair, which itself is acquired OTA, |provider_|
134 // can both be the home provider or the serving operator for roaming.
135 Cellular::Operator provider_;
136 uint32_t nid_;
137 uint32_t sid_;
138
139 // TODO(armansito): Use the common name |friendly_service_name_id_| once
140 // CellularCapabilityUniversal gets broken up for 3GPP.
141 static unsigned int friendly_service_name_id_cdma_;
142
143 DISALLOW_COPY_AND_ASSIGN(CellularCapabilityUniversalCDMA);
144};
145
146} // namespace shill
147
148#endif // SHILL_CELLULAR_CAPABILITY_UNIVERSAL_CDMA_H_