1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2012 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//
16887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
17c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#ifndef SHILL_CELLULAR_MODEM_INFO_H_
18c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#define SHILL_CELLULAR_MODEM_INFO_H_
19887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
20c20ed13f5c0e87e7a5164d1b5330ccd99cced58fBen Chan#include <memory>
21887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov#include <string>
22887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
23887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov#include <base/memory/scoped_vector.h>
24887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov#include <gtest/gtest_prod.h>  // for FRIEND_TEST
25887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
26887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkovnamespace shill {
27887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
28887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkovclass ControlInterface;
29887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkovclass EventDispatcher;
30887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkovclass Manager;
313426c8fc7a3943f2d8fcb2ec78f0593088b42bedThieu Leclass Metrics;
32887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkovclass ModemManager;
3341cc634bcf55c46e9ada7447403c01553152205fArman Ugurayclass PendingActivationStore;
34887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
35887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov// Manages modem managers.
36887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkovclass ModemInfo {
37887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov public:
38f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  ModemInfo(ControlInterface* control,
39f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart            EventDispatcher* dispatcher,
40f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart            Metrics* metrics,
41bad1c10ffd2d4ac14f7bd9f4ef6a8982e711f566mukesh agrawal            Manager* manager);
428c116a90d3a3536430b808b15e73275060918434Paul Stewart  virtual ~ModemInfo();
43887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
448c116a90d3a3536430b808b15e73275060918434Paul Stewart  virtual void Start();
458c116a90d3a3536430b808b15e73275060918434Paul Stewart  virtual void Stop();
46887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
47f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  virtual void OnDeviceInfoAvailable(const std::string& link_name);
4841c0e0accae6602dbc9fc31f336dabee7af1b170Darin Petkov
49f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  ControlInterface* control_interface() const { return control_interface_; }
50f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  EventDispatcher* dispatcher() const { return dispatcher_; }
51f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  Metrics* metrics() const { return metrics_; }
52f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  Manager* manager() const { return manager_; }
53f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  PendingActivationStore* pending_activation_store() const {
5441cc634bcf55c46e9ada7447403c01553152205fArman Uguray    return pending_activation_store_.get();
5527526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu  }
5627526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu
5727526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu protected:
5827526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu  // Write accessors for unit-tests.
59f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void set_control_interface(ControlInterface* control) {
6027526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu    control_interface_ = control;
6127526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu  }
62f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void set_event_dispatcher(EventDispatcher* dispatcher) {
6327526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu    dispatcher_ = dispatcher;
6427526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu  }
65f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void set_metrics(Metrics* metrics) {
6627526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu    metrics_ = metrics;
6727526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu  }
68f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void set_manager(Manager* manager) {
6927526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu    manager_ = manager;
7027526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu  }
7141cc634bcf55c46e9ada7447403c01553152205fArman Uguray  void set_pending_activation_store(
72f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart      PendingActivationStore* pending_activation_store);
7327526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu
74887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov private:
75887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov  friend class ModemInfoTest;
76887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov  FRIEND_TEST(ModemInfoTest, RegisterModemManager);
77887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov  FRIEND_TEST(ModemInfoTest, StartStop);
78887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
7941c0e0accae6602dbc9fc31f336dabee7af1b170Darin Petkov  typedef ScopedVector<ModemManager> ModemManagers;
8041c0e0accae6602dbc9fc31f336dabee7af1b170Darin Petkov
818799a4a8aae726eb563dda4b6a9093614375d519Ben Chan  // Registers and starts |manager|. Takes ownership of |manager|.
82f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void RegisterModemManager(ModemManager* manager);
8341c0e0accae6602dbc9fc31f336dabee7af1b170Darin Petkov  ModemManagers modem_managers_;
84887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
85f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  ControlInterface* control_interface_;
86f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  EventDispatcher* dispatcher_;
87f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  Metrics* metrics_;
88f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  Manager* manager_;
89887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
9097f317c08f8ae4f3dd131ac9a517f490b1f7b4e6Prathmesh Prabhu  // Post-payment activation state of the modem.
91c20ed13f5c0e87e7a5164d1b5330ccd99cced58fBen Chan  std::unique_ptr<PendingActivationStore> pending_activation_store_;
92137884a3ebbbd5331a24aa67f8e8bdd02e22529dDarin Petkov
93887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov  DISALLOW_COPY_AND_ASSIGN(ModemInfo);
94887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov};
95887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
96887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov}  // namespace shill
97887f2983bc84acc15139df257e43217fec1f6cdbDarin Petkov
98c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#endif  // SHILL_CELLULAR_MODEM_INFO_H_
99