blob: 7d19a2bc5cfd7e13170bbfab3f3667d046a6414a [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"
mukesh agrawal0e9e9d12014-04-18 16:09:58 -07008#include "shill/dbus_async_call_helper.h"
Eric Shienbrood5de44ab2011-12-05 10:46:27 -05009#include "shill/error.h"
Christopher Wileyb691efd2012-08-09 13:51:51 -070010#include "shill/logging.h"
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050011
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) {
mukesh agrawal0e9e9d12014-04-18 16:09:58 -070029 BeginAsyncDBusCall(__func__, proxy_, &Proxy::GetRegistrationInfoAsync,
30 callback, error, &CellularError::FromDBusError, timeout);
Darin Petkov9bac6fe2011-08-26 12:49:05 -070031}
32
Eric Shienbrood9a245532012-03-07 14:20:39 -050033void ModemGSMNetworkProxy::GetSignalQuality(
34 Error *error,
35 const SignalQualityCallback &callback,
36 int timeout) {
mukesh agrawal0e9e9d12014-04-18 16:09:58 -070037 BeginAsyncDBusCall(__func__, proxy_, &Proxy::GetSignalQualityAsync, callback,
38 error, &CellularError::FromDBusError, timeout);
Darin Petkov22b72bf2011-08-29 14:01:20 -070039}
40
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050041void ModemGSMNetworkProxy::Register(const string &network_id,
Eric Shienbrood9a245532012-03-07 14:20:39 -050042 Error *error,
43 const ResultCallback &callback,
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050044 int timeout) {
mukesh agrawal0e9e9d12014-04-18 16:09:58 -070045 BeginAsyncDBusCall(__func__, proxy_, &Proxy::RegisterAsync, callback,
46 error, &CellularError::FromDBusError, timeout,
47 network_id);
Darin Petkov22b72bf2011-08-29 14:01:20 -070048}
49
Eric Shienbrood9a245532012-03-07 14:20:39 -050050void ModemGSMNetworkProxy::Scan(Error *error,
51 const ScanResultsCallback &callback,
52 int timeout) {
mukesh agrawal0e9e9d12014-04-18 16:09:58 -070053 BeginAsyncDBusCall(__func__, proxy_, &Proxy::ScanAsync, callback,
54 error, &CellularError::FromDBusError, timeout);
Darin Petkovc0865312011-09-16 15:31:20 -070055}
56
Darin Petkov9bac6fe2011-08-26 12:49:05 -070057uint32 ModemGSMNetworkProxy::AccessTechnology() {
mukesh agrawal06175d72012-04-23 16:46:01 -070058 SLOG(DBus, 2) << __func__;
Gary Morain610977f2012-05-04 16:03:52 -070059 try {
Darin Petkov9bac6fe2011-08-26 12:49:05 -070060 return proxy_.AccessTechnology();
Gary Morain610977f2012-05-04 16:03:52 -070061 } catch (const DBus::Error &e) {
62 LOG(FATAL) << "DBus exception: " << e.name() << ": " << e.what();
63 return 0; // Make the compiler happy.
64 }
Darin Petkov9bac6fe2011-08-26 12:49:05 -070065}
66
Eric Shienbrood9a245532012-03-07 14:20:39 -050067void ModemGSMNetworkProxy::set_signal_quality_callback(
68 const SignalQualitySignalCallback &callback) {
69 proxy_.set_signal_quality_callback(callback);
70}
71
72void ModemGSMNetworkProxy::set_network_mode_callback(
73 const NetworkModeSignalCallback &callback) {
74 proxy_.set_network_mode_callback(callback);
75}
76
77void ModemGSMNetworkProxy::set_registration_info_callback(
78 const RegistrationInfoSignalCallback &callback) {
79 proxy_.set_registration_info_callback(callback);
80}
81
82ModemGSMNetworkProxy::Proxy::Proxy(DBus::Connection *connection,
Darin Petkova1e0a1c2011-08-25 15:08:33 -070083 const string &path,
84 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050085 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Darin Petkova1e0a1c2011-08-25 15:08:33 -070086
87ModemGSMNetworkProxy::Proxy::~Proxy() {}
88
Eric Shienbrood9a245532012-03-07 14:20:39 -050089void ModemGSMNetworkProxy::Proxy::set_signal_quality_callback(
90 const SignalQualitySignalCallback &callback) {
91 signal_quality_callback_ = callback;
92}
93
94void ModemGSMNetworkProxy::Proxy::set_network_mode_callback(
95 const NetworkModeSignalCallback &callback) {
96 network_mode_callback_ = callback;
97}
98
99void ModemGSMNetworkProxy::Proxy::set_registration_info_callback(
100 const RegistrationInfoSignalCallback &callback) {
101 registration_info_callback_ = callback;
102}
103
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700104void ModemGSMNetworkProxy::Proxy::SignalQuality(const uint32 &quality) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700105 SLOG(DBus, 2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500106 if (!signal_quality_callback_.is_null())
107 signal_quality_callback_.Run(quality);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700108}
109
110void ModemGSMNetworkProxy::Proxy::RegistrationInfo(
111 const uint32_t &status,
112 const string &operator_code,
113 const string &operator_name) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700114 SLOG(DBus, 2) << __func__ << "(" << status << ", " << operator_code << ", "
Ben Chanfad4a0b2012-04-18 15:49:59 -0700115 << operator_name << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500116 if (!registration_info_callback_.is_null())
117 registration_info_callback_.Run(status, operator_code, operator_name);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700118}
119
120void ModemGSMNetworkProxy::Proxy::NetworkMode(const uint32_t &mode) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700121 SLOG(DBus, 2) << __func__ << "(" << mode << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500122 if (!network_mode_callback_.is_null())
123 network_mode_callback_.Run(mode);
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700124}
125
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500126void ModemGSMNetworkProxy::Proxy::RegisterCallback(const DBus::Error &dberror,
127 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700128 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500129 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500130 Error error;
131 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500132 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500133}
134
135void ModemGSMNetworkProxy::Proxy::GetRegistrationInfoCallback(
136 const GSMRegistrationInfo &info, const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700137 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500138 scoped_ptr<RegistrationInfoCallback> callback(
139 reinterpret_cast<RegistrationInfoCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500140 Error error;
141 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500142 callback->Run(info._1, info._2, info._3, error);
143}
144
145void ModemGSMNetworkProxy::Proxy::GetSignalQualityCallback(
146 const uint32 &quality, const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700147 SLOG(DBus, 2) << __func__ << "(" << quality << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -0500148 scoped_ptr<SignalQualityCallback> callback(
149 reinterpret_cast<SignalQualityCallback *>(data));
150 Error error;
151 CellularError::FromDBusError(dberror, &error);
152 callback->Run(quality, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500153}
154
155void ModemGSMNetworkProxy::Proxy::ScanCallback(const GSMScanResults &results,
156 const DBus::Error &dberror,
157 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700158 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500159 scoped_ptr<ScanResultsCallback> callback(
160 reinterpret_cast<ScanResultsCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500161 Error error;
162 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500163 callback->Run(results, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500164}
165
Darin Petkova1e0a1c2011-08-25 15:08:33 -0700166} // namespace shill