blob: 37f67ba565d190b1f6af8f09099564da0591c272 [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
7#include <base/logging.h>
8
Eric Shienbrood5de44ab2011-12-05 10:46:27 -05009#include "shill/cellular_error.h"
10#include "shill/error.h"
Ben Chanfad4a0b2012-04-18 15:49:59 -070011#include "shill/scope_logger.h"
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050012
Eric Shienbrood9a245532012-03-07 14:20:39 -050013using base::Callback;
Darin Petkova1e0a1c2011-08-25 15:08:33 -070014using std::string;
15
16namespace shill {
17
18ModemGSMNetworkProxy::ModemGSMNetworkProxy(
Darin Petkova1e0a1c2011-08-25 15:08:33 -070019 DBus::Connection *connection,
20 const string &path,
21 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050022 : proxy_(connection, path, service) {}
Darin Petkova1e0a1c2011-08-25 15:08:33 -070023
24ModemGSMNetworkProxy::~ModemGSMNetworkProxy() {}
25
Eric Shienbrood9a245532012-03-07 14:20:39 -050026void ModemGSMNetworkProxy::GetRegistrationInfo(
27 Error *error,
28 const RegistrationInfoCallback &callback,
29 int timeout) {
30 scoped_ptr<RegistrationInfoCallback>
31 cb(new RegistrationInfoCallback(callback));
32 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070033 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050034 proxy_.GetRegistrationInfo(cb.get(), timeout);
35 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070036 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050037 if (error)
38 CellularError::FromDBusError(e, error);
39 }
Darin Petkov9bac6fe2011-08-26 12:49:05 -070040}
41
Eric Shienbrood9a245532012-03-07 14:20:39 -050042void ModemGSMNetworkProxy::GetSignalQuality(
43 Error *error,
44 const SignalQualityCallback &callback,
45 int timeout) {
46 scoped_ptr<SignalQualityCallback> cb(new SignalQualityCallback(callback));
47 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070048 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050049 proxy_.GetSignalQuality(cb.get(), timeout);
50 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070051 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050052 if (error)
53 CellularError::FromDBusError(e, error);
54 }
Darin Petkov22b72bf2011-08-29 14:01:20 -070055}
56
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050057void ModemGSMNetworkProxy::Register(const string &network_id,
Eric Shienbrood9a245532012-03-07 14:20:39 -050058 Error *error,
59 const ResultCallback &callback,
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050060 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050061 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
62 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070063 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050064 proxy_.Register(network_id, cb.get(), timeout);
65 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070066 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050067 if (error)
68 CellularError::FromDBusError(e, error);
69 }
Darin Petkov22b72bf2011-08-29 14:01:20 -070070}
71
Eric Shienbrood9a245532012-03-07 14:20:39 -050072void ModemGSMNetworkProxy::Scan(Error *error,
73 const ScanResultsCallback &callback,
74 int timeout) {
75 scoped_ptr<ScanResultsCallback> cb(new ScanResultsCallback(callback));
76 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070077 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050078 proxy_.Scan(cb.get(), timeout);
79 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070080 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050081 if (error)
82 CellularError::FromDBusError(e, error);
83 }
Darin Petkovc0865312011-09-16 15:31:20 -070084}
85
Darin Petkov9bac6fe2011-08-26 12:49:05 -070086uint32 ModemGSMNetworkProxy::AccessTechnology() {
mukesh agrawal06175d72012-04-23 16:46:01 -070087 SLOG(DBus, 2) << __func__;
Gary Morain610977f2012-05-04 16:03:52 -070088 try {
Darin Petkov9bac6fe2011-08-26 12:49:05 -070089 return proxy_.AccessTechnology();
Gary Morain610977f2012-05-04 16:03:52 -070090 } catch (const DBus::Error &e) {
91 LOG(FATAL) << "DBus exception: " << e.name() << ": " << e.what();
92 return 0; // Make the compiler happy.
93 }
Darin Petkov9bac6fe2011-08-26 12:49:05 -070094}
95
Eric Shienbrood9a245532012-03-07 14:20:39 -050096void ModemGSMNetworkProxy::set_signal_quality_callback(
97 const SignalQualitySignalCallback &callback) {
98 proxy_.set_signal_quality_callback(callback);
99}
100
101void ModemGSMNetworkProxy::set_network_mode_callback(
102 const NetworkModeSignalCallback &callback) {
103 proxy_.set_network_mode_callback(callback);
104}
105
106void ModemGSMNetworkProxy::set_registration_info_callback(
107 const RegistrationInfoSignalCallback &callback) {
108 proxy_.set_registration_info_callback(callback);
109}
110
111ModemGSMNetworkProxy::Proxy::Proxy(DBus::Connection *connection,
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700112 const string &path,
113 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -0500114 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700115
116ModemGSMNetworkProxy::Proxy::~Proxy() {}
117
Eric Shienbrood9a245532012-03-07 14:20:39 -0500118void ModemGSMNetworkProxy::Proxy::set_signal_quality_callback(
119 const SignalQualitySignalCallback &callback) {
120 signal_quality_callback_ = callback;
121}
122
123void ModemGSMNetworkProxy::Proxy::set_network_mode_callback(
124 const NetworkModeSignalCallback &callback) {
125 network_mode_callback_ = callback;
126}
127
128void ModemGSMNetworkProxy::Proxy::set_registration_info_callback(
129 const RegistrationInfoSignalCallback &callback) {
130 registration_info_callback_ = callback;
131}
132
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700133void ModemGSMNetworkProxy::Proxy::SignalQuality(const uint32 &quality) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700134 SLOG(DBus, 2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500135 if (!signal_quality_callback_.is_null())
136 signal_quality_callback_.Run(quality);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700137}
138
139void ModemGSMNetworkProxy::Proxy::RegistrationInfo(
140 const uint32_t &status,
141 const string &operator_code,
142 const string &operator_name) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700143 SLOG(DBus, 2) << __func__ << "(" << status << ", " << operator_code << ", "
Ben Chanfad4a0b2012-04-18 15:49:59 -0700144 << operator_name << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500145 if (!registration_info_callback_.is_null())
146 registration_info_callback_.Run(status, operator_code, operator_name);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700147}
148
149void ModemGSMNetworkProxy::Proxy::NetworkMode(const uint32_t &mode) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700150 SLOG(DBus, 2) << __func__ << "(" << mode << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500151 if (!network_mode_callback_.is_null())
152 network_mode_callback_.Run(mode);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700153}
154
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500155void ModemGSMNetworkProxy::Proxy::RegisterCallback(const DBus::Error &dberror,
156 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700157 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500158 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500159 Error error;
160 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500161 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500162}
163
164void ModemGSMNetworkProxy::Proxy::GetRegistrationInfoCallback(
165 const GSMRegistrationInfo &info, const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700166 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500167 scoped_ptr<RegistrationInfoCallback> callback(
168 reinterpret_cast<RegistrationInfoCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500169 Error error;
170 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500171 callback->Run(info._1, info._2, info._3, error);
172}
173
174void ModemGSMNetworkProxy::Proxy::GetSignalQualityCallback(
175 const uint32 &quality, const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700176 SLOG(DBus, 2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500177 scoped_ptr<SignalQualityCallback> callback(
178 reinterpret_cast<SignalQualityCallback *>(data));
179 Error error;
180 CellularError::FromDBusError(dberror, &error);
181 callback->Run(quality, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500182}
183
184void ModemGSMNetworkProxy::Proxy::ScanCallback(const GSMScanResults &results,
185 const DBus::Error &dberror,
186 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700187 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500188 scoped_ptr<ScanResultsCallback> callback(
189 reinterpret_cast<ScanResultsCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500190 Error error;
191 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500192 callback->Run(results, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500193}
194
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700195} // namespace shill