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//
16daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
17c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#ifndef SHILL_CELLULAR_CELLULAR_CAPABILITY_CDMA_H_
18c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#define SHILL_CELLULAR_CELLULAR_CAPABILITY_CDMA_H_
19daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
20c20ed13f5c0e87e7a5164d1b5330ccd99cced58fBen Chan#include <memory>
21c20ed13f5c0e87e7a5164d1b5330ccd99cced58fBen Chan#include <string>
22c20ed13f5c0e87e7a5164d1b5330ccd99cced58fBen Chan#include <vector>
23c20ed13f5c0e87e7a5164d1b5330ccd99cced58fBen Chan
243e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood#include <base/memory/weak_ptr.h>
25289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#if defined(__ANDROID__)
26289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#include <dbus/service_constants.h>
27289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#else
289f09aeffcd088960c5b1a7d507c3705ce14b2b0dJason Glasgow#include <chromeos/dbus/service_constants.h>
29289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#endif  // __ANDROID__
30ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov#include <gtest/gtest_prod.h>  // for FRIEND_TEST
31a3d3be5100a0931273cdfc08b364efe03322e3caDarin Petkov
32c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#include "shill/cellular/cellular_capability.h"
33c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#include "shill/cellular/cellular_capability_classic.h"
34c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#include "shill/cellular/cellular_service.h"
35c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#include "shill/cellular/modem_cdma_proxy_interface.h"
36daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
37daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkovnamespace shill {
38daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
3927526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhuclass ModemInfo;
4027526f1dad75e135f437e023cb34b0919d9a981fPrathmesh Prabhu
4182f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgowclass CellularCapabilityCDMA : public CellularCapabilityClassic {
42daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov public:
43f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  CellularCapabilityCDMA(Cellular* cellular,
44608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu                         ControlInterface* control_interface,
45f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart                         ModemInfo* modem_info);
465ea763b83299b5fad76a87183fb39a74c2d3c61dBen Chan  ~CellularCapabilityCDMA() override;
47daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
48b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov  // Inherited from CellularCapability.
49016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  std::string GetTypeString() const override;
50f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void StartModem(Error* error,
51f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart                  const ResultCallback& callback) override;
52016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  bool AreProxiesInitialized() const override;
53f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void Activate(const std::string& carrier,
54f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart                Error* error,
55f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart                const ResultCallback& callback) override;
56016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  bool IsActivating() const override;
57016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  bool IsRegistered() const override;
58016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  void SetUnregistered(bool searching) override;
59016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  void OnServiceCreated() override;
60016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  std::string GetNetworkTechnologyString() const override;
61016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  std::string GetRoamingStateString() const override;
62016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  bool AllowRoaming() override;
63016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  void GetSignalQuality() override;
6405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu  void SetupConnectProperties(KeyValueStore* properties) override;
65016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  void DisconnectCleanup() override;
66f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chan
67f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chan  // Inherited from CellularCapabilityClassic.
68016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  void GetRegistrationState() override;
69f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void GetProperties(const ResultCallback& callback) override;
70f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chan
71f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  virtual void GetMEID(const ResultCallback& callback);
72cb547737d288052935052eeb341b30922b4022a0Darin Petkov
737fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint32_t activation_state() const { return activation_state_; }
747fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint32_t registration_state_evdo() const { return registration_state_evdo_; }
757fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint32_t registration_state_1x() const { return registration_state_1x_; }
76184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov
779a24553461df7036755060423f90804011612249Eric Shienbrood protected:
78f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chan  // Inherited from CellularCapabilityClassic.
79016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  void InitProxies() override;
80016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  void ReleaseProxies() override;
8105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu  void UpdateStatus(const KeyValueStore& properties) override;
829a24553461df7036755060423f90804011612249Eric Shienbrood
83daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov private:
84184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov  friend class CellularCapabilityCDMATest;
859a24553461df7036755060423f90804011612249Eric Shienbrood  friend class CellularTest;
865de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood  FRIEND_TEST(CellularCapabilityCDMATest, Activate);
875de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood  FRIEND_TEST(CellularCapabilityCDMATest, ActivateError);
88ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  FRIEND_TEST(CellularCapabilityCDMATest, GetActivationStateString);
89ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  FRIEND_TEST(CellularCapabilityCDMATest, GetActivationErrorString);
901582bddf620625f9e6f6c407a707d6a916387df1Christopher Wiley  FRIEND_TEST(CellularServiceTest, IsAutoConnectable);
91ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  FRIEND_TEST(CellularTest, CreateService);
92ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov
93ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  static const char kPhoneNumber[];
94184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov
957fab89734d88724a288e96a9996b15548c5294c7Ben Chan  void HandleNewActivationState(uint32_t error);
96ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov
977fab89734d88724a288e96a9996b15548c5294c7Ben Chan  static std::string GetActivationStateString(uint32_t state);
987fab89734d88724a288e96a9996b15548c5294c7Ben Chan  static std::string GetActivationErrorString(uint32_t error);
99ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov
1009a24553461df7036755060423f90804011612249Eric Shienbrood  // Signal callbacks from the Modem.CDMA interface
1013022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams  void OnActivationStateChangedSignal(
1027fab89734d88724a288e96a9996b15548c5294c7Ben Chan      uint32_t activation_state,
1037fab89734d88724a288e96a9996b15548c5294c7Ben Chan      uint32_t activation_error,
10405d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu      const KeyValueStore& status_changes);
1053022be5da0e7e158c7f8fc4e3f5d005eb5dde7e7Nathan Williams  void OnRegistrationStateChangedSignal(
1067fab89734d88724a288e96a9996b15548c5294c7Ben Chan      uint32_t state_1x, uint32_t state_evdo);
1077fab89734d88724a288e96a9996b15548c5294c7Ben Chan  void OnSignalQualitySignal(uint32_t strength);
1089a24553461df7036755060423f90804011612249Eric Shienbrood
1099a24553461df7036755060423f90804011612249Eric Shienbrood  // Method reply callbacks from the Modem.CDMA interface
110f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void OnActivateReply(const ResultCallback& callback,
111f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart                       uint32_t status, const Error& error);
1129a24553461df7036755060423f90804011612249Eric Shienbrood
1137fab89734d88724a288e96a9996b15548c5294c7Ben Chan  void OnGetRegistrationStateReply(uint32_t state_1x, uint32_t state_evdo,
114f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart                                   const Error& error);
115f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart  void OnGetSignalQualityReply(uint32_t strength, const Error& error);
116184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov
117c20ed13f5c0e87e7a5164d1b5330ccd99cced58fBen Chan  std::unique_ptr<ModemCDMAProxyInterface> proxy_;
1183e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood  base::WeakPtrFactory<CellularCapabilityCDMA> weak_ptr_factory_;
119a3d3be5100a0931273cdfc08b364efe03322e3caDarin Petkov
12028b4a3b38737f29b98e0e19aefd92b2454165040Prathmesh Prabhu  // Helper method to extract the online portal information from properties.
12105d87e34869f44473edc1eec25d2fe1110d777a7Peter Qiu  void UpdateOnlinePortal(const KeyValueStore& properties);
122016fa0e9c8f47630c8e6c440ace42ba99f8498dfAlex Vakulenko  void UpdateServiceOLP() override;
12328b4a3b38737f29b98e0e19aefd92b2454165040Prathmesh Prabhu
1241582bddf620625f9e6f6c407a707d6a916387df1Christopher Wiley  bool activation_starting_;
1258a46890363301a4e28fe3175e194703409e344dcChristopher Wiley  ResultCallback pending_activation_callback_;
1268a46890363301a4e28fe3175e194703409e344dcChristopher Wiley  std::string pending_activation_carrier_;
1277fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint32_t activation_state_;
1287fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint32_t registration_state_evdo_;
1297fab89734d88724a288e96a9996b15548c5294c7Ben Chan  uint32_t registration_state_1x_;
130ae0c64ea644748f28b7a320e9663f30cd69e344eDarin Petkov  std::string usage_url_;
131184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov
132daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov  DISALLOW_COPY_AND_ASSIGN(CellularCapabilityCDMA);
133daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov};
134daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
135daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov}  // namespace shill
136daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov
137c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#endif  // SHILL_CELLULAR_CELLULAR_CAPABILITY_CDMA_H_
138