blob: fc824515da312d395fa390ba7136193247616a2b [file] [log] [blame]
Darin Petkovfb0625e2012-01-16 13:05:56 +01001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkove9d12e02011-07-27 15:09:37 -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_proxy.h"
6
Eric Shienbrood9a245532012-03-07 14:20:39 -05007#include <base/bind.h>
Darin Petkove9d12e02011-07-27 15:09:37 -07008#include <base/logging.h>
9
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050010#include "shill/cellular_error.h"
11#include "shill/error.h"
Ben Chanfad4a0b2012-04-18 15:49:59 -070012#include "shill/scope_logger.h"
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050013
Eric Shienbrood9a245532012-03-07 14:20:39 -050014using base::Bind;
15using base::Callback;
Darin Petkove9d12e02011-07-27 15:09:37 -070016using std::string;
17
18namespace shill {
19
Eric Shienbrood9a245532012-03-07 14:20:39 -050020typedef Callback<void(const ModemHardwareInfo &,
21 const Error &)> ModemInfoCallback;
22
23ModemProxy::ModemProxy(DBus::Connection *connection,
Darin Petkove9d12e02011-07-27 15:09:37 -070024 const string &path,
25 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050026 : proxy_(connection, path, service) {}
Darin Petkove9d12e02011-07-27 15:09:37 -070027
28ModemProxy::~ModemProxy() {}
29
Eric Shienbrood9a245532012-03-07 14:20:39 -050030void ModemProxy::set_state_changed_callback(
31 const ModemStateChangedSignalCallback &callback) {
32 proxy_.set_state_changed_callback(callback);
33}
34
35void ModemProxy::Enable(bool enable, Error *error,
36 const ResultCallback &callback, int timeout) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070037 SLOG(Modem, 2) << __func__ << "(" << enable << ", " << timeout << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -050038 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
39 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070040 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050041 proxy_.Enable(enable, cb.get(), timeout);
42 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070043 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050044 if (error)
45 CellularError::FromDBusError(e, error);
46 }
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050047}
48
Eric Shienbrood9a245532012-03-07 14:20:39 -050049void ModemProxy::Disconnect(Error *error, const ResultCallback &callback,
50 int timeout) {
51 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
52 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070053 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050054 proxy_.Disconnect(cb.get(), timeout);
55 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070056 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050057 if (error)
58 CellularError::FromDBusError(e, error);
59 }
Darin Petkove9d12e02011-07-27 15:09:37 -070060}
61
Eric Shienbrood9a245532012-03-07 14:20:39 -050062void ModemProxy::GetModemInfo(Error *error,
63 const ModemInfoCallback &callback,
64 int timeout) {
65 scoped_ptr<ModemInfoCallback> cb(new ModemInfoCallback(callback));
66 try {
mukesh agrawal06175d72012-04-23 16:46:01 -070067 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050068 proxy_.GetInfo(cb.get(), timeout);
69 cb.release();
Ben Chan80326f32012-05-04 17:51:32 -070070 } catch (const DBus::Error &e) {
Eric Shienbrood9a245532012-03-07 14:20:39 -050071 if (error)
72 CellularError::FromDBusError(e, error);
73 }
Darin Petkovfb0625e2012-01-16 13:05:56 +010074}
75
Eric Shienbrood9a245532012-03-07 14:20:39 -050076ModemProxy::Proxy::Proxy(DBus::Connection *connection,
Darin Petkove9d12e02011-07-27 15:09:37 -070077 const string &path,
78 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050079 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Darin Petkove9d12e02011-07-27 15:09:37 -070080
81ModemProxy::Proxy::~Proxy() {}
82
Eric Shienbrood9a245532012-03-07 14:20:39 -050083void ModemProxy::Proxy::set_state_changed_callback(
84 const ModemStateChangedSignalCallback &callback) {
85 state_changed_callback_ = callback;
86}
87
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050088void ModemProxy::Proxy::StateChanged(
89 const uint32 &old, const uint32 &_new, const uint32 &reason) {
mukesh agrawal06175d72012-04-23 16:46:01 -070090 SLOG(DBus, 2) << __func__ << "(" << old << ", " << _new << ", "
Ben Chanfad4a0b2012-04-18 15:49:59 -070091 << reason << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -050092 state_changed_callback_.Run(old, _new, reason);
Darin Petkove9d12e02011-07-27 15:09:37 -070093}
94
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050095void ModemProxy::Proxy::EnableCallback(const DBus::Error &dberror, void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -070096 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050097 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050098 Error error;
99 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500100 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500101}
102
103void ModemProxy::Proxy::GetInfoCallback(const ModemHardwareInfo &info,
104 const DBus::Error &dberror,
105 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700106 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500107 scoped_ptr<ModemInfoCallback> callback(
108 reinterpret_cast<ModemInfoCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500109 Error error;
110 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500111 callback->Run(info, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500112}
113
114void ModemProxy::Proxy::DisconnectCallback(const DBus::Error &dberror,
115 void *data) {
mukesh agrawal06175d72012-04-23 16:46:01 -0700116 SLOG(DBus, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -0500117 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500118 Error error;
119 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500120 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500121}
122
Darin Petkove9d12e02011-07-27 15:09:37 -0700123} // namespace shill