blob: 8fdb9e9a812b8c1c40689006e9cedd022e63c3a0 [file] [log] [blame]
Eric Shienbrood5de44ab2011-12-05 10:46:27 -05001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkova1e0a1c2011-08-25 15:08:33 -07002// 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/modem_gsm_network_proxy.h"
6
Eric Shienbrood5de44ab2011-12-05 10:46:27 -05007#include "shill/cellular_error.h"
8#include "shill/error.h"
Christopher Wileyb691efd2012-08-09 13:51:51 -07009#include "shill/logging.h"
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050010
Eric Shienbrood9a245532012-03-07 14:20:39 -050011using base::Callback;
Darin Petkova1e0a1c2011-08-25 15:08:33 -070012using std::string;
13
14namespace shill {
15
16ModemGSMNetworkProxy::ModemGSMNetworkProxy(
Darin Petkova1e0a1c2011-08-25 15:08:33 -070017 DBus::Connection *connection,
18 const string &path,
19 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050020 : proxy_(connection, path, service) {}
Darin Petkova1e0a1c2011-08-25 15:08:33 -070021
22ModemGSMNetworkProxy::~ModemGSMNetworkProxy() {}
23
Eric Shienbrood9a245532012-03-07 14:20:39 -050024void ModemGSMNetworkProxy::GetRegistrationInfo(
25 Error *error,
26 const RegistrationInfoCallback &callback,
27 int timeout) {
28 scoped_ptr<RegistrationInfoCallback>
29 cb(new RegistrationInfoCallback(callback));
30 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070031 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050032 proxy_.GetRegistrationInfo(cb.get(), timeout);
33 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070034 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050035 if (error)
36 CellularError::FromDBusError(e, error);
37 }
Darin Petkov9bac6fe2011-08-26 12:49:05 -070038}
39
Eric Shienbrood9a245532012-03-07 14:20:39 -050040void ModemGSMNetworkProxy::GetSignalQuality(
41 Error *error,
42 const SignalQualityCallback &callback,
43 int timeout) {
44 scoped_ptr<SignalQualityCallback> cb(new SignalQualityCallback(callback));
45 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070046 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050047 proxy_.GetSignalQuality(cb.get(), timeout);
48 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070049 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050050 if (error)
51 CellularError::FromDBusError(e, error);
52 }
Darin Petkov22b72bf2011-08-29 14:01:20 -070053}
54
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050055void ModemGSMNetworkProxy::Register(const string &network_id,
Eric Shienbrood9a245532012-03-07 14:20:39 -050056 Error *error,
57 const ResultCallback &callback,
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050058 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050059 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
60 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070061 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050062 proxy_.Register(network_id, cb.get(), timeout);
63 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070064 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050065 if (error)
66 CellularError::FromDBusError(e, error);
67 }
Darin Petkov22b72bf2011-08-29 14:01:20 -070068}
69
Eric Shienbrood9a245532012-03-07 14:20:39 -050070void ModemGSMNetworkProxy::Scan(Error *error,
71 const ScanResultsCallback &callback,
72 int timeout) {
73 scoped_ptr<ScanResultsCallback> cb(new ScanResultsCallback(callback));
74 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070075 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050076 proxy_.Scan(cb.get(), timeout);
77 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070078 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050079 if (error)
80 CellularError::FromDBusError(e, error);
81 }
Darin Petkovc0865312011-09-16 15:31:20 -070082}
83
Darin Petkov9bac6fe2011-08-26 12:49:05 -070084uint32 ModemGSMNetworkProxy::AccessTechnology() {
mukesh agrawal06175d72012-04-23 16:46:01 -070085 SLOG(DBus, 2) << __func__;
Gary Morain610977f2012-05-04 16:03:52 -070086 try {
Darin Petkov9bac6fe2011-08-26 12:49:05 -070087 return proxy_.AccessTechnology();
Gary Morain610977f2012-05-04 16:03:52 -070088 } catch (const DBus::Error &e) {
89 LOG(FATAL) << "DBus exception: " << e.name() << ": " << e.what();
90 return 0; // Make the compiler happy.
91 }
Darin Petkov9bac6fe2011-08-26 12:49:05 -070092}
93
Eric Shienbrood9a245532012-03-07 14:20:39 -050094void ModemGSMNetworkProxy::set_signal_quality_callback(
95 const SignalQualitySignalCallback &callback) {
96 proxy_.set_signal_quality_callback(callback);
97}
98
99void ModemGSMNetworkProxy::set_network_mode_callback(
100 const NetworkModeSignalCallback &callback) {
101 proxy_.set_network_mode_callback(callback);
102}
103
104void ModemGSMNetworkProxy::set_registration_info_callback(
105 const RegistrationInfoSignalCallback &callback) {
106 proxy_.set_registration_info_callback(callback);
107}
108
109ModemGSMNetworkProxy::Proxy::Proxy(DBus::Connection *connection,
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700110 const string &path,
111 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -0500112 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700113
114ModemGSMNetworkProxy::Proxy::~Proxy() {}
115
Eric Shienbrood9a245532012-03-07 14:20:39 -0500116void ModemGSMNetworkProxy::Proxy::set_signal_quality_callback(
117 const SignalQualitySignalCallback &callback) {
118 signal_quality_callback_ = callback;
119}
120
121void ModemGSMNetworkProxy::Proxy::set_network_mode_callback(
122 const NetworkModeSignalCallback &callback) {
123 network_mode_callback_ = callback;
124}
125
126void ModemGSMNetworkProxy::Proxy::set_registration_info_callback(
127 const RegistrationInfoSignalCallback &callback) {
128 registration_info_callback_ = callback;
129}
130
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700131void ModemGSMNetworkProxy::Proxy::SignalQuality(const uint32 &quality) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700132 SLOG(DBus, 2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500133 if (!signal_quality_callback_.is_null())
134 signal_quality_callback_.Run(quality);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700135}
136
137void ModemGSMNetworkProxy::Proxy::RegistrationInfo(
138 const uint32_t &status,
139 const string &operator_code,
140 const string &operator_name) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700141 SLOG(DBus, 2) << __func__ << "(" << status << ", " << operator_code << ", "
Ben Chanfad4a0b2012-04-18 15:49:59 -0700142 << operator_name << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500143 if (!registration_info_callback_.is_null())
144 registration_info_callback_.Run(status, operator_code, operator_name);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700145}
146
147void ModemGSMNetworkProxy::Proxy::NetworkMode(const uint32_t &mode) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700148 SLOG(DBus, 2) << __func__ << "(" << mode << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500149 if (!network_mode_callback_.is_null())
150 network_mode_callback_.Run(mode);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700151}
152
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500153void ModemGSMNetworkProxy::Proxy::RegisterCallback(const DBus::Error &dberror,
154 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700155 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500156 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500157 Error error;
158 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500159 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500160}
161
162void ModemGSMNetworkProxy::Proxy::GetRegistrationInfoCallback(
163 const GSMRegistrationInfo &info, const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700164 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500165 scoped_ptr<RegistrationInfoCallback> callback(
166 reinterpret_cast<RegistrationInfoCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500167 Error error;
168 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500169 callback->Run(info._1, info._2, info._3, error);
170}
171
172void ModemGSMNetworkProxy::Proxy::GetSignalQualityCallback(
173 const uint32 &quality, const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700174 SLOG(DBus, 2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500175 scoped_ptr<SignalQualityCallback> callback(
176 reinterpret_cast<SignalQualityCallback *>(data));
177 Error error;
178 CellularError::FromDBusError(dberror, &error);
179 callback->Run(quality, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500180}
181
182void ModemGSMNetworkProxy::Proxy::ScanCallback(const GSMScanResults &results,
183 const DBus::Error &dberror,
184 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700185 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500186 scoped_ptr<ScanResultsCallback> callback(
187 reinterpret_cast<ScanResultsCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500188 Error error;
189 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500190 callback->Run(results, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500191}
192
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700193} // namespace shill