blob: 22bcac6a961b9dd1fe5c28911f4d82191472b818 [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"
11
Eric Shienbrood9a245532012-03-07 14:20:39 -050012using base::Callback;
Darin Petkova1e0a1c2011-08-25 15:08:33 -070013using std::string;
14
15namespace shill {
16
17ModemGSMNetworkProxy::ModemGSMNetworkProxy(
Darin Petkova1e0a1c2011-08-25 15:08:33 -070018 DBus::Connection *connection,
19 const string &path,
20 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050021 : proxy_(connection, path, service) {}
Darin Petkova1e0a1c2011-08-25 15:08:33 -070022
23ModemGSMNetworkProxy::~ModemGSMNetworkProxy() {}
24
Eric Shienbrood9a245532012-03-07 14:20:39 -050025void ModemGSMNetworkProxy::GetRegistrationInfo(
26 Error *error,
27 const RegistrationInfoCallback &callback,
28 int timeout) {
29 scoped_ptr<RegistrationInfoCallback>
30 cb(new RegistrationInfoCallback(callback));
31 try {
32 proxy_.GetRegistrationInfo(cb.get(), timeout);
33 cb.release();
34 } catch (DBus::Error e) {
35 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 {
46 proxy_.GetSignalQuality(cb.get(), timeout);
47 cb.release();
48 } catch (DBus::Error e) {
49 if (error)
50 CellularError::FromDBusError(e, error);
51 }
Darin Petkov22b72bf2011-08-29 14:01:20 -070052}
53
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050054void ModemGSMNetworkProxy::Register(const string &network_id,
Eric Shienbrood9a245532012-03-07 14:20:39 -050055 Error *error,
56 const ResultCallback &callback,
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050057 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050058 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
59 try {
60 proxy_.Register(network_id, cb.get(), timeout);
61 cb.release();
62 } catch (DBus::Error e) {
63 if (error)
64 CellularError::FromDBusError(e, error);
65 }
Darin Petkov22b72bf2011-08-29 14:01:20 -070066}
67
Eric Shienbrood9a245532012-03-07 14:20:39 -050068void ModemGSMNetworkProxy::Scan(Error *error,
69 const ScanResultsCallback &callback,
70 int timeout) {
71 scoped_ptr<ScanResultsCallback> cb(new ScanResultsCallback(callback));
72 try {
73 proxy_.Scan(cb.get(), timeout);
74 cb.release();
75 } catch (DBus::Error e) {
76 if (error)
77 CellularError::FromDBusError(e, error);
78 }
Darin Petkovc0865312011-09-16 15:31:20 -070079}
80
Darin Petkov9bac6fe2011-08-26 12:49:05 -070081uint32 ModemGSMNetworkProxy::AccessTechnology() {
82 return proxy_.AccessTechnology();
83}
84
Eric Shienbrood9a245532012-03-07 14:20:39 -050085void ModemGSMNetworkProxy::set_signal_quality_callback(
86 const SignalQualitySignalCallback &callback) {
87 proxy_.set_signal_quality_callback(callback);
88}
89
90void ModemGSMNetworkProxy::set_network_mode_callback(
91 const NetworkModeSignalCallback &callback) {
92 proxy_.set_network_mode_callback(callback);
93}
94
95void ModemGSMNetworkProxy::set_registration_info_callback(
96 const RegistrationInfoSignalCallback &callback) {
97 proxy_.set_registration_info_callback(callback);
98}
99
100ModemGSMNetworkProxy::Proxy::Proxy(DBus::Connection *connection,
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700101 const string &path,
102 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -0500103 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700104
105ModemGSMNetworkProxy::Proxy::~Proxy() {}
106
Eric Shienbrood9a245532012-03-07 14:20:39 -0500107void ModemGSMNetworkProxy::Proxy::set_signal_quality_callback(
108 const SignalQualitySignalCallback &callback) {
109 signal_quality_callback_ = callback;
110}
111
112void ModemGSMNetworkProxy::Proxy::set_network_mode_callback(
113 const NetworkModeSignalCallback &callback) {
114 network_mode_callback_ = callback;
115}
116
117void ModemGSMNetworkProxy::Proxy::set_registration_info_callback(
118 const RegistrationInfoSignalCallback &callback) {
119 registration_info_callback_ = callback;
120}
121
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700122void ModemGSMNetworkProxy::Proxy::SignalQuality(const uint32 &quality) {
123 VLOG(2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500124 if (!signal_quality_callback_.is_null())
125 signal_quality_callback_.Run(quality);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700126}
127
128void ModemGSMNetworkProxy::Proxy::RegistrationInfo(
129 const uint32_t &status,
130 const string &operator_code,
131 const string &operator_name) {
132 VLOG(2) << __func__ << "(" << status << ", " << operator_code << ", "
133 << operator_name << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500134 if (!registration_info_callback_.is_null())
135 registration_info_callback_.Run(status, operator_code, operator_name);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700136}
137
138void ModemGSMNetworkProxy::Proxy::NetworkMode(const uint32_t &mode) {
139 VLOG(2) << __func__ << "(" << mode << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500140 if (!network_mode_callback_.is_null())
141 network_mode_callback_.Run(mode);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700142}
143
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500144void ModemGSMNetworkProxy::Proxy::RegisterCallback(const DBus::Error &dberror,
145 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500146 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500147 Error error;
148 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500149 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500150}
151
152void ModemGSMNetworkProxy::Proxy::GetRegistrationInfoCallback(
153 const GSMRegistrationInfo &info, const DBus::Error &dberror, void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500154 scoped_ptr<RegistrationInfoCallback> callback(
155 reinterpret_cast<RegistrationInfoCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500156 Error error;
157 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500158 callback->Run(info._1, info._2, info._3, error);
159}
160
161void ModemGSMNetworkProxy::Proxy::GetSignalQualityCallback(
162 const uint32 &quality, const DBus::Error &dberror, void *data) {
163 VLOG(2) << __func__ << "(" << quality << ")";
164 scoped_ptr<SignalQualityCallback> callback(
165 reinterpret_cast<SignalQualityCallback *>(data));
166 Error error;
167 CellularError::FromDBusError(dberror, &error);
168 callback->Run(quality, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500169}
170
171void ModemGSMNetworkProxy::Proxy::ScanCallback(const GSMScanResults &results,
172 const DBus::Error &dberror,
173 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500174 scoped_ptr<ScanResultsCallback> callback(
175 reinterpret_cast<ScanResultsCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500176 Error error;
177 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500178 callback->Run(results, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500179}
180
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700181} // namespace shill