blob: 64a8a4d2e99c928008b9e91b6735b05beb5c880b [file] [log] [blame]
Jason Glasgowee1081c2012-03-06 15:14:53 -05001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2// 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/mm1_modem_proxy.h"
6
7#include <base/logging.h>
8
Ben Chanfad4a0b2012-04-18 15:49:59 -07009#include "shill/cellular_error.h"
10#include "shill/scope_logger.h"
Jason Glasgowee1081c2012-03-06 15:14:53 -050011
12using std::string;
13
14namespace shill {
15namespace mm1 {
16
Eric Shienbrood9a245532012-03-07 14:20:39 -050017ModemProxy::ModemProxy(DBus::Connection *connection,
Jason Glasgowee1081c2012-03-06 15:14:53 -050018 const string &path,
19 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050020 : proxy_(connection, path, service) {}
Jason Glasgowee1081c2012-03-06 15:14:53 -050021
22ModemProxy::~ModemProxy() {}
23
Eric Shienbrood9a245532012-03-07 14:20:39 -050024void ModemProxy::set_state_changed_callback(
25 const ModemStateChangedSignalCallback &callback) {
26 proxy_.set_state_changed_callback(callback);
Jason Glasgowee1081c2012-03-06 15:14:53 -050027}
28
Eric Shienbrood9a245532012-03-07 14:20:39 -050029void ModemProxy::Enable(bool enable,
30 Error *error,
31 const ResultCallback &callback,
32 int timeout) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070033 SLOG(Modem, 2) << __func__ << "(" << enable << ", " << timeout << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -050034 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
35 try {
36 proxy_.Enable(enable, cb.get(), timeout);
37 cb.release();
38 } catch (DBus::Error e) {
39 if (error)
40 CellularError::FromDBusError(e, error);
41 }
42}
43
44void ModemProxy::ListBearers(Error *error,
45 const DBusPathsCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -050046 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050047 scoped_ptr<DBusPathsCallback> cb(new DBusPathsCallback(callback));
48 try {
49 proxy_.ListBearers(cb.get(), timeout);
50 cb.release();
51 } catch (DBus::Error e) {
52 if (error)
53 CellularError::FromDBusError(e, error);
54 }
Jason Glasgowee1081c2012-03-06 15:14:53 -050055}
56
57void ModemProxy::CreateBearer(
58 const DBusPropertiesMap &properties,
Eric Shienbrood9a245532012-03-07 14:20:39 -050059 Error *error,
60 const DBusPathCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -050061 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050062 scoped_ptr<DBusPathCallback> cb(new DBusPathCallback(callback));
63 try {
64 proxy_.CreateBearer(properties, cb.get(), timeout);
65 cb.release();
66 } catch (DBus::Error e) {
67 if (error)
68 CellularError::FromDBusError(e, error);
69 }
Jason Glasgowee1081c2012-03-06 15:14:53 -050070}
71
72void ModemProxy::DeleteBearer(const ::DBus::Path &bearer,
Eric Shienbrood9a245532012-03-07 14:20:39 -050073 Error *error,
74 const ResultCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -050075 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050076 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
77 try {
78 proxy_.DeleteBearer(bearer, cb.get(), timeout);
79 cb.release();
80 } catch (DBus::Error e) {
81 if (error)
82 CellularError::FromDBusError(e, error);
83 }
Jason Glasgowee1081c2012-03-06 15:14:53 -050084}
85
Eric Shienbrood9a245532012-03-07 14:20:39 -050086void ModemProxy::Reset(Error *error,
87 const ResultCallback &callback,
88 int timeout) {
89 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
90 try {
91 proxy_.Reset(cb.get(), timeout);
92 cb.release();
93 } catch (DBus::Error e) {
94 if (error)
95 CellularError::FromDBusError(e, error);
96 }
Jason Glasgowee1081c2012-03-06 15:14:53 -050097}
98
99void ModemProxy::FactoryReset(const std::string &code,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500100 Error *error,
101 const ResultCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500102 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500103 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
104 try {
105 proxy_.FactoryReset(code, cb.get(), timeout);
106 cb.release();
107 } catch (DBus::Error e) {
108 if (error)
109 CellularError::FromDBusError(e, error);
110 }
Jason Glasgowee1081c2012-03-06 15:14:53 -0500111}
112
113void ModemProxy::SetAllowedModes(const uint32_t &modes,
114 const uint32_t &preferred,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500115 Error *error,
116 const ResultCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500117 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500118 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
119 try {
120 proxy_.SetAllowedModes(modes, preferred, cb.get(), timeout);
121 cb.release();
122 } catch (DBus::Error e) {
123 if (error)
124 CellularError::FromDBusError(e, error);
125 }
Jason Glasgowee1081c2012-03-06 15:14:53 -0500126}
127
128void ModemProxy::SetBands(const std::vector< uint32_t > &bands,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500129 Error *error,
130 const ResultCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500131 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500132 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
133 try {
134 proxy_.SetBands(bands, cb.get(), timeout);
135 cb.release();
136 } catch (DBus::Error e) {
137 if (error)
138 CellularError::FromDBusError(e, error);
139 }
Jason Glasgowee1081c2012-03-06 15:14:53 -0500140}
141
142void ModemProxy::Command(const std::string &cmd,
143 const uint32_t &user_timeout,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500144 Error *error,
145 const StringCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500146 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500147 scoped_ptr<StringCallback> cb(new StringCallback(callback));
148 try {
149 proxy_.Command(cmd, user_timeout, cb.get(), timeout);
150 cb.release();
151 } catch (DBus::Error e) {
152 if (error)
153 CellularError::FromDBusError(e, error);
154 }
Jason Glasgowee1081c2012-03-06 15:14:53 -0500155}
156
157// Inherited properties from ModemProxyInterface.
158const ::DBus::Path ModemProxy::Sim() {
159 return proxy_.Sim();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400160}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500161uint32_t ModemProxy::ModemCapabilities() {
162 return proxy_.ModemCapabilities();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400163}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500164uint32_t ModemProxy::CurrentCapabilities() {
165 return proxy_.CurrentCapabilities();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400166}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500167uint32_t ModemProxy::MaxBearers() {
168 return proxy_.MaxBearers();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400169}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500170uint32_t ModemProxy::MaxActiveBearers() {
171 return proxy_.MaxActiveBearers();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400172}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500173const std::string ModemProxy::Manufacturer() {
174 return proxy_.Manufacturer();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400175}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500176const std::string ModemProxy::Model() {
177 return proxy_.Model();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400178}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500179const std::string ModemProxy::Revision() {
180 return proxy_.Revision();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400181}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500182const std::string ModemProxy::DeviceIdentifier() {
183 return proxy_.DeviceIdentifier();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400184}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500185const std::string ModemProxy::Device() {
186 return proxy_.Device();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400187}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500188const std::string ModemProxy::Driver() {
189 return proxy_.Driver();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400190}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500191const std::string ModemProxy::Plugin() {
192 return proxy_.Plugin();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400193}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500194const std::string ModemProxy::EquipmentIdentifier() {
195 return proxy_.EquipmentIdentifier();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400196}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500197uint32_t ModemProxy::UnlockRequired() {
198 return proxy_.UnlockRequired();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400199}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500200const std::map< uint32_t, uint32_t > ModemProxy::UnlockRetries() {
201 return proxy_.UnlockRetries();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400202}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500203uint32_t ModemProxy::State() {
204 return proxy_.State();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400205}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500206uint32_t ModemProxy::AccessTechnologies() {
207 return proxy_.AccessTechnologies();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400208}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500209const ::DBus::Struct< uint32_t, bool > ModemProxy::SignalQuality() {
210 return proxy_.SignalQuality();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400211}
212const std::vector<string> ModemProxy::OwnNumbers() {
213 return proxy_.OwnNumbers();
214}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500215uint32_t ModemProxy::SupportedModes() {
216 return proxy_.SupportedModes();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400217}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500218uint32_t ModemProxy::AllowedModes() {
219 return proxy_.AllowedModes();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400220}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500221uint32_t ModemProxy::PreferredMode() {
222 return proxy_.PreferredMode();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400223}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500224const std::vector< uint32_t > ModemProxy::SupportedBands() {
225 return proxy_.SupportedBands();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400226}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500227const std::vector< uint32_t > ModemProxy::Bands() {
228 return proxy_.Bands();
Jason Glasgow90d216d2012-04-04 15:57:14 -0400229}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500230
Eric Shienbrood9a245532012-03-07 14:20:39 -0500231ModemProxy::Proxy::Proxy(DBus::Connection *connection,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500232 const std::string &path,
233 const std::string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -0500234 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500235
236ModemProxy::Proxy::~Proxy() {}
237
Eric Shienbrood9a245532012-03-07 14:20:39 -0500238void ModemProxy::Proxy::set_state_changed_callback(
239 const ModemStateChangedSignalCallback &callback) {
240 state_changed_callback_ = callback;
241}
242
Jason Glasgowee1081c2012-03-06 15:14:53 -0500243// Signal callbacks inherited from Proxy
Nathan Williamsa31e79c2012-03-30 15:07:00 -0400244void ModemProxy::Proxy::StateChanged(const int32_t &old,
245 const int32_t &_new,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500246 const uint32_t &reason) {
Jason Glasgow82f9ab32012-04-04 14:27:19 -0400247 if (!state_changed_callback_.is_null())
248 state_changed_callback_.Run(old, _new, reason);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500249}
250
251// Method callbacks inherited from
252// org::freedesktop::ModemManager1::ModemProxy
253void ModemProxy::Proxy::EnableCallback(const ::DBus::Error& dberror,
254 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500255 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500256 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500257 CellularError::FromDBusError(dberror, &error);
258 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500259}
260
261void ModemProxy::Proxy::ListBearersCallback(
262 const std::vector< ::DBus::Path > &bearers,
263 const ::DBus::Error& dberror,
264 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500265 scoped_ptr<DBusPathsCallback> callback(
266 reinterpret_cast<DBusPathsCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500267 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500268 CellularError::FromDBusError(dberror, &error);
269 callback->Run(bearers, error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500270}
271
272void ModemProxy::Proxy::CreateBearerCallback(const ::DBus::Path &path,
273 const ::DBus::Error& dberror,
274 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500275 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500276 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500277 CellularError::FromDBusError(dberror, &error);
278 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500279}
280
281void ModemProxy::Proxy::DeleteBearerCallback(const ::DBus::Error& dberror,
282 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500283 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500284 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500285 CellularError::FromDBusError(dberror, &error);
286 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500287}
288
289void ModemProxy::Proxy::ResetCallback(const ::DBus::Error& dberror,
290 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500291 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500292 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500293 CellularError::FromDBusError(dberror, &error);
294 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500295}
296
297void ModemProxy::Proxy::FactoryResetCallback(const ::DBus::Error& dberror,
298 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500299 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500300 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500301 CellularError::FromDBusError(dberror, &error);
302 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500303}
304
305void ModemProxy::Proxy::SetAllowedModesCallback(
306 const ::DBus::Error& dberror,
307 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500308 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500309 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500310 CellularError::FromDBusError(dberror, &error);
311 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500312}
313
314void ModemProxy::Proxy::SetBandsCallback(const ::DBus::Error& dberror,
315 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500316 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500317 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500318 CellularError::FromDBusError(dberror, &error);
319 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500320}
321
322void ModemProxy::Proxy::CommandCallback(const std::string &response,
323 const ::DBus::Error& dberror,
324 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500325 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500326 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500327 CellularError::FromDBusError(dberror, &error);
328 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500329}
330
331} // namespace mm1
332} // namespace shill