1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2015 The Android Open Source Project
3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License.
6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at
7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software
11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and
14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License.
15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
1628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
1728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/dbus/chromeos_mm1_modem_proxy.h"
1828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
1928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include <memory>
2028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include <tuple>
2128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
2228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/cellular/cellular_error.h"
2328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu#include "shill/logging.h"
2428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
2528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuusing std::string;
2628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
2728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiunamespace shill {
2828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
2928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiunamespace Logging {
3028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiustatic auto kModuleLogScope = ScopeLogger::kDBus;
3128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiustatic string ObjectID(const dbus::ObjectPath* p) { return p->value(); }
3228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}  // namespace Logging
3328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
3428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiunamespace mm1 {
3528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
3628af1076aac4eb4ec574081198e657cbf3f8f489Peter QiuChromeosModemProxy::ChromeosModemProxy(const scoped_refptr<dbus::Bus>& bus,
3728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       const string& path,
3828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       const string& service)
3928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    : proxy_(
4028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu        new org::freedesktop::ModemManager1::ModemProxy(
4128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu            bus, service, dbus::ObjectPath(path))) {
4228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  // Register signal handlers.
4328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->RegisterStateChangedSignalHandler(
4428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::StateChanged,
4528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr()),
4628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnSignalConnected,
4728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr()));
4828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
4928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
5028af1076aac4eb4ec574081198e657cbf3f8f489Peter QiuChromeosModemProxy::~ChromeosModemProxy() {}
5128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
5228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::Enable(bool enable,
5328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                Error* error,
5428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                const ResultCallback& callback,
5528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                int timeout) {
5628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << enable;
5728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->EnableAsync(enable,
5828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                      base::Bind(&ChromeosModemProxy::OnOperationSuccess,
5928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 weak_factory_.GetWeakPtr(),
6028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 callback,
6128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 __func__),
6228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                      base::Bind(&ChromeosModemProxy::OnOperationFailure,
6328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 weak_factory_.GetWeakPtr(),
6428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 callback,
6528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 __func__));
6628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
6728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
6828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::CreateBearer(
6928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    const KeyValueStore& properties,
7028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    Error* error,
7128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    const RpcIdentifierCallback& callback,
7228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    int timeout) {
7328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__;
7403e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko  brillo::VariantDictionary properties_dict;
7528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  KeyValueStore::ConvertToVariantDictionary(properties, &properties_dict);
7628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->CreateBearerAsync(
7728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      properties_dict,
7828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnCreateBearerSuccess,
7928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
8028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback),
8128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnCreateBearerFailure,
8228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
8328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback));
8428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
8528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
8628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::DeleteBearer(const string& bearer,
8728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                      Error* error,
8828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                      const ResultCallback& callback,
8928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                      int timeout) {
9028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << bearer;
9128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->DeleteBearerAsync(dbus::ObjectPath(bearer),
9228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                            base::Bind(&ChromeosModemProxy::OnOperationSuccess,
9328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       weak_factory_.GetWeakPtr(),
9428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       callback,
9528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       __func__),
9628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                            base::Bind(&ChromeosModemProxy::OnOperationFailure,
9728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       weak_factory_.GetWeakPtr(),
9828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       callback,
9928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       __func__));
10028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
10128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
10228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::Reset(Error* error,
10328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                               const ResultCallback& callback,
10428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                               int timeout) {
10528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__;
10628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->ResetAsync(base::Bind(&ChromeosModemProxy::OnOperationSuccess,
10728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                weak_factory_.GetWeakPtr(),
10828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                callback,
10928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                __func__),
11028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                     base::Bind(&ChromeosModemProxy::OnOperationFailure,
11128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                weak_factory_.GetWeakPtr(),
11228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                callback,
11328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                __func__));
11428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
11528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
11628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::FactoryReset(const std::string& code,
11728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                      Error* error,
11828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                      const ResultCallback& callback,
11928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                      int timeout) {
12028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__;
12128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->FactoryResetAsync(code,
12228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                            base::Bind(&ChromeosModemProxy::OnOperationSuccess,
12328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       weak_factory_.GetWeakPtr(),
12428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       callback,
12528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       __func__),
12628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                            base::Bind(&ChromeosModemProxy::OnOperationFailure,
12728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       weak_factory_.GetWeakPtr(),
12828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       callback,
12928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       __func__));
13028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
13128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
13228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::SetCurrentCapabilities(uint32_t capabilities,
13328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                                Error* error,
13428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                                const ResultCallback& callback,
13528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                                int timeout) {
13628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << capabilities;
13728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->SetCurrentCapabilitiesAsync(
13828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      capabilities,
13928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnOperationSuccess,
14028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
14128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback,
14228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 __func__),
14328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnOperationFailure,
14428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
14528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback,
14628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 __func__));
14728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
14828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
14928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::SetCurrentModes(uint32_t allowed_modes,
15028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                         uint32_t preferred_mode,
15128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                         Error* error,
15228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                         const ResultCallback& callback,
15328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                         int timeout) {
15428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << allowed_modes
15528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                    << " " << preferred_mode;
15628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  std::tuple<uint32_t, uint32_t> modes { allowed_modes, preferred_mode };
15728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->SetCurrentModesAsync(
15828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      modes,
15928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnOperationSuccess,
16028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
16128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback,
16228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 __func__),
16328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnOperationFailure,
16428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
16528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback,
16628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 __func__));
16728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
16828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
16928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::SetCurrentBands(const std::vector<uint32_t>& bands,
17028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                         Error* error,
17128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                         const ResultCallback& callback,
17228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                         int timeout) {
17328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__;
17428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->SetCurrentBandsAsync(
17528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      bands,
17628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnOperationSuccess,
17728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
17828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback,
17928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 __func__),
18028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnOperationFailure,
18128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
18228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback,
18328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 __func__));
18428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
18528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
18628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::Command(const std::string& cmd,
18728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 uint32_t user_timeout,
18828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 Error* error,
18928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 const StringCallback& callback,
19028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                 int timeout) {
19128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << cmd;
19228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->CommandAsync(cmd,
19328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                       user_timeout,
19428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                       base::Bind(&ChromeosModemProxy::OnCommandSuccess,
19528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                  weak_factory_.GetWeakPtr(),
19628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                  callback),
19728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                       base::Bind(&ChromeosModemProxy::OnCommandFailure,
19828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                  weak_factory_.GetWeakPtr(),
19928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                  callback));
20028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
20128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
20228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::SetPowerState(uint32_t power_state,
20328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       Error* error,
20428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       const ResultCallback& callback,
20528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                       int timeout) {
20628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << power_state;
20728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  proxy_->SetPowerStateAsync(
20828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      power_state,
20928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnOperationSuccess,
21028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
21128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback,
21228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 __func__),
21328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      base::Bind(&ChromeosModemProxy::OnOperationFailure,
21428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 weak_factory_.GetWeakPtr(),
21528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 callback,
21628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                 __func__));
21728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
21828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
21928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::StateChanged(
22028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    int32_t old, int32_t _new, uint32_t reason) {
22128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__;
22228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  if (state_changed_callback_.is_null()) {
22328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    return;
22428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  }
22528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  state_changed_callback_.Run(old, _new, reason);
22628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
22728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
22828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::OnCreateBearerSuccess(
22928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    const RpcIdentifierCallback& callback, const dbus::ObjectPath& path) {
23028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << path.value();
23128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  callback.Run(path.value(), Error());
23228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
23328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
23428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::OnCreateBearerFailure(
23503e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko    const RpcIdentifierCallback& callback, brillo::Error* dbus_error) {
23628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__;
23728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  Error error;
23828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  CellularError::FromMM1ChromeosDBusError(dbus_error, &error);
23928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  callback.Run("", error);
24028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
24128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
24228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::OnCommandSuccess(const StringCallback& callback,
24328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                          const string& response) {
24428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << response;
24528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  callback.Run(response, Error());
24628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
24728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
24828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::OnCommandFailure(const StringCallback& callback,
24903e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko                                          brillo::Error* dbus_error) {
25028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__;
25128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  Error error;
25228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  CellularError::FromMM1ChromeosDBusError(dbus_error, &error);
25328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  callback.Run("", error);
25428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
25528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
25628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::OnOperationSuccess(const ResultCallback& callback,
25728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                            const string& operation) {
25828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << operation;
25928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  callback.Run(Error());
26028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
26128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
26228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::OnOperationFailure(const ResultCallback& callback,
26328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu                                            const string& operation,
26403e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko                                            brillo::Error* dbus_error) {
26528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << operation;
26628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  Error error;
26728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  CellularError::FromMM1ChromeosDBusError(dbus_error, &error);
26828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  callback.Run(error);
26928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
27028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
27128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiuvoid ChromeosModemProxy::OnSignalConnected(
27228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    const string& interface_name, const string& signal_name, bool success) {
27328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  SLOG(&proxy_->GetObjectPath(), 2) << __func__
27428af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu      << "interface: " << interface_name
27528af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu             << " signal: " << signal_name << "success: " << success;
27628af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  if (!success) {
27728af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu    LOG(ERROR) << "Failed to connect signal " << signal_name
27828af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu        << " to interface " << interface_name;
27928af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu  }
28028af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}
28128af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu
28228af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}  // namespace mm1
28328af1076aac4eb4ec574081198e657cbf3f8f489Peter Qiu}  // namespace shill
284