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