blob: 7055c6d0704896791a283c92799d800a9fcfad59 [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
9#include "cellular_error.h"
10
11using std::string;
12
13namespace shill {
14namespace mm1 {
15
Eric Shienbrood9a245532012-03-07 14:20:39 -050016ModemProxy::ModemProxy(DBus::Connection *connection,
Jason Glasgowee1081c2012-03-06 15:14:53 -050017 const string &path,
18 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050019 : proxy_(connection, path, service) {}
Jason Glasgowee1081c2012-03-06 15:14:53 -050020
21ModemProxy::~ModemProxy() {}
22
Eric Shienbrood9a245532012-03-07 14:20:39 -050023void ModemProxy::set_state_changed_callback(
24 const ModemStateChangedSignalCallback &callback) {
25 proxy_.set_state_changed_callback(callback);
Jason Glasgowee1081c2012-03-06 15:14:53 -050026}
27
Eric Shienbrood9a245532012-03-07 14:20:39 -050028void ModemProxy::Enable(bool enable,
29 Error *error,
30 const ResultCallback &callback,
31 int timeout) {
32 VLOG(2) << __func__ << "(" << enable << ", " << timeout << ")";
33 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
34 try {
35 proxy_.Enable(enable, cb.get(), timeout);
36 cb.release();
37 } catch (DBus::Error e) {
38 if (error)
39 CellularError::FromDBusError(e, error);
40 }
41}
42
43void ModemProxy::ListBearers(Error *error,
44 const DBusPathsCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -050045 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050046 scoped_ptr<DBusPathsCallback> cb(new DBusPathsCallback(callback));
47 try {
48 proxy_.ListBearers(cb.get(), timeout);
49 cb.release();
50 } catch (DBus::Error e) {
51 if (error)
52 CellularError::FromDBusError(e, error);
53 }
Jason Glasgowee1081c2012-03-06 15:14:53 -050054}
55
56void ModemProxy::CreateBearer(
57 const DBusPropertiesMap &properties,
Eric Shienbrood9a245532012-03-07 14:20:39 -050058 Error *error,
59 const DBusPathCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -050060 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050061 scoped_ptr<DBusPathCallback> cb(new DBusPathCallback(callback));
62 try {
63 proxy_.CreateBearer(properties, cb.get(), timeout);
64 cb.release();
65 } catch (DBus::Error e) {
66 if (error)
67 CellularError::FromDBusError(e, error);
68 }
Jason Glasgowee1081c2012-03-06 15:14:53 -050069}
70
71void ModemProxy::DeleteBearer(const ::DBus::Path &bearer,
Eric Shienbrood9a245532012-03-07 14:20:39 -050072 Error *error,
73 const ResultCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -050074 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050075 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
76 try {
77 proxy_.DeleteBearer(bearer, cb.get(), timeout);
78 cb.release();
79 } catch (DBus::Error e) {
80 if (error)
81 CellularError::FromDBusError(e, error);
82 }
Jason Glasgowee1081c2012-03-06 15:14:53 -050083}
84
Eric Shienbrood9a245532012-03-07 14:20:39 -050085void ModemProxy::Reset(Error *error,
86 const ResultCallback &callback,
87 int timeout) {
88 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
89 try {
90 proxy_.Reset(cb.get(), timeout);
91 cb.release();
92 } catch (DBus::Error e) {
93 if (error)
94 CellularError::FromDBusError(e, error);
95 }
Jason Glasgowee1081c2012-03-06 15:14:53 -050096}
97
98void ModemProxy::FactoryReset(const std::string &code,
Eric Shienbrood9a245532012-03-07 14:20:39 -050099 Error *error,
100 const ResultCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500101 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500102 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
103 try {
104 proxy_.FactoryReset(code, cb.get(), timeout);
105 cb.release();
106 } catch (DBus::Error e) {
107 if (error)
108 CellularError::FromDBusError(e, error);
109 }
Jason Glasgowee1081c2012-03-06 15:14:53 -0500110}
111
112void ModemProxy::SetAllowedModes(const uint32_t &modes,
113 const uint32_t &preferred,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500114 Error *error,
115 const ResultCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500116 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500117 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
118 try {
119 proxy_.SetAllowedModes(modes, preferred, cb.get(), timeout);
120 cb.release();
121 } catch (DBus::Error e) {
122 if (error)
123 CellularError::FromDBusError(e, error);
124 }
Jason Glasgowee1081c2012-03-06 15:14:53 -0500125}
126
127void ModemProxy::SetBands(const std::vector< uint32_t > &bands,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500128 Error *error,
129 const ResultCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500130 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500131 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
132 try {
133 proxy_.SetBands(bands, cb.get(), timeout);
134 cb.release();
135 } catch (DBus::Error e) {
136 if (error)
137 CellularError::FromDBusError(e, error);
138 }
Jason Glasgowee1081c2012-03-06 15:14:53 -0500139}
140
141void ModemProxy::Command(const std::string &cmd,
142 const uint32_t &user_timeout,
Eric Shienbrood9a245532012-03-07 14:20:39 -0500143 Error *error,
144 const StringCallback &callback,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500145 int timeout) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500146 scoped_ptr<StringCallback> cb(new StringCallback(callback));
147 try {
148 proxy_.Command(cmd, user_timeout, cb.get(), timeout);
149 cb.release();
150 } catch (DBus::Error e) {
151 if (error)
152 CellularError::FromDBusError(e, error);
153 }
Jason Glasgowee1081c2012-03-06 15:14:53 -0500154}
155
156// Inherited properties from ModemProxyInterface.
157const ::DBus::Path ModemProxy::Sim() {
158 return proxy_.Sim();
159};
160uint32_t ModemProxy::ModemCapabilities() {
161 return proxy_.ModemCapabilities();
162};
163uint32_t ModemProxy::CurrentCapabilities() {
164 return proxy_.CurrentCapabilities();
165};
166uint32_t ModemProxy::MaxBearers() {
167 return proxy_.MaxBearers();
168};
169uint32_t ModemProxy::MaxActiveBearers() {
170 return proxy_.MaxActiveBearers();
171};
172const std::string ModemProxy::Manufacturer() {
173 return proxy_.Manufacturer();
174};
175const std::string ModemProxy::Model() {
176 return proxy_.Model();
177};
178const std::string ModemProxy::Revision() {
179 return proxy_.Revision();
180};
181const std::string ModemProxy::DeviceIdentifier() {
182 return proxy_.DeviceIdentifier();
183};
184const std::string ModemProxy::Device() {
185 return proxy_.Device();
186};
187const std::string ModemProxy::Driver() {
188 return proxy_.Driver();
189};
190const std::string ModemProxy::Plugin() {
191 return proxy_.Plugin();
192};
193const std::string ModemProxy::EquipmentIdentifier() {
194 return proxy_.EquipmentIdentifier();
195};
196uint32_t ModemProxy::UnlockRequired() {
197 return proxy_.UnlockRequired();
198};
199const std::map< uint32_t, uint32_t > ModemProxy::UnlockRetries() {
200 return proxy_.UnlockRetries();
201};
202uint32_t ModemProxy::State() {
203 return proxy_.State();
204};
205uint32_t ModemProxy::AccessTechnologies() {
206 return proxy_.AccessTechnologies();
207};
208const ::DBus::Struct< uint32_t, bool > ModemProxy::SignalQuality() {
209 return proxy_.SignalQuality();
210};
211uint32_t ModemProxy::SupportedModes() {
212 return proxy_.SupportedModes();
213};
214uint32_t ModemProxy::AllowedModes() {
215 return proxy_.AllowedModes();
216};
217uint32_t ModemProxy::PreferredMode() {
218 return proxy_.PreferredMode();
219};
220const std::vector< uint32_t > ModemProxy::SupportedBands() {
221 return proxy_.SupportedBands();
222};
223const std::vector< uint32_t > ModemProxy::Bands() {
224 return proxy_.Bands();
225};
226
Eric Shienbrood9a245532012-03-07 14:20:39 -0500227ModemProxy::Proxy::Proxy(DBus::Connection *connection,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500228 const std::string &path,
229 const std::string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -0500230 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Jason Glasgowee1081c2012-03-06 15:14:53 -0500231
232ModemProxy::Proxy::~Proxy() {}
233
Eric Shienbrood9a245532012-03-07 14:20:39 -0500234void ModemProxy::Proxy::set_state_changed_callback(
235 const ModemStateChangedSignalCallback &callback) {
236 state_changed_callback_ = callback;
237}
238
Jason Glasgowee1081c2012-03-06 15:14:53 -0500239// Signal callbacks inherited from Proxy
Nathan Williamsa31e79c2012-03-30 15:07:00 -0400240void ModemProxy::Proxy::StateChanged(const int32_t &old,
241 const int32_t &_new,
Jason Glasgowee1081c2012-03-06 15:14:53 -0500242 const uint32_t &reason) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500243 state_changed_callback_.Run(old, _new, reason);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500244}
245
246// Method callbacks inherited from
247// org::freedesktop::ModemManager1::ModemProxy
248void ModemProxy::Proxy::EnableCallback(const ::DBus::Error& dberror,
249 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500250 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500251 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500252 CellularError::FromDBusError(dberror, &error);
253 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500254}
255
256void ModemProxy::Proxy::ListBearersCallback(
257 const std::vector< ::DBus::Path > &bearers,
258 const ::DBus::Error& dberror,
259 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500260 scoped_ptr<DBusPathsCallback> callback(
261 reinterpret_cast<DBusPathsCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500262 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500263 CellularError::FromDBusError(dberror, &error);
264 callback->Run(bearers, error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500265}
266
267void ModemProxy::Proxy::CreateBearerCallback(const ::DBus::Path &path,
268 const ::DBus::Error& dberror,
269 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500270 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500271 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500272 CellularError::FromDBusError(dberror, &error);
273 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500274}
275
276void ModemProxy::Proxy::DeleteBearerCallback(const ::DBus::Error& dberror,
277 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500278 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500279 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500280 CellularError::FromDBusError(dberror, &error);
281 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500282}
283
284void ModemProxy::Proxy::ResetCallback(const ::DBus::Error& dberror,
285 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500286 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500287 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500288 CellularError::FromDBusError(dberror, &error);
289 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500290}
291
292void ModemProxy::Proxy::FactoryResetCallback(const ::DBus::Error& dberror,
293 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500294 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500295 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500296 CellularError::FromDBusError(dberror, &error);
297 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500298}
299
300void ModemProxy::Proxy::SetAllowedModesCallback(
301 const ::DBus::Error& dberror,
302 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500303 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500304 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500305 CellularError::FromDBusError(dberror, &error);
306 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500307}
308
309void ModemProxy::Proxy::SetBandsCallback(const ::DBus::Error& dberror,
310 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500311 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500312 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500313 CellularError::FromDBusError(dberror, &error);
314 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500315}
316
317void ModemProxy::Proxy::CommandCallback(const std::string &response,
318 const ::DBus::Error& dberror,
319 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500320 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Jason Glasgowee1081c2012-03-06 15:14:53 -0500321 Error error;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500322 CellularError::FromDBusError(dberror, &error);
323 callback->Run(error);
Jason Glasgowee1081c2012-03-06 15:14:53 -0500324}
325
326} // namespace mm1
327} // namespace shill