blob: d6ad4a0f63ab3119cadc9a3acd5170abaa9f02ab [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
Ben Chan62028b22012-11-05 11:20:02 -08005#ifndef SHILL_MODEM_INFO_H_
6#define SHILL_MODEM_INFO_H_
Darin Petkov887f2982011-07-14 16:10:17 -07007
8#include <string>
9
Ben Chan62028b22012-11-05 11:20:02 -080010#include <base/memory/scoped_ptr.h>
Darin Petkov887f2982011-07-14 16:10:17 -070011#include <base/memory/scoped_vector.h>
12#include <gtest/gtest_prod.h> // for FRIEND_TEST
13
Darin Petkov137884a2011-10-26 18:52:47 +020014struct mobile_provider_db;
15
Darin Petkov887f2982011-07-14 16:10:17 -070016namespace shill {
17
Ben Chan62028b22012-11-05 11:20:02 -080018class CellularOperatorInfo;
Darin Petkov887f2982011-07-14 16:10:17 -070019class ControlInterface;
20class EventDispatcher;
21class GLib;
22class Manager;
Thieu Le3426c8f2012-01-11 17:35:11 -080023class Metrics;
Darin Petkov887f2982011-07-14 16:10:17 -070024class ModemManager;
Arman Uguray41cc6342013-03-29 16:34:39 -070025class PendingActivationStore;
Darin Petkov887f2982011-07-14 16:10:17 -070026
27// Manages modem managers.
28class ModemInfo {
29 public:
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070030 ModemInfo(ControlInterface *control,
Darin Petkov887f2982011-07-14 16:10:17 -070031 EventDispatcher *dispatcher,
Thieu Le3426c8f2012-01-11 17:35:11 -080032 Metrics *metrics,
Darin Petkov887f2982011-07-14 16:10:17 -070033 Manager *manager,
34 GLib *glib);
Paul Stewart8c116a92012-05-02 18:30:03 -070035 virtual ~ModemInfo();
Darin Petkov887f2982011-07-14 16:10:17 -070036
Paul Stewart8c116a92012-05-02 18:30:03 -070037 virtual void Start();
38 virtual void Stop();
Darin Petkov887f2982011-07-14 16:10:17 -070039
Paul Stewart8c116a92012-05-02 18:30:03 -070040 virtual void OnDeviceInfoAvailable(const std::string &link_name);
Darin Petkov41c0e0a2012-01-09 16:38:53 +010041
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070042 ControlInterface *control_interface() const { return control_interface_; }
43 EventDispatcher *dispatcher() const { return dispatcher_; }
44 Metrics *metrics() const { return metrics_; }
45 Manager *manager() const { return manager_; }
46 GLib *glib() const { return glib_; }
Arman Uguray41cc6342013-03-29 16:34:39 -070047 PendingActivationStore *pending_activation_store() const {
48 return pending_activation_store_.get();
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070049 }
50 CellularOperatorInfo *cellular_operator_info() const {
51 return cellular_operator_info_.get();
52 }
53 mobile_provider_db *provider_db() const { return provider_db_; }
54
55 protected:
56 // Write accessors for unit-tests.
57 void set_control_interface(ControlInterface *control) {
58 control_interface_ = control;
59 }
60 void set_event_dispatcher(EventDispatcher *dispatcher) {
61 dispatcher_ = dispatcher;
62 }
63 void set_metrics(Metrics *metrics) {
64 metrics_ = metrics;
65 }
66 void set_manager(Manager *manager) {
67 manager_ = manager;
68 }
69 void set_glib(GLib *glib) {
70 glib_ = glib;
71 }
Arman Uguray41cc6342013-03-29 16:34:39 -070072 void set_pending_activation_store(
73 PendingActivationStore *pending_activation_store);
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070074 void set_cellular_operator_info(
75 CellularOperatorInfo *cellular_operator_info);
76 void set_mobile_provider_db(mobile_provider_db *provider_db) {
77 provider_db_ = provider_db;
78 }
79
Darin Petkov887f2982011-07-14 16:10:17 -070080 private:
81 friend class ModemInfoTest;
82 FRIEND_TEST(ModemInfoTest, RegisterModemManager);
83 FRIEND_TEST(ModemInfoTest, StartStop);
84
Darin Petkov41c0e0a2012-01-09 16:38:53 +010085 typedef ScopedVector<ModemManager> ModemManagers;
86
Ben Chan8799a4a2013-04-13 16:00:13 -070087 // Registers and starts |manager|. Takes ownership of |manager|.
88 void RegisterModemManager(ModemManager *manager);
Darin Petkov41c0e0a2012-01-09 16:38:53 +010089 ModemManagers modem_managers_;
Darin Petkov887f2982011-07-14 16:10:17 -070090
91 ControlInterface *control_interface_;
92 EventDispatcher *dispatcher_;
Thieu Le3426c8f2012-01-11 17:35:11 -080093 Metrics *metrics_;
Darin Petkov887f2982011-07-14 16:10:17 -070094 Manager *manager_;
95 GLib *glib_;
96
Prathmesh Prabhu97f317c2013-03-15 16:20:34 -070097 // Post-payment activation state of the modem.
Arman Uguray41cc6342013-03-29 16:34:39 -070098 scoped_ptr<PendingActivationStore> pending_activation_store_;
Ben Chan62028b22012-11-05 11:20:02 -080099 scoped_ptr<CellularOperatorInfo> cellular_operator_info_;
Darin Petkov137884a2011-10-26 18:52:47 +0200100 std::string provider_db_path_; // For testing.
101 mobile_provider_db *provider_db_; // Database instance owned by |this|.
102
Darin Petkov887f2982011-07-14 16:10:17 -0700103 DISALLOW_COPY_AND_ASSIGN(ModemInfo);
104};
105
106} // namespace shill
107
Ben Chan62028b22012-11-05 11:20:02 -0800108#endif // SHILL_MODEM_INFO_H_