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