shill: Connect the device on start when the modem is already connected.

BUG=chromium-os:18727
TEST=unit tests, tested on device

Change-Id: I9657cfd4423fa17c2f34973df5880db520a8662c
Reviewed-on: http://gerrit.chromium.org/gerrit/5584
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Chris Masone <cmasone@chromium.org>
diff --git a/modem.cc b/modem.cc
index 37d52fd..58cab52 100644
--- a/modem.cc
+++ b/modem.cc
@@ -20,6 +20,7 @@
 // TODO(petkov): Consider generating these in mm/mm-modem.h.
 const char Modem::kPropertyLinkName[] = "Device";
 const char Modem::kPropertyIPMethod[] = "IpMethod";
+const char Modem::kPropertyState[] = "State";
 const char Modem::kPropertyType[] = "Type";
 const char Modem::kPropertyUnlockRequired[] = "UnlockRequired";
 const char Modem::kPropertyUnlockRetries[] = "UnlockRetries";
@@ -98,8 +99,6 @@
       return;
   }
 
-  // TODO(petkov): Handle the "State" property?
-
   LOG(INFO) << "Creating a cellular device on link " << link_name
             << " interface index " << interface_index << ".";
   device_ = new Cellular(control_interface_,
@@ -110,7 +109,10 @@
                          type,
                          owner_,
                          path_);
-  manager_->device_info()->RegisterDevice(device_);
+
+  uint32 modem_state = Cellular::kModemStateUnknown;
+  DBusProperties::GetUint32(properties, kPropertyState, &modem_state);
+  device_->set_modem_state(static_cast<Cellular::ModemState>(modem_state));
 
   string unlock_required;
   if (DBusProperties::GetString(
@@ -121,6 +123,8 @@
                               &unlock_retries);
     // TODO(petkov): Set these properties on the device instance.
   }
+
+  manager_->device_info()->RegisterDevice(device_);
 }
 
 void Modem::OnDBusPropertiesChanged(