shill: Move CDMA activation to capability delegates.
BUG=chromium-os:18735
TEST=unit tests
Change-Id: If69af7576c939eed8397797de3a2a88f7fd079e6
Reviewed-on: https://gerrit.chromium.org/gerrit/11632
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Jason Glasgow <jglasgow@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/cellular_capability_cdma.cc b/cellular_capability_cdma.cc
index ba20d94..4cef643 100644
--- a/cellular_capability_cdma.cc
+++ b/cellular_capability_cdma.cc
@@ -16,7 +16,8 @@
namespace shill {
CellularCapabilityCDMA::CellularCapabilityCDMA(Cellular *cellular)
- : CellularCapability(cellular) {}
+ : CellularCapability(cellular),
+ task_factory_(this) {}
void CellularCapabilityCDMA::InitProxies() {
VLOG(2) << __func__;
@@ -27,6 +28,38 @@
cellular()->dbus_owner()));
}
+void CellularCapabilityCDMA::Activate(const string &carrier, Error *error) {
+ VLOG(2) << __func__ << "(" << carrier << ")";
+ if (cellular()->state() != Cellular::kStateEnabled &&
+ cellular()->state() != Cellular::kStateRegistered) {
+ Error::PopulateAndLog(error, Error::kInvalidArguments,
+ "Unable to activate in " +
+ Cellular::GetStateString(cellular()->state()));
+ return;
+ }
+ // Defer because we may be in a dbus-c++ callback.
+ dispatcher()->PostTask(
+ task_factory_.NewRunnableMethod(
+ &CellularCapabilityCDMA::ActivateTask, carrier));
+}
+
+void CellularCapabilityCDMA::ActivateTask(const string &carrier) {
+ VLOG(2) << __func__ << "(" << carrier << ")";
+ if (cellular()->state() != Cellular::kStateEnabled &&
+ cellular()->state() != Cellular::kStateRegistered) {
+ LOG(ERROR) << "Unable to activate in "
+ << Cellular::GetStateString(cellular()->state());
+ return;
+ }
+ // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
+ uint32 status = cellular()->modem_cdma_proxy()->Activate(carrier);
+ if (status == MM_MODEM_CDMA_ACTIVATION_ERROR_NO_ERROR) {
+ cellular()->set_cdma_activation_state(
+ MM_MODEM_CDMA_ACTIVATION_STATE_ACTIVATING);
+ }
+ cellular()->HandleNewCDMAActivationState(status);
+}
+
void CellularCapabilityCDMA::GetIdentifiers() {
VLOG(2) << __func__;
if (cellular()->meid().empty()) {