blob: 0e30e9e5aab4797bc21ea8850a5b16a3079af709 [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);
Arman Ugurayc9673062013-05-13 21:21:53 -070047 virtual void SetupConnectProperties(DBusPropertiesMap *properties);
Arman Uguray72fab6a2013-01-10 19:32:42 -080048
49 // TODO(armansito): Remove once 3GPP is implemented in its own class
50 virtual void Register(const ResultCallback &callback);
51 virtual void RegisterOnNetwork(const std::string &network_id,
52 Error *error,
53 const ResultCallback &callback);
54 virtual void RequirePIN(const std::string &pin, bool require,
55 Error *error, const ResultCallback &callback);
56 virtual void EnterPIN(const std::string &pin,
57 Error *error, const ResultCallback &callback);
58 virtual void UnblockPIN(const std::string &unblock_code,
59 const std::string &pin,
60 Error *error, const ResultCallback &callback);
61 virtual void ChangePIN(const std::string &old_pin,
62 const std::string &new_pin,
63 Error *error, const ResultCallback &callback);
64 virtual void Scan(Error *error, const ResultCallback &callback);
65 virtual void OnSimPathChanged(const std::string &sim_path);
66
67 protected:
68 virtual void InitProxies();
69 virtual void ReleaseProxies();
70
71 virtual void UpdateOLP();
72
Arman Uguray0a3e2792013-01-17 16:31:50 -080073 // Post-payment activation handlers.
74 virtual void UpdatePendingActivationState();
75
Arman Uguray72fab6a2013-01-10 19:32:42 -080076 private:
77 friend class CellularCapabilityUniversalCDMATest;
Arman Uguray0a3e2792013-01-17 16:31:50 -080078 FRIEND_TEST(CellularCapabilityUniversalCDMADispatcherTest,
79 UpdatePendingActivationState);
80 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, ActivateAutomatic);
81 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
82 CreateFriendlyServiceName);
83 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, IsActivating);
84 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
85 IsServiceActivationRequired);
86 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
87 OnCDMARegistrationChanged);
88 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, PropertiesChanged);
89 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, UpdateOLP);
90 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest, UpdateOperatorInfo);
91 FRIEND_TEST(CellularCapabilityUniversalCDMAMainTest,
92 UpdateServiceActivationStateProperty);
Arman Uguray72fab6a2013-01-10 19:32:42 -080093
94 // CDMA property change handlers
95 virtual void OnModemCDMAPropertiesChanged(
96 const DBusPropertiesMap &properties,
97 const std::vector<std::string> &invalidated_properties);
Arman Uguray0a3e2792013-01-17 16:31:50 -080098 void OnCDMARegistrationChanged(MMModemCdmaRegistrationState state_1x,
99 MMModemCdmaRegistrationState state_evdo,
100 uint32_t sid, uint32_t nid);
101
102 // CDMA activation handlers
103 void ActivateAutomatic();
104 void OnActivationStateChangedSignal(uint32 activation_state,
105 uint32 activation_error,
106 const DBusPropertiesMap &status_changes);
107 void OnActivateReply(const ResultCallback &callback,
108 const Error &error);
109 void HandleNewActivationStatus(uint32 error);
110
111 void UpdateServiceActivationStateProperty();
112
113 static std::string GetActivationStateString(uint32 state);
114 static std::string GetActivationErrorString(uint32 error);
Arman Uguray72fab6a2013-01-10 19:32:42 -0800115
116 void UpdateOperatorInfo();
117 void UpdateServingOperator();
118
119 scoped_ptr<mm1::ModemModemCdmaProxyInterface> modem_cdma_proxy_;
Arman Uguray0a3e2792013-01-17 16:31:50 -0800120 // TODO(armansito): Should probably call this |weak_ptr_factory_| after
121 // 3gpp refactor
122 base::WeakPtrFactory<CellularCapabilityUniversalCDMA> weak_cdma_ptr_factory_;
123
124 // CDMA ActivationState property.
125 MMModemCdmaActivationState activation_state_;
126
127 // The activation code needed for OTASP activation.
128 std::string activation_code_;
Arman Uguray72fab6a2013-01-10 19:32:42 -0800129
130 MMModemCdmaRegistrationState cdma_1x_registration_state_;
131 MMModemCdmaRegistrationState cdma_evdo_registration_state_;
132
133 // Current network operator. Since CDMA operator information is acquired
134 // using the (SID, NID) pair, which itself is acquired OTA, |provider_|
135 // can both be the home provider or the serving operator for roaming.
136 Cellular::Operator provider_;
137 uint32_t nid_;
138 uint32_t sid_;
139
140 // TODO(armansito): Use the common name |friendly_service_name_id_| once
141 // CellularCapabilityUniversal gets broken up for 3GPP.
142 static unsigned int friendly_service_name_id_cdma_;
143
144 DISALLOW_COPY_AND_ASSIGN(CellularCapabilityUniversalCDMA);
145};
146
147} // namespace shill
148
149#endif // SHILL_CELLULAR_CAPABILITY_UNIVERSAL_CDMA_H_