blob: 178d66de84d5f31525d41d6d618f5a9b7c795db4 [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 {
40 proxy_.Enable(enable, cb.get(), timeout);
41 cb.release();
42 } catch (DBus::Error e) {
43 if (error)
44 CellularError::FromDBusError(e, error);
45 }
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050046}
47
Eric Shienbrood9a245532012-03-07 14:20:39 -050048void ModemProxy::Disconnect(Error *error, const ResultCallback &callback,
49 int timeout) {
50 scoped_ptr<ResultCallback> cb(new ResultCallback(callback));
51 try {
52 proxy_.Disconnect(cb.get(), timeout);
53 cb.release();
54 } catch (DBus::Error e) {
55 if (error)
56 CellularError::FromDBusError(e, error);
57 }
Darin Petkove9d12e02011-07-27 15:09:37 -070058}
59
Eric Shienbrood9a245532012-03-07 14:20:39 -050060void ModemProxy::GetModemInfo(Error *error,
61 const ModemInfoCallback &callback,
62 int timeout) {
63 scoped_ptr<ModemInfoCallback> cb(new ModemInfoCallback(callback));
64 try {
65 proxy_.GetInfo(cb.get(), timeout);
66 cb.release();
67 } catch (DBus::Error e) {
68 if (error)
69 CellularError::FromDBusError(e, error);
70 }
Darin Petkovfb0625e2012-01-16 13:05:56 +010071}
72
Eric Shienbrood9a245532012-03-07 14:20:39 -050073ModemProxy::Proxy::Proxy(DBus::Connection *connection,
Darin Petkove9d12e02011-07-27 15:09:37 -070074 const string &path,
75 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050076 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
Darin Petkove9d12e02011-07-27 15:09:37 -070077
78ModemProxy::Proxy::~Proxy() {}
79
Eric Shienbrood9a245532012-03-07 14:20:39 -050080void ModemProxy::Proxy::set_state_changed_callback(
81 const ModemStateChangedSignalCallback &callback) {
82 state_changed_callback_ = callback;
83}
84
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050085void ModemProxy::Proxy::StateChanged(
86 const uint32 &old, const uint32 &_new, const uint32 &reason) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070087 SLOG(Modem, 2) << __func__ << "(" << old << ", " << _new << ", "
88 << reason << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -050089 state_changed_callback_.Run(old, _new, reason);
Darin Petkove9d12e02011-07-27 15:09:37 -070090}
91
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050092void ModemProxy::Proxy::EnableCallback(const DBus::Error &dberror, void *data) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070093 SLOG(Modem, 2) << __func__;
Eric Shienbrood9a245532012-03-07 14:20:39 -050094 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050095 Error error;
96 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -050097 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050098}
99
100void ModemProxy::Proxy::GetInfoCallback(const ModemHardwareInfo &info,
101 const DBus::Error &dberror,
102 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500103 scoped_ptr<ModemInfoCallback> callback(
104 reinterpret_cast<ModemInfoCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500105 Error error;
106 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500107 callback->Run(info, error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500108}
109
110void ModemProxy::Proxy::DisconnectCallback(const DBus::Error &dberror,
111 void *data) {
Eric Shienbrood9a245532012-03-07 14:20:39 -0500112 scoped_ptr<ResultCallback> callback(reinterpret_cast<ResultCallback *>(data));
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500113 Error error;
114 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -0500115 callback->Run(error);
Eric Shienbrood5de44ab2011-12-05 10:46:27 -0500116}
117
Darin Petkove9d12e02011-07-27 15:09:37 -0700118} // namespace shill