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#include "shill/cellular/cellular_capability.h" 18daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov 199a24553461df7036755060423f90804011612249Eric Shienbrood#include <base/bind.h> 20289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#if defined(__ANDROID__) 21289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#include <dbus/service_constants.h> 22289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#else 235de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood#include <chromeos/dbus/service_constants.h> 24289a5a5e18bb1a676b3dfce111af4c2c00c7776eSamuel Tan#endif // __ANDROID__ 255de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood 26c54afe521739065a5d77e7c049acdb5e603f0592Ben Chan#include "shill/cellular/cellular.h" 27b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov#include "shill/error.h" 28b691efd71561246065eae3cdd73a96ca1b8a528dChristopher Wiley#include "shill/logging.h" 299c1dcef1a5a21057392874bd511b5c577c35634aDarin Petkov#include "shill/property_accessor.h" 30b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov 313e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbroodusing base::Closure; 32b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkovusing std::string; 33daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov 34daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkovnamespace shill { 35daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov 36c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silbersteinnamespace Logging { 37c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silbersteinstatic auto kModuleLogScope = ScopeLogger::kCellular; 38f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartstatic string ObjectID(CellularCapability* c) { 39c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein return c->cellular()->GetRpcIdentifier(); 40c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein} 41c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein} 42c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein 437fce52c4afdc5e73a9e740dc9b90f1e61ae8cea4Eric Shienbroodconst char CellularCapability::kModemPropertyIMSI[] = "imsi"; 447fce52c4afdc5e73a9e740dc9b90f1e61ae8cea4Eric Shienbroodconst char CellularCapability::kModemPropertyState[] = "State"; 459a24553461df7036755060423f90804011612249Eric Shienbrood// All timeout values are in milliseconds 460a3e27994a45a9723f3867fe7f297e089bd2254bArman Ugurayconst int CellularCapability::kTimeoutActivate = 300000; 479a24553461df7036755060423f90804011612249Eric Shienbroodconst int CellularCapability::kTimeoutConnect = 45000; 489a24553461df7036755060423f90804011612249Eric Shienbroodconst int CellularCapability::kTimeoutDefault = 5000; 49049adb5335c6bd6863c70c67ecaca06cccd93027Thieu Leconst int CellularCapability::kTimeoutDisconnect = 45000; 50ae41caf8884c8278a31624acb737eec28c59a181Thieu Leconst int CellularCapability::kTimeoutEnable = 45000; 519a24553461df7036755060423f90804011612249Eric Shienbroodconst int CellularCapability::kTimeoutRegister = 90000; 525d0d32c1b5e2370ff0739f7a2dbb641726d4bf87Ben Chanconst int CellularCapability::kTimeoutReset = 90000; 539a24553461df7036755060423f90804011612249Eric Shienbroodconst int CellularCapability::kTimeoutScan = 120000; 545de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood 55f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul StewartCellularCapability::CellularCapability(Cellular* cellular, 56608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu ControlInterface* control_interface, 57f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart ModemInfo* modem_info) 5882f9ab3f404c8f414348c6effdc57c4d3b9223d7Jason Glasgow : cellular_(cellular), 59608ec29525f553d51f0a92e84176e3d4b45930a9Peter Qiu control_interface_(control_interface), 6049ffffd458c2407c67c2d0d572974e91c7e9bea7Prathmesh Prabhu modem_info_(modem_info) {} 61daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov 62daf4386a4775be7c965493749ccfe2fecc2e4167Darin PetkovCellularCapability::~CellularCapability() {} 63daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov 64f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::OnUnsupportedOperation(const char* operation, 65f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart Error* error) { 665de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood string message("The "); 675de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood message.append(operation).append(" operation is not supported."); 6834f424e672439bdf237a755f85245ebd7b66e8e2Paul Stewart Error::PopulateAndLog(FROM_HERE, error, Error::kNotSupported, message); 695de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood} 705de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood 71f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chanvoid CellularCapability::DisconnectCleanup() {} 72f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chan 73f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::Activate(const string& carrier, 74f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart Error* error, 75f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultCallback& callback) { 76f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chan OnUnsupportedOperation(__func__, error); 77f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chan} 78f98f00e52f3408fd3ca6184f19636efb7e66b986Ben Chan 79f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::CompleteActivation(Error* error) { 80c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray OnUnsupportedOperation(__func__, error); 81c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray} 82c7b1560b03c070fad239767f868322e6b3bdd932Arman Uguray 8315786033dc85e3dd7fea18ba936957b8b2c34e29Ben Chanbool CellularCapability::IsServiceActivationRequired() const { 8415786033dc85e3dd7fea18ba936957b8b2c34e29Ben Chan return false; 8515786033dc85e3dd7fea18ba936957b8b2c34e29Ben Chan} 8615786033dc85e3dd7fea18ba936957b8b2c34e29Ben Chan 87184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkovvoid CellularCapability::RegisterOnNetwork( 88f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const string& /*network_id*/, 89f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart Error* error, 90f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultCallback& /*callback*/) { 919a24553461df7036755060423f90804011612249Eric Shienbrood OnUnsupportedOperation(__func__, error); 92184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov} 93184c54e6091b21fc2a8ba40d8957ca6c84c37d6eDarin Petkov 94f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::RequirePIN(const std::string& /*pin*/, 959a24553461df7036755060423f90804011612249Eric Shienbrood bool /*require*/, 96f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart Error* error, 97f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultCallback& /*callback*/) { 989a24553461df7036755060423f90804011612249Eric Shienbrood OnUnsupportedOperation(__func__, error); 99b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov} 100b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov 101f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::EnterPIN(const string& /*pin*/, 102f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart Error* error, 103f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultCallback& /*callback*/) { 1049a24553461df7036755060423f90804011612249Eric Shienbrood OnUnsupportedOperation(__func__, error); 105b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov} 106b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov 107f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::UnblockPIN(const string& /*unblock_code*/, 108f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const string& /*pin*/, 109f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart Error* error, 110f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultCallback& /*callback*/) { 1119a24553461df7036755060423f90804011612249Eric Shienbrood OnUnsupportedOperation(__func__, error); 112b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov} 113b05315fa7beab387bcbfd9330215aa50cdd6c8f4Darin Petkov 114f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::ChangePIN(const string& /*old_pin*/, 115f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const string& /*new_pin*/, 116f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart Error* error, 117f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultCallback& /*callback*/) { 1189a24553461df7036755060423f90804011612249Eric Shienbrood OnUnsupportedOperation(__func__, error); 1195de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood} 1205de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood 121f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::Scan(Error* error, 122f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultStringmapsCallback& callback) { 1239a24553461df7036755060423f90804011612249Eric Shienbrood OnUnsupportedOperation(__func__, error); 1245de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood} 1255de44ab664b7cbb7619e31431e346ec8309548a6Eric Shienbrood 126f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::Reset(Error* error, 127f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultCallback& /*callback*/) { 1285d0d32c1b5e2370ff0739f7a2dbb641726d4bf87Ben Chan OnUnsupportedOperation(__func__, error); 1295d0d32c1b5e2370ff0739f7a2dbb641726d4bf87Ben Chan} 1305d0d32c1b5e2370ff0739f7a2dbb641726d4bf87Ben Chan 131f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewartvoid CellularCapability::SetCarrier(const std::string& /*carrier*/, 132f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart Error* error, 133f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul Stewart const ResultCallback& /*callback*/) { 134c37a9c4ee413984342d53c6151edcb7dc3800d78Darin Petkov OnUnsupportedOperation(__func__, error); 135c37a9c4ee413984342d53c6151edcb7dc3800d78Darin Petkov} 136c37a9c4ee413984342d53c6151edcb7dc3800d78Darin Petkov 137f58b28e08efb9e3beccb993bc27dd68e0025a7daPaul StewartCellularBearer* CellularCapability::GetActiveBearer() const { 138ea18c6c99743aeee9b2e544532ef9fe55dbd182dBen Chan return nullptr; 139539ab0266ef93a3198f12b8be83a6312d35d6ba0Ben Chan} 140539ab0266ef93a3198f12b8be83a6312d35d6ba0Ben Chan 1411582bddf620625f9e6f6c407a707d6a916387df1Christopher Wileybool CellularCapability::IsActivating() const { 1421582bddf620625f9e6f6c407a707d6a916387df1Christopher Wiley return false; 1431582bddf620625f9e6f6c407a707d6a916387df1Christopher Wiley} 1441582bddf620625f9e6f6c407a707d6a916387df1Christopher Wiley 145f84a4242b4218dc375449ab2d68085226f43ce5bArman Uguraybool CellularCapability::ShouldDetectOutOfCredit() const { 146d42d8ec85a9a1bdc406870b75d1b9e266fbaaa02Arman Uguray return false; 147d42d8ec85a9a1bdc406870b75d1b9e266fbaaa02Arman Uguray} 148d42d8ec85a9a1bdc406870b75d1b9e266fbaaa02Arman Uguray 14992df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhuvoid CellularCapability::OnOperatorChanged() { 150c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein SLOG(this, 3) << __func__; 15192df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhu if (cellular()->service()) { 15292df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhu UpdateServiceOLP(); 15392df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhu } 15492df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhu} 15592df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhu 15692df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhuvoid CellularCapability::UpdateServiceOLP() { 157c9c31d8497c3f053c2160408cc386010fc125fadRebecca Silberstein SLOG(this, 3) << __func__; 15892df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhu} 15992df619a98585c7fe7b072fe07f60b43c9ec52ddPrathmesh Prabhu 160daf4386a4775be7c965493749ccfe2fecc2e4167Darin Petkov} // namespace shill 161