blob: 8495a767eeeeb6575a8bc5d017e89f24129cfe0f [file] [log] [blame]
Darin Petkovac635a82012-01-10 16:51:58 +01001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkovdaf43862011-10-27 11:37:28 +02002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SHILL_CELLULAR_CAPABILITY_CDMA_
6#define SHILL_CELLULAR_CAPABILITY_CDMA_
7
Darin Petkov184c54e2011-11-15 12:44:39 +01008#include <base/memory/scoped_ptr.h>
Eric Shienbrood3e20a232012-02-16 11:35:56 -05009#include <base/memory/weak_ptr.h>
Jason Glasgow9f09aef2012-05-08 16:26:55 -040010#include <chromeos/dbus/service_constants.h>
Darin Petkovae0c64e2011-11-15 15:50:27 +010011#include <gtest/gtest_prod.h> // for FRIEND_TEST
Darin Petkova3d3be52011-11-14 21:34:16 +010012
Jason Glasgow82f9ab32012-04-04 14:27:19 -040013#include <string>
Jason Glasgow4c0724a2012-04-17 15:47:40 -040014#include <vector>
Jason Glasgow82f9ab32012-04-04 14:27:19 -040015
Darin Petkovdaf43862011-10-27 11:37:28 +020016#include "shill/cellular_capability.h"
Jason Glasgow82f9ab32012-04-04 14:27:19 -040017#include "shill/cellular_capability_classic.h"
Darin Petkov381928f2012-02-02 23:00:12 +010018#include "shill/cellular_service.h"
Darin Petkov184c54e2011-11-15 12:44:39 +010019#include "shill/modem_cdma_proxy_interface.h"
Darin Petkovdaf43862011-10-27 11:37:28 +020020
21namespace shill {
22
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070023class ModemInfo;
24
Jason Glasgow82f9ab32012-04-04 14:27:19 -040025class CellularCapabilityCDMA : public CellularCapabilityClassic {
Darin Petkovdaf43862011-10-27 11:37:28 +020026 public:
Thieu Lece4483e2013-01-23 15:12:03 -080027 CellularCapabilityCDMA(Cellular *cellular,
28 ProxyFactory *proxy_factory,
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070029 ModemInfo *modem_info);
Darin Petkovdaf43862011-10-27 11:37:28 +020030
Darin Petkovb05315f2011-11-07 10:14:25 +010031 // Inherited from CellularCapability.
Eric Shienbrood9a245532012-03-07 14:20:39 -050032 virtual void StartModem(Error *error, const ResultCallback &callback);
Darin Petkov5f316f62011-11-18 12:10:26 +010033 virtual void OnServiceCreated();
Darin Petkovae0c64e2011-11-15 15:50:27 +010034 virtual void SetupConnectProperties(DBusPropertiesMap *properties);
Eric Shienbrood9a245532012-03-07 14:20:39 -050035 virtual void Activate(const std::string &carrier, Error *error,
36 const ResultCallback &callback);
Christopher Wiley8a468902012-11-30 11:52:38 -080037 virtual void DisconnectCleanup();
Christopher Wiley1582bdd2012-11-15 11:31:14 -080038 virtual bool IsActivating() const;
Darin Petkovb72cf402011-11-22 14:51:39 +010039 virtual bool IsRegistered();
Eric Shienbrood7fce52c2012-04-13 19:11:02 -040040 virtual void SetUnregistered(bool searching);
Darin Petkovac635a82012-01-10 16:51:58 +010041 virtual std::string CreateFriendlyServiceName();
Darin Petkov20c13ec2011-11-09 15:07:15 +010042 virtual std::string GetNetworkTechnologyString() const;
43 virtual std::string GetRoamingStateString() const;
Darin Petkov3e509242011-11-10 14:46:44 +010044 virtual void GetSignalQuality();
Jason Glasgow9f09aef2012-05-08 16:26:55 -040045 virtual std::string GetTypeString() const {
46 return flimflam::kTechnologyFamilyCdma;
47 }
Jason Glasgow4c0724a2012-04-17 15:47:40 -040048 virtual bool AllowRoaming();
Eric Shienbrood9a245532012-03-07 14:20:39 -050049 virtual void GetRegistrationState();
50 virtual void GetProperties(const ResultCallback &callback);
Eric Shienbrood9a245532012-03-07 14:20:39 -050051 virtual void GetMEID(const ResultCallback &callback);
Darin Petkovcb547732011-11-09 13:55:26 +010052
Darin Petkovae0c64e2011-11-15 15:50:27 +010053 uint32 activation_state() const { return activation_state_; }
Darin Petkov184c54e2011-11-15 12:44:39 +010054 uint32 registration_state_evdo() const { return registration_state_evdo_; }
55 uint32 registration_state_1x() const { return registration_state_1x_; }
56
Eric Shienbrood9a245532012-03-07 14:20:39 -050057 protected:
58 virtual void InitProxies();
59 virtual void ReleaseProxies();
Jason Glasgow4380f0d2012-05-03 18:05:04 -040060 virtual void UpdateStatus(const DBusPropertiesMap &properties);
Eric Shienbrood9a245532012-03-07 14:20:39 -050061
Darin Petkovdaf43862011-10-27 11:37:28 +020062 private:
Darin Petkov184c54e2011-11-15 12:44:39 +010063 friend class CellularCapabilityCDMATest;
Eric Shienbrood9a245532012-03-07 14:20:39 -050064 friend class CellularTest;
Eric Shienbrood5de44ab2011-12-05 10:46:27 -050065 FRIEND_TEST(CellularCapabilityCDMATest, Activate);
66 FRIEND_TEST(CellularCapabilityCDMATest, ActivateError);
Darin Petkovac635a82012-01-10 16:51:58 +010067 FRIEND_TEST(CellularCapabilityCDMATest, CreateFriendlyServiceName);
Darin Petkovae0c64e2011-11-15 15:50:27 +010068 FRIEND_TEST(CellularCapabilityCDMATest, GetActivationStateString);
69 FRIEND_TEST(CellularCapabilityCDMATest, GetActivationErrorString);
Christopher Wiley1582bdd2012-11-15 11:31:14 -080070 FRIEND_TEST(CellularServiceTest, IsAutoConnectable);
Darin Petkovae0c64e2011-11-15 15:50:27 +010071 FRIEND_TEST(CellularTest, CreateService);
72
73 static const char kPhoneNumber[];
Darin Petkov184c54e2011-11-15 12:44:39 +010074
Darin Petkovae0c64e2011-11-15 15:50:27 +010075 void HandleNewActivationState(uint32 error);
76
77 // Updates the serving operator on the active service.
78 void UpdateServingOperator();
79
80 static std::string GetActivationStateString(uint32 state);
81 static std::string GetActivationErrorString(uint32 error);
82
Eric Shienbrood9a245532012-03-07 14:20:39 -050083 // Signal callbacks from the Modem.CDMA interface
Nathan Williams3022be52012-04-19 17:40:49 -040084 void OnActivationStateChangedSignal(
Darin Petkov184c54e2011-11-15 12:44:39 +010085 uint32 activation_state,
86 uint32 activation_error,
87 const DBusPropertiesMap &status_changes);
Nathan Williams3022be52012-04-19 17:40:49 -040088 void OnRegistrationStateChangedSignal(
Eric Shienbrood9a245532012-03-07 14:20:39 -050089 uint32 state_1x, uint32 state_evdo);
Nathan Williams3022be52012-04-19 17:40:49 -040090 void OnSignalQualitySignal(uint32 strength);
Eric Shienbrood9a245532012-03-07 14:20:39 -050091
92 // Method reply callbacks from the Modem.CDMA interface
Nathan Williams3022be52012-04-19 17:40:49 -040093 void OnActivateReply(const ResultCallback &callback,
94 uint32 status, const Error &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -050095
Nathan Williams3022be52012-04-19 17:40:49 -040096 void OnGetRegistrationStateReply(uint32 state_1x, uint32 state_evdo,
97 const Error &error);
98 void OnGetSignalQualityReply(uint32 strength, const Error &error);
Darin Petkov184c54e2011-11-15 12:44:39 +010099
100 scoped_ptr<ModemCDMAProxyInterface> proxy_;
Eric Shienbrood3e20a232012-02-16 11:35:56 -0500101 base::WeakPtrFactory<CellularCapabilityCDMA> weak_ptr_factory_;
Darin Petkova3d3be52011-11-14 21:34:16 +0100102
Christopher Wiley1582bdd2012-11-15 11:31:14 -0800103 bool activation_starting_;
Christopher Wiley8a468902012-11-30 11:52:38 -0800104 ResultCallback pending_activation_callback_;
105 std::string pending_activation_carrier_;
Darin Petkovae0c64e2011-11-15 15:50:27 +0100106 uint32 activation_state_;
Darin Petkov184c54e2011-11-15 12:44:39 +0100107 uint32 registration_state_evdo_;
108 uint32 registration_state_1x_;
Darin Petkovae0c64e2011-11-15 15:50:27 +0100109 uint16 prl_version_;
Darin Petkov381928f2012-02-02 23:00:12 +0100110 CellularService::OLP olp_;
Darin Petkovae0c64e2011-11-15 15:50:27 +0100111 std::string usage_url_;
Darin Petkov184c54e2011-11-15 12:44:39 +0100112
Darin Petkovac635a82012-01-10 16:51:58 +0100113 static unsigned int friendly_service_name_id_;
114
Darin Petkovdaf43862011-10-27 11:37:28 +0200115 DISALLOW_COPY_AND_ASSIGN(CellularCapabilityCDMA);
116};
117
118} // namespace shill
119
120#endif // SHILL_CELLULAR_CAPABILITY_CDMA_