blob: b3f59bfc54ae72f051bdd0fbab19ced5ca5dabae [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();
36 } catch (DBus::Error e) {
37 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();
51 } catch (DBus::Error e) {
52 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();
66 } catch (DBus::Error e) {
67 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();
80 } catch (DBus::Error e) {
81 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__;
Darin Petkov9bac6fe2011-08-26 12:49:05 -070088 return proxy_.AccessTechnology();
89}
90
Eric Shienbrood9a245532012-03-07 14:20:39 -050091void ModemGSMNetworkProxy::set_signal_quality_callback(
92 const SignalQualitySignalCallback &callback) {
93 proxy_.set_signal_quality_callback(callback);
94}
95
96void ModemGSMNetworkProxy::set_network_mode_callback(
97 const NetworkModeSignalCallback &callback) {
98 proxy_.set_network_mode_callback(callback);
99}
100
101void ModemGSMNetworkProxy::set_registration_info_callback(
102 const RegistrationInfoSignalCallback &callback) {
103 proxy_.set_registration_info_callback(callback);
104}
105
106ModemGSMNetworkProxy::Proxy::Proxy(DBus::Connection *connection,
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700107 const string &path,
108 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -0500109 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700110
111ModemGSMNetworkProxy::Proxy::~Proxy() {}
112
Eric Shienbrood9a245532012-03-07 14:20:39 -0500113void ModemGSMNetworkProxy::Proxy::set_signal_quality_callback(
114 const SignalQualitySignalCallback &callback) {
115 signal_quality_callback_ = callback;
116}
117
118void ModemGSMNetworkProxy::Proxy::set_network_mode_callback(
119 const NetworkModeSignalCallback &callback) {
120 network_mode_callback_ = callback;
121}
122
123void ModemGSMNetworkProxy::Proxy::set_registration_info_callback(
124 const RegistrationInfoSignalCallback &callback) {
125 registration_info_callback_ = callback;
126}
127
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700128void ModemGSMNetworkProxy::Proxy::SignalQuality(const uint32 &quality) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700129 SLOG(DBus, 2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500130 if (!signal_quality_callback_.is_null())
131 signal_quality_callback_.Run(quality);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700132}
133
134void ModemGSMNetworkProxy::Proxy::RegistrationInfo(
135 const uint32_t &status,
136 const string &operator_code,
137 const string &operator_name) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700138 SLOG(DBus, 2) << __func__ << "(" << status << ", " << operator_code << ", "
Ben Chanfad4a0b2012-04-18 15:49:59 -0700139 << operator_name << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500140 if (!registration_info_callback_.is_null())
141 registration_info_callback_.Run(status, operator_code, operator_name);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700142}
143
144void ModemGSMNetworkProxy::Proxy::NetworkMode(const uint32_t &mode) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700145 SLOG(DBus, 2) << __func__ << "(" << mode << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500146 if (!network_mode_callback_.is_null())
147 network_mode_callback_.Run(mode);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700148}
149
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500150void ModemGSMNetworkProxy::Proxy::RegisterCallback(const DBus::Error &dberror,
151 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700152 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500153 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500154 Error error;
155 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500156 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500157}
158
159void ModemGSMNetworkProxy::Proxy::GetRegistrationInfoCallback(
160 const GSMRegistrationInfo &info, const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700161 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500162 scoped_ptr<RegistrationInfoCallback> callback(
163 reinterpret_cast<RegistrationInfoCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500164 Error error;
165 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500166 callback->Run(info._1, info._2, info._3, error);
167}
168
169void ModemGSMNetworkProxy::Proxy::GetSignalQualityCallback(
170 const uint32 &quality, const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700171 SLOG(DBus, 2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500172 scoped_ptr<SignalQualityCallback> callback(
173 reinterpret_cast<SignalQualityCallback *>(data));
174 Error error;
175 CellularError::FromDBusError(dberror, &error);
176 callback->Run(quality, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500177}
178
179void ModemGSMNetworkProxy::Proxy::ScanCallback(const GSMScanResults &results,
180 const DBus::Error &dberror,
181 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700182 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500183 scoped_ptr<ScanResultsCallback> callback(
184 reinterpret_cast<ScanResultsCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500185 Error error;
186 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500187 callback->Run(results, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500188}
189
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700190} // namespace shill