shill: Register the modem, create service and obtain signal strength.

Also, listen for registration info and signal quality change notifications.

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

Change-Id: I19e5e97257bc53f2004d6b7f0606da2553be4b5d
Reviewed-on: http://gerrit.chromium.org/gerrit/5328
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/modem_cdma_proxy.cc b/modem_cdma_proxy.cc
index aab7c4a..4380c2d 100644
--- a/modem_cdma_proxy.cc
+++ b/modem_cdma_proxy.cc
@@ -10,10 +10,11 @@
 
 namespace shill {
 
-ModemCDMAProxy::ModemCDMAProxy(DBus::Connection *connection,
+ModemCDMAProxy::ModemCDMAProxy(ModemCDMAProxyListener *listener,
+                               DBus::Connection *connection,
                                const string &path,
                                const string &service)
-    : proxy_(connection, path, service) {}
+    : proxy_(listener, connection, path, service) {}
 
 ModemCDMAProxy::~ModemCDMAProxy() {}
 
@@ -22,10 +23,16 @@
   proxy_.GetRegistrationState(*cdma_1x_state, *evdo_state);
 }
 
-ModemCDMAProxy::Proxy::Proxy(DBus::Connection *connection,
+uint32 ModemCDMAProxy::GetSignalQuality() {
+  return proxy_.GetSignalQuality();
+}
+
+ModemCDMAProxy::Proxy::Proxy(ModemCDMAProxyListener *listener,
+                             DBus::Connection *connection,
                              const string &path,
                              const string &service)
-    : DBus::ObjectProxy(*connection, path, service.c_str()) {}
+    : DBus::ObjectProxy(*connection, path, service.c_str()),
+      listener_(listener) {}
 
 ModemCDMAProxy::Proxy::~Proxy() {}
 
@@ -39,17 +46,15 @@
 }
 
 void ModemCDMAProxy::Proxy::SignalQuality(const uint32 &quality) {
-  VLOG(2) << __func__;
-  // TODO(petkov): Implement this.
-  NOTIMPLEMENTED();
+  VLOG(2) << __func__ << "(" << quality << ")";
+  listener_->OnCDMASignalQualityChanged(quality);
 }
 
 void ModemCDMAProxy::Proxy::RegistrationStateChanged(
-    const uint32_t &cdma_1x_state,
-    const uint32_t &evdo_state) {
-  VLOG(2) << __func__;
-  // TODO(petkov): Implement this.
-  NOTIMPLEMENTED();
+    const uint32 &cdma_1x_state,
+    const uint32 &evdo_state) {
+  VLOG(2) << __func__ << "(" << cdma_1x_state << ", " << evdo_state << ")";
+  listener_->OnCDMARegistrationStateChanged(cdma_1x_state, evdo_state);
 }
 
 }  // namespace shill