cellular_capability_cdma.h revision 9a24553461df7036755060423f90804011612249
1ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov// Use of this source code is governed by a BSD-style license that can be
3daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov// found in the LICENSE file.
4daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
5daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov#ifndef SHILL_CELLULAR_CAPABILITY_CDMA_
6daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov#define SHILL_CELLULAR_CAPABILITY_CDMA_
7daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
8184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov#include <base/memory/scoped_ptr.h>
93e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood#include <base/memory/weak_ptr.h>
10ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov#include <gtest/gtest_prod.h>  // for FRIEND_TEST
11a3d3be5100a0931273cdfc08b364efe03322e3caDarin Petkov
12daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov#include "shill/cellular_capability.h"
13381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov#include "shill/cellular_service.h"
14184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov#include "shill/modem_cdma_proxy_interface.h"
15daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
16daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkovnamespace shill {
17daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
189a24553461df7036755060423f90804011612249Eric Shienbroodclass CellularCapabilityCDMA : public CellularCapability {
19daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov public:
205de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood  CellularCapabilityCDMA(Cellular *cellular, ProxyFactory *proxy_factory);
21daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
22b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov  // Inherited from CellularCapability.
239a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void StartModem(Error *error, const ResultCallback &callback);
249a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void StopModem(Error *error, const ResultCallback &callback);
255f316f65dd63b21c050f48410170482bfe92e286Darin Petkov  virtual void OnServiceCreated();
26ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  virtual void UpdateStatus(const DBusPropertiesMap &properties);
27ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  virtual void SetupConnectProperties(DBusPropertiesMap *properties);
289a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void Activate(const std::string &carrier, Error *error,
299a24553461df7036755060423f90804011612249Eric Shienbrood                        const ResultCallback &callback);
30b72cf40dc315f9ae3537980f4fd85e737c125a03Darin Petkov  virtual bool IsRegistered();
31ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov  virtual std::string CreateFriendlyServiceName();
3220c13ec645faacb9c517fd2c574aa7fa30d890d0Darin Petkov  virtual std::string GetNetworkTechnologyString() const;
3320c13ec645faacb9c517fd2c574aa7fa30d890d0Darin Petkov  virtual std::string GetRoamingStateString() const;
343e509242f1a0e2e018a5c18a8d7b9224c6044d9aDarin Petkov  virtual void GetSignalQuality();
359a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void GetRegistrationState();
369a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void GetProperties(const ResultCallback &callback);
37ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  virtual void OnModemManagerPropertiesChanged(
38ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov      const DBusPropertiesMap &properties);
39daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
409a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void GetMEID(const ResultCallback &callback);
41cb547737d288052935052eeb341b30922b4022a0Darin Petkov
42ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  uint32 activation_state() const { return activation_state_; }
43184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov  uint32 registration_state_evdo() const { return registration_state_evdo_; }
44184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov  uint32 registration_state_1x() const { return registration_state_1x_; }
45184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov
469a24553461df7036755060423f90804011612249Eric Shienbrood protected:
479a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void InitProxies();
489a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void ReleaseProxies();
499a24553461df7036755060423f90804011612249Eric Shienbrood
50daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov private:
51184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov  friend class CellularCapabilityCDMATest;
529a24553461df7036755060423f90804011612249Eric Shienbrood  friend class CellularTest;
535de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood  FRIEND_TEST(CellularCapabilityCDMATest, Activate);
545de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood  FRIEND_TEST(CellularCapabilityCDMATest, ActivateError);
55ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov  FRIEND_TEST(CellularCapabilityCDMATest, CreateFriendlyServiceName);
56ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  FRIEND_TEST(CellularCapabilityCDMATest, GetActivationStateString);
57ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  FRIEND_TEST(CellularCapabilityCDMATest, GetActivationErrorString);
58ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  FRIEND_TEST(CellularTest, CreateService);
59ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov
60ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  static const char kPhoneNumber[];
61184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov
62ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  void HandleNewActivationState(uint32 error);
63ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov
64ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  // Updates the serving operator on the active service.
65ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  void UpdateServingOperator();
66ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov
67ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  static std::string GetActivationStateString(uint32 state);
68ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  static std::string GetActivationErrorString(uint32 error);
69ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov
709a24553461df7036755060423f90804011612249Eric Shienbrood  // Signal callbacks from the Modem.CDMA interface
719a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void OnActivationStateChangedSignal(
72184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov      uint32 activation_state,
73184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov      uint32 activation_error,
74184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov      const DBusPropertiesMap &status_changes);
759a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void OnRegistrationStateChangedSignal(
769a24553461df7036755060423f90804011612249Eric Shienbrood      uint32 state_1x, uint32 state_evdo);
779a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void OnSignalQualitySignal(uint32 strength);
789a24553461df7036755060423f90804011612249Eric Shienbrood
799a24553461df7036755060423f90804011612249Eric Shienbrood  // Method reply callbacks from the Modem.CDMA interface
809a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void OnActivateReply(const ResultCallback &callback,
819a24553461df7036755060423f90804011612249Eric Shienbrood                               uint32 status, const Error &error);
829a24553461df7036755060423f90804011612249Eric Shienbrood
839a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void OnGetRegistrationStateReply(uint32 state_1x, uint32 state_evdo,
849a24553461df7036755060423f90804011612249Eric Shienbrood                                           const Error &error);
859a24553461df7036755060423f90804011612249Eric Shienbrood  virtual void OnGetSignalQualityReply(uint32 strength,
869a24553461df7036755060423f90804011612249Eric Shienbrood                                       const Error &error);
87184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov
88184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov  scoped_ptr<ModemCDMAProxyInterface> proxy_;
893e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood  base::WeakPtrFactory<CellularCapabilityCDMA> weak_ptr_factory_;
90a3d3be5100a0931273cdfc08b364efe03322e3caDarin Petkov
91ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  uint32 activation_state_;
92184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov  uint32 registration_state_evdo_;
93184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov  uint32 registration_state_1x_;
94ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  uint16 prl_version_;
95381928f996d23a21d4cfbed70d07cbf9029f625dDarin Petkov  CellularService::OLP olp_;
96ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  std::string usage_url_;
97184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov
98ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov  static unsigned int friendly_service_name_id_;
99ac635a8fb539fd44f3e24c33872b61fd064c0d60Darin Petkov
100daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov  DISALLOW_COPY_AND_ASSIGN(CellularCapabilityCDMA);
101daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov};
102daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
103daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov}  // namespace shill
104daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
105daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov#endif  // SHILL_CELLULAR_CAPABILITY_CDMA_
106