blob: 0a29c5bc8060ef4a89ec1f3ea831187da100a78e [file] [log] [blame]
Darin Petkov887f2982011-07-14 16:10:17 -07001// Copyright (c) 2011 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/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
53void ModemInfo::RegisterModemManager(const string &service,
54 const string &path) {
55 ModemManager *manager = new ModemManager(service,
56 path,
57 control_interface_,
58 dispatcher_,
59 manager_,
Darin Petkov137884a2011-10-26 18:52:47 +020060 glib_,
61 provider_db_);
Darin Petkov887f2982011-07-14 16:10:17 -070062 modem_managers_.push_back(manager); // Passes ownership.
63 manager->Start();
64}
65
66} // namespace shill