blob: b434c9d0c85a18bc2a5816059e9ac3a14c1afa04 [file] [log] [blame]
Darin Petkovac635a82012-01-10 16:51:58 +01001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkovdaf43862011-10-27 11:37:28 +02002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/cellular_capability_cdma.h"
6
Jason Glasgow4c0724a2012-04-17 15:47:40 -04007#include <string>
8#include <vector>
9
Eric Shienbrood3e20a232012-02-16 11:35:56 -050010#include <base/bind.h>
Darin Petkovac635a82012-01-10 16:51:58 +010011#include <base/stringprintf.h>
Darin Petkov20c13ec2011-11-09 15:07:15 +010012#include <chromeos/dbus/service_constants.h>
13#include <mm/mm-modem.h>
Darin Petkovdaf43862011-10-27 11:37:28 +020014
15#include "shill/cellular.h"
Darin Petkov184c54e2011-11-15 12:44:39 +010016#include "shill/cellular_service.h"
Christopher Wileyb691efd2012-08-09 13:51:51 -070017#include "shill/logging.h"
Darin Petkovdaf43862011-10-27 11:37:28 +020018#include "shill/proxy_factory.h"
19
Eric Shienbrood3e20a232012-02-16 11:35:56 -050020using base::Bind;
Darin Petkov20c13ec2011-11-09 15:07:15 +010021using std::string;
Jason Glasgow4c0724a2012-04-17 15:47:40 -040022using std::vector;
Darin Petkov20c13ec2011-11-09 15:07:15 +010023
Darin Petkovdaf43862011-10-27 11:37:28 +020024namespace shill {
25
Darin Petkovac635a82012-01-10 16:51:58 +010026// static
27unsigned int CellularCapabilityCDMA::friendly_service_name_id_ = 0;
28
Darin Petkovae0c64e2011-11-15 15:50:27 +010029const char CellularCapabilityCDMA::kPhoneNumber[] = "#777";
30
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050031CellularCapabilityCDMA::CellularCapabilityCDMA(Cellular *cellular,
32 ProxyFactory *proxy_factory)
Jason Glasgow82f9ab32012-04-04 14:27:19 -040033 : CellularCapabilityClassic(cellular, proxy_factory),
Eric Shienbrood3e20a232012-02-16 11:35:56 -050034 weak_ptr_factory_(this),
Christopher Wiley1582bdd2012-11-15 11:31:14 -080035 activation_starting_(false),
Darin Petkovae0c64e2011-11-15 15:50:27 +010036 activation_state_(MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED),
Darin Petkov184c54e2011-11-15 12:44:39 +010037 registration_state_evdo_(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN),
Darin Petkovae0c64e2011-11-15 15:50:27 +010038 registration_state_1x_(MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN),
39 prl_version_(0) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070040 SLOG(Cellular, 2) << "Cellular capability constructed: CDMA";
Darin Petkovae0c64e2011-11-15 15:50:27 +010041 PropertyStore *store = cellular->mutable_store();
42 store->RegisterConstUint16(flimflam::kPRLVersionProperty, &prl_version_);
43}
Darin Petkovdaf43862011-10-27 11:37:28 +020044
Eric Shienbrood9a245532012-03-07 14:20:39 -050045void CellularCapabilityCDMA::InitProxies() {
Jason Glasgow82f9ab32012-04-04 14:27:19 -040046 CellularCapabilityClassic::InitProxies();
Darin Petkov184c54e2011-11-15 12:44:39 +010047 proxy_.reset(proxy_factory()->CreateModemCDMAProxy(
Eric Shienbrood9a245532012-03-07 14:20:39 -050048 cellular()->dbus_path(), cellular()->dbus_owner()));
49 proxy_->set_signal_quality_callback(
50 Bind(&CellularCapabilityCDMA::OnSignalQualitySignal,
51 weak_ptr_factory_.GetWeakPtr()));
52 proxy_->set_activation_state_callback(
53 Bind(&CellularCapabilityCDMA::OnActivationStateChangedSignal,
54 weak_ptr_factory_.GetWeakPtr()));
55 proxy_->set_registration_state_callback(
56 Bind(&CellularCapabilityCDMA::OnRegistrationStateChangedSignal,
57 weak_ptr_factory_.GetWeakPtr()));
Darin Petkovdaf43862011-10-27 11:37:28 +020058}
59
Eric Shienbrood9a245532012-03-07 14:20:39 -050060void CellularCapabilityCDMA::StartModem(Error *error,
61 const ResultCallback &callback) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070062 SLOG(Cellular, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050063 InitProxies();
64
65 CellularTaskList *tasks = new CellularTaskList();
66 ResultCallback cb =
67 Bind(&CellularCapabilityCDMA::StepCompletedCallback,
Thieu Le923006b2012-04-05 16:32:58 -070068 weak_ptr_factory_.GetWeakPtr(), callback, false, tasks);
Eric Shienbrood7fce52c2012-04-13 19:11:02 -040069 if (!cellular()->IsUnderlyingDeviceEnabled())
70 tasks->push_back(Bind(&CellularCapabilityCDMA::EnableModem,
71 weak_ptr_factory_.GetWeakPtr(), cb));
Eric Shienbrood9a245532012-03-07 14:20:39 -050072 tasks->push_back(Bind(&CellularCapabilityCDMA::GetModemStatus,
73 weak_ptr_factory_.GetWeakPtr(), cb));
74 tasks->push_back(Bind(&CellularCapabilityCDMA::GetMEID,
75 weak_ptr_factory_.GetWeakPtr(), cb));
76 tasks->push_back(Bind(&CellularCapabilityCDMA::GetModemInfo,
77 weak_ptr_factory_.GetWeakPtr(), cb));
78 tasks->push_back(Bind(&CellularCapabilityCDMA::FinishEnable,
79 weak_ptr_factory_.GetWeakPtr(), cb));
80
81 RunNextStep(tasks);
82}
83
Eric Shienbrood9a245532012-03-07 14:20:39 -050084void CellularCapabilityCDMA::ReleaseProxies() {
Jason Glasgow82f9ab32012-04-04 14:27:19 -040085 CellularCapabilityClassic::ReleaseProxies();
Darin Petkov721ac932011-11-16 15:43:09 +010086 proxy_.reset();
87}
88
Jason Glasgow82f9ab32012-04-04 14:27:19 -040089bool CellularCapabilityCDMA::AllowRoaming() {
90 return allow_roaming_property();
91}
92
93
Darin Petkov5f316f62011-11-18 12:10:26 +010094void CellularCapabilityCDMA::OnServiceCreated() {
Ben Chanfad4a0b2012-04-18 15:49:59 -070095 SLOG(Cellular, 2) << __func__;
Darin Petkov381928f2012-02-02 23:00:12 +010096 cellular()->service()->SetOLP(olp_);
97 cellular()->service()->SetUsageURL(usage_url_);
Darin Petkov5f316f62011-11-18 12:10:26 +010098 UpdateServingOperator();
99 HandleNewActivationState(MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR);
100}
101
Darin Petkovae0c64e2011-11-15 15:50:27 +0100102void CellularCapabilityCDMA::UpdateStatus(const DBusPropertiesMap &properties) {
103 string carrier;
104 if (DBusProperties::GetString(properties, "carrier", &carrier)) {
105 Cellular::Operator oper;
106 oper.SetName(carrier);
107 oper.SetCountry("us");
108 cellular()->set_home_provider(oper);
109 }
110 DBusProperties::GetUint32(
111 properties, "activation_state", &activation_state_);
112 DBusProperties::GetUint16(properties, "prl_version", &prl_version_);
Darin Petkov5f316f62011-11-18 12:10:26 +0100113 // TODO(petkov): For now, get the payment and usage URLs from ModemManager to
114 // match flimflam. In the future, get these from an alternative source (e.g.,
115 // database, carrier-specific properties, etc.).
Darin Petkov381928f2012-02-02 23:00:12 +0100116 string payment;
117 if (DBusProperties::GetString(properties, "payment_url", &payment)) {
118 olp_.SetURL(payment);
119 }
120 if (DBusProperties::GetString(properties, "payment_url_method", &payment)) {
121 olp_.SetMethod(payment);
122 }
123 if (DBusProperties::GetString(properties, "payment_url_postdata", &payment)) {
124 olp_.SetPostData(payment);
125 }
Darin Petkovae0c64e2011-11-15 15:50:27 +0100126 DBusProperties::GetString(properties, "usage_url", &usage_url_);
127}
128
129void CellularCapabilityCDMA::SetupConnectProperties(
130 DBusPropertiesMap *properties) {
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500131 (*properties)[kConnectPropertyPhoneNumber].writer().append_string(
Darin Petkovae0c64e2011-11-15 15:50:27 +0100132 kPhoneNumber);
133}
134
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500135void CellularCapabilityCDMA::Activate(const string &carrier,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500136 Error *error,
137 const ResultCallback &callback) {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700138 SLOG(Cellular, 2) << __func__ << "(" << carrier << ")";
Christopher Wiley1582bdd2012-11-15 11:31:14 -0800139 // We're going to trigger something which leads to an activation.
140 activation_starting_ = true;
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800141 if (cellular()->state() == Cellular::kStateEnabled ||
142 cellular()->state() == Cellular::kStateRegistered) {
Christopher Wiley8a468902012-11-30 11:52:38 -0800143 ActivationResultCallback activation_callback =
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800144 Bind(&CellularCapabilityCDMA::OnActivateReply,
145 weak_ptr_factory_.GetWeakPtr(),
146 callback);
Christopher Wiley8a468902012-11-30 11:52:38 -0800147 proxy_->Activate(carrier, error, activation_callback, kTimeoutActivate);
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800148 } else if (cellular()->state() == Cellular::kStateConnected ||
149 cellular()->state() == Cellular::kStateLinked) {
Christopher Wiley8a468902012-11-30 11:52:38 -0800150 pending_activation_callback_ = callback;
151 pending_activation_carrier_ = carrier;
152 cellular()->Disconnect(error);
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800153 } else {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500154 Error::PopulateAndLog(error, Error::kInvalidArguments,
Darin Petkova3d3be52011-11-14 21:34:16 +0100155 "Unable to activate in " +
156 Cellular::GetStateString(cellular()->state()));
Christopher Wiley1582bdd2012-11-15 11:31:14 -0800157 activation_starting_ = false;
Darin Petkova3d3be52011-11-14 21:34:16 +0100158 }
Darin Petkovae0c64e2011-11-15 15:50:27 +0100159}
160
161void CellularCapabilityCDMA::HandleNewActivationState(uint32 error) {
Christopher Wiley8a468902012-11-30 11:52:38 -0800162 SLOG(Cellular, 2) << __func__ << "(" << error << ")";
Darin Petkovae0c64e2011-11-15 15:50:27 +0100163 if (!cellular()->service().get()) {
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800164 LOG(ERROR) << "In " << __func__ << "(): service is null.";
Darin Petkovae0c64e2011-11-15 15:50:27 +0100165 return;
166 }
Darin Petkovb9c99332012-01-12 13:13:00 +0100167 cellular()->service()->SetActivationState(
Darin Petkovae0c64e2011-11-15 15:50:27 +0100168 GetActivationStateString(activation_state_));
169 cellular()->service()->set_error(GetActivationErrorString(error));
170}
171
Christopher Wiley8a468902012-11-30 11:52:38 -0800172void CellularCapabilityCDMA::DisconnectCleanup() {
173 CellularCapabilityClassic::DisconnectCleanup();
174 if (pending_activation_callback_.is_null()) {
175 return;
176 }
177 if (cellular()->state() == Cellular::kStateEnabled ||
178 cellular()->state() == Cellular::kStateRegistered) {
179 Error ignored_error;
180 Activate(pending_activation_carrier_,
181 &ignored_error,
182 pending_activation_callback_);
183 } else {
184 Error error;
185 Error::PopulateAndLog(
186 &error,
187 Error::kOperationFailed,
188 "Tried to disconnect before activating cellular service and failed");
189 HandleNewActivationState(MM_MODEM_CDMA_ACTIVATION_ERROR_UNKNOWN);
190 activation_starting_ = false;
191 pending_activation_callback_.Run(error);
192 }
193 pending_activation_callback_.Reset();
194 pending_activation_carrier_.clear();
195}
196
Darin Petkovae0c64e2011-11-15 15:50:27 +0100197// static
198string CellularCapabilityCDMA::GetActivationStateString(uint32 state) {
199 switch (state) {
200 case MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATED:
201 return flimflam::kActivationStateActivated;
202 case MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING:
203 return flimflam::kActivationStateActivating;
204 case MM_MODEM_CDMA_ACTIVATION_STATE_NOT_ACTIVATED:
205 return flimflam::kActivationStateNotActivated;
206 case MM_MODEM_CDMA_ACTIVATION_STATE_PARTIALLY_ACTIVATED:
207 return flimflam::kActivationStatePartiallyActivated;
208 default:
209 return flimflam::kActivationStateUnknown;
210 }
211}
212
213// static
214string CellularCapabilityCDMA::GetActivationErrorString(uint32 error) {
215 switch (error) {
216 case MM_MODEM_CDMA_ACTIVATION_ERROR_WRONG_RADIO_INTERFACE:
217 return flimflam::kErrorNeedEvdo;
218 case MM_MODEM_CDMA_ACTIVATION_ERROR_ROAMING:
219 return flimflam::kErrorNeedHomeNetwork;
220 case MM_MODEM_CDMA_ACTIVATION_ERROR_COULD_NOT_CONNECT:
221 case MM_MODEM_CDMA_ACTIVATION_ERROR_SECURITY_AUTHENTICATION_FAILED:
222 case MM_MODEM_CDMA_ACTIVATION_ERROR_PROVISIONING_FAILED:
223 return flimflam::kErrorOtaspFailed;
224 case MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR:
225 return "";
226 case MM_MODEM_CDMA_ACTIVATION_ERROR_NO_SIGNAL:
227 default:
228 return flimflam::kErrorActivationFailed;
229 }
Darin Petkova3d3be52011-11-14 21:34:16 +0100230}
231
Eric Shienbrood9a245532012-03-07 14:20:39 -0500232void CellularCapabilityCDMA::GetMEID(const ResultCallback &callback) {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700233 SLOG(Cellular, 2) << __func__;
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500234 if (meid_.empty()) {
Darin Petkovcb547732011-11-09 13:55:26 +0100235 // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500236 meid_ = proxy_->MEID();
Ben Chanfad4a0b2012-04-18 15:49:59 -0700237 SLOG(Cellular, 2) << "MEID: " << meid_;
Darin Petkovcb547732011-11-09 13:55:26 +0100238 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500239 callback.Run(Error());
Darin Petkovcb547732011-11-09 13:55:26 +0100240}
241
Eric Shienbrood9a245532012-03-07 14:20:39 -0500242void CellularCapabilityCDMA::GetProperties(const ResultCallback &callback) {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700243 SLOG(Cellular, 2) << __func__;
Darin Petkov184c54e2011-11-15 12:44:39 +0100244 // No properties.
Eric Shienbrood9a245532012-03-07 14:20:39 -0500245 callback.Run(Error());
Darin Petkov184c54e2011-11-15 12:44:39 +0100246}
247
Christopher Wiley1582bdd2012-11-15 11:31:14 -0800248bool CellularCapabilityCDMA::IsActivating() const {
249 return activation_starting_ ||
250 activation_state_ == MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING;
251}
252
Darin Petkovb72cf402011-11-22 14:51:39 +0100253bool CellularCapabilityCDMA::IsRegistered() {
254 return registration_state_evdo_ != MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN ||
255 registration_state_1x_ != MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
256}
257
Eric Shienbrood7fce52c2012-04-13 19:11:02 -0400258void CellularCapabilityCDMA::SetUnregistered(bool searching) {
259 registration_state_evdo_ = MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
260 registration_state_1x_ = MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN;
261}
262
Darin Petkov20c13ec2011-11-09 15:07:15 +0100263string CellularCapabilityCDMA::GetNetworkTechnologyString() const {
Darin Petkov184c54e2011-11-15 12:44:39 +0100264 if (registration_state_evdo_ != MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN) {
Darin Petkov20c13ec2011-11-09 15:07:15 +0100265 return flimflam::kNetworkTechnologyEvdo;
266 }
Darin Petkov184c54e2011-11-15 12:44:39 +0100267 if (registration_state_1x_ != MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN) {
Darin Petkov20c13ec2011-11-09 15:07:15 +0100268 return flimflam::kNetworkTechnology1Xrtt;
269 }
270 return "";
271}
272
273string CellularCapabilityCDMA::GetRoamingStateString() const {
Darin Petkov184c54e2011-11-15 12:44:39 +0100274 uint32 state = registration_state_evdo_;
Darin Petkov20c13ec2011-11-09 15:07:15 +0100275 if (state == MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN) {
Darin Petkov184c54e2011-11-15 12:44:39 +0100276 state = registration_state_1x_;
Darin Petkov20c13ec2011-11-09 15:07:15 +0100277 }
278 switch (state) {
279 case MM_MODEM_CDMA_REGISTRATION_STATE_UNKNOWN:
280 case MM_MODEM_CDMA_REGISTRATION_STATE_REGISTERED:
281 break;
282 case MM_MODEM_CDMA_REGISTRATION_STATE_HOME:
283 return flimflam::kRoamingStateHome;
284 case MM_MODEM_CDMA_REGISTRATION_STATE_ROAMING:
285 return flimflam::kRoamingStateRoaming;
286 default:
287 NOTREACHED();
288 }
289 return flimflam::kRoamingStateUnknown;
290}
291
Darin Petkov3e509242011-11-10 14:46:44 +0100292void CellularCapabilityCDMA::GetSignalQuality() {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700293 SLOG(Cellular, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500294 SignalQualityCallback callback =
295 Bind(&CellularCapabilityCDMA::OnGetSignalQualityReply,
296 weak_ptr_factory_.GetWeakPtr());
297 proxy_->GetSignalQuality(NULL, callback, kTimeoutDefault);
Darin Petkov184c54e2011-11-15 12:44:39 +0100298}
299
Eric Shienbrood9a245532012-03-07 14:20:39 -0500300void CellularCapabilityCDMA::GetRegistrationState() {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700301 SLOG(Cellular, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500302 RegistrationStateCallback callback =
303 Bind(&CellularCapabilityCDMA::OnGetRegistrationStateReply,
304 weak_ptr_factory_.GetWeakPtr());
305 proxy_->GetRegistrationState(NULL, callback, kTimeoutDefault);
Darin Petkov184c54e2011-11-15 12:44:39 +0100306}
307
Darin Petkovac635a82012-01-10 16:51:58 +0100308string CellularCapabilityCDMA::CreateFriendlyServiceName() {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700309 SLOG(Cellular, 2) << __func__;
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500310 if (!carrier_.empty()) {
311 return carrier_;
Darin Petkovac635a82012-01-10 16:51:58 +0100312 }
313 return base::StringPrintf("CDMANetwork%u", friendly_service_name_id_++);
314}
315
Darin Petkovae0c64e2011-11-15 15:50:27 +0100316void CellularCapabilityCDMA::UpdateServingOperator() {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700317 SLOG(Cellular, 2) << __func__;
Darin Petkovae0c64e2011-11-15 15:50:27 +0100318 if (cellular()->service().get()) {
Darin Petkov9cb02682012-01-28 00:17:38 +0100319 cellular()->service()->SetServingOperator(cellular()->home_provider());
Darin Petkovae0c64e2011-11-15 15:50:27 +0100320 }
321}
322
Eric Shienbrood9a245532012-03-07 14:20:39 -0500323void CellularCapabilityCDMA::OnActivateReply(
324 const ResultCallback &callback, uint32 status, const Error &error) {
Christopher Wiley1582bdd2012-11-15 11:31:14 -0800325 activation_starting_ = false;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500326 if (error.IsSuccess()) {
327 if (status == MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR) {
328 activation_state_ = MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING;
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800329 } else {
330 LOG(WARNING) << "Modem activation failed with status: "
331 << GetActivationErrorString(status) << " (" << status << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500332 }
333 HandleNewActivationState(status);
Christopher Wiley7d0953e2012-11-16 00:37:10 -0800334 } else {
335 LOG(ERROR) << "Activate() failed with error: " << error;
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500336 }
Eric Shienbrood9a245532012-03-07 14:20:39 -0500337 callback.Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500338}
339
Eric Shienbrood9a245532012-03-07 14:20:39 -0500340void CellularCapabilityCDMA::OnGetRegistrationStateReply(
341 uint32 state_1x, uint32 state_evdo, const Error &error) {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700342 SLOG(Cellular, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500343 if (error.IsSuccess())
344 OnRegistrationStateChangedSignal(state_1x, state_evdo);
345}
346
347void CellularCapabilityCDMA::OnGetSignalQualityReply(uint32 quality,
348 const Error &error) {
349 if (error.IsSuccess())
350 OnSignalQualitySignal(quality);
351}
352
353void CellularCapabilityCDMA::OnActivationStateChangedSignal(
Darin Petkov184c54e2011-11-15 12:44:39 +0100354 uint32 activation_state,
355 uint32 activation_error,
356 const DBusPropertiesMap &status_changes) {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700357 SLOG(Cellular, 2) << __func__;
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500358 DBusProperties::GetString(status_changes, "mdn", &mdn_);
359 DBusProperties::GetString(status_changes, "min", &min_);
Darin Petkov381928f2012-02-02 23:00:12 +0100360 string payment;
361 if (DBusProperties::GetString(status_changes, "payment_url", &payment)) {
362 olp_.SetURL(payment);
363 }
364 if (DBusProperties::GetString(
365 status_changes, "payment_url_method", &payment)) {
366 olp_.SetMethod(payment);
367 }
368 if (DBusProperties::GetString(
369 status_changes, "payment_url_postdata", &payment)) {
370 olp_.SetPostData(payment);
371 }
372 if (cellular()->service().get()) {
373 cellular()->service()->SetOLP(olp_);
Darin Petkov184c54e2011-11-15 12:44:39 +0100374 }
Darin Petkovae0c64e2011-11-15 15:50:27 +0100375 activation_state_ = activation_state;
376 HandleNewActivationState(activation_error);
Darin Petkov184c54e2011-11-15 12:44:39 +0100377}
378
Eric Shienbrood9a245532012-03-07 14:20:39 -0500379void CellularCapabilityCDMA::OnRegistrationStateChangedSignal(
Darin Petkov184c54e2011-11-15 12:44:39 +0100380 uint32 state_1x, uint32 state_evdo) {
Ben Chanfad4a0b2012-04-18 15:49:59 -0700381 SLOG(Cellular, 2) << __func__;
Darin Petkov184c54e2011-11-15 12:44:39 +0100382 registration_state_1x_ = state_1x;
383 registration_state_evdo_ = state_evdo;
384 cellular()->HandleNewRegistrationState();
385}
386
Eric Shienbrood9a245532012-03-07 14:20:39 -0500387void CellularCapabilityCDMA::OnSignalQualitySignal(uint32 strength) {
Darin Petkov3e509242011-11-10 14:46:44 +0100388 cellular()->HandleNewSignalQuality(strength);
389}
390
Darin Petkovdaf43862011-10-27 11:37:28 +0200391} // namespace shill