blob: 6add9bdb8a81649361ac3511d65e017c30a25457 [file] [log] [blame]
Darin Petkov41c0e0a2012-01-09 16:38:53 +01001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkov887f2982011-07-14 16:10:17 -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_info.h"
6
Darin Petkov137884a2011-10-26 18:52:47 +02007#include <base/logging.h>
Darin Petkov887f2982011-07-14 16:10:17 -07008#include <mm/mm-modem.h>
Darin Petkov137884a2011-10-26 18:52:47 +02009#include <mobile_provider.h>
Darin Petkov887f2982011-07-14 16:10:17 -070010
11#include "shill/modem_manager.h"
12
13using std::string;
14
15namespace shill {
16
17const char ModemInfo::kCromoService[] = "org.chromium.ModemManager";
18const char ModemInfo::kCromoPath[] = "/org/chromium/ModemManager";
Darin Petkov137884a2011-10-26 18:52:47 +020019const char ModemInfo::kMobileProviderDBPath[] =
20 "/usr/share/mobile-broadband-provider-info/serviceproviders.bfd";
Darin Petkov887f2982011-07-14 16:10:17 -070021
22ModemInfo::ModemInfo(ControlInterface *control_interface,
23 EventDispatcher *dispatcher,
24 Manager *manager,
25 GLib *glib)
26 : control_interface_(control_interface),
Darin Petkov67d8ecf2011-07-26 16:03:30 -070027 dispatcher_(dispatcher),
Darin Petkov887f2982011-07-14 16:10:17 -070028 manager_(manager),
Darin Petkov137884a2011-10-26 18:52:47 +020029 glib_(glib),
30 provider_db_path_(kMobileProviderDBPath),
31 provider_db_(NULL) {}
Darin Petkov887f2982011-07-14 16:10:17 -070032
33ModemInfo::~ModemInfo() {
34 Stop();
35}
36
37void ModemInfo::Start() {
Darin Petkov137884a2011-10-26 18:52:47 +020038 // TODO(petkov): Consider initializing the mobile provider database lazily
39 // only if a GSM modem needs to be registered.
40 provider_db_ = mobile_provider_open_db(provider_db_path_.c_str());
41 PLOG_IF(WARNING, !provider_db_)
42 << "Unable to load mobile provider database: ";
Darin Petkov887f2982011-07-14 16:10:17 -070043 RegisterModemManager(MM_MODEMMANAGER_SERVICE, MM_MODEMMANAGER_PATH);
44 RegisterModemManager(kCromoService, kCromoPath);
45}
46
47void ModemInfo::Stop() {
Darin Petkov137884a2011-10-26 18:52:47 +020048 mobile_provider_close_db(provider_db_);
49 provider_db_ = NULL;
Darin Petkov887f2982011-07-14 16:10:17 -070050 modem_managers_.reset();
51}
52
Darin Petkov41c0e0a2012-01-09 16:38:53 +010053void ModemInfo::OnDeviceInfoAvailable(const string &link_name) {
54 for (ModemManagers::iterator it = modem_managers_.begin();
55 it != modem_managers_.end(); ++it) {
56 (*it)->OnDeviceInfoAvailable(link_name);
57 }
58}
59
Darin Petkov887f2982011-07-14 16:10:17 -070060void ModemInfo::RegisterModemManager(const string &service,
61 const string &path) {
62 ModemManager *manager = new ModemManager(service,
63 path,
64 control_interface_,
65 dispatcher_,
66 manager_,
Darin Petkov137884a2011-10-26 18:52:47 +020067 glib_,
68 provider_db_);
Darin Petkov887f2982011-07-14 16:10:17 -070069 modem_managers_.push_back(manager); // Passes ownership.
70 manager->Start();
71}
72
73} // namespace shill