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