mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /*
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2018, Arm Limited and affiliates.
kenjiArai 0:5b88d5760320 3 * SPDX-License-Identifier: Apache-2.0
kenjiArai 0:5b88d5760320 4 *
kenjiArai 0:5b88d5760320 5 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 0:5b88d5760320 6 * you may not use this file except in compliance with the License.
kenjiArai 0:5b88d5760320 7 * You may obtain a copy of the License at
kenjiArai 0:5b88d5760320 8 *
kenjiArai 0:5b88d5760320 9 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 0:5b88d5760320 10 *
kenjiArai 0:5b88d5760320 11 * Unless required by applicable law or agreed to in writing, software
kenjiArai 0:5b88d5760320 12 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 0:5b88d5760320 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 0:5b88d5760320 14 * See the License for the specific language governing permissions and
kenjiArai 0:5b88d5760320 15 * limitations under the License.
kenjiArai 0:5b88d5760320 16 */
kenjiArai 0:5b88d5760320 17 #ifndef _CELLULARCONTEXT_H_
kenjiArai 0:5b88d5760320 18 #define _CELLULARCONTEXT_H_
kenjiArai 0:5b88d5760320 19
kenjiArai 0:5b88d5760320 20 #include "CellularInterface.h"
kenjiArai 0:5b88d5760320 21 #include "CellularDevice.h"
kenjiArai 1:9db0e321a9f4 22 #include "CellularUtil.h"
kenjiArai 0:5b88d5760320 23 #include "ControlPlane_netif.h"
kenjiArai 0:5b88d5760320 24 #include "PinNames.h"
kenjiArai 0:5b88d5760320 25
kenjiArai 0:5b88d5760320 26 /** @file CellularContext.h
kenjiArai 0:5b88d5760320 27 * @brief Cellular PDP context class
kenjiArai 0:5b88d5760320 28 *
kenjiArai 0:5b88d5760320 29 */
kenjiArai 0:5b88d5760320 30
kenjiArai 0:5b88d5760320 31 namespace mbed {
kenjiArai 0:5b88d5760320 32
kenjiArai 0:5b88d5760320 33 /**
kenjiArai 0:5b88d5760320 34 * @addtogroup cellular
kenjiArai 0:5b88d5760320 35 * @{
kenjiArai 0:5b88d5760320 36 */
kenjiArai 0:5b88d5760320 37
kenjiArai 0:5b88d5760320 38 /// CellularContext is CellularInterface/NetworkInterface with extensions for cellular connectivity
kenjiArai 0:5b88d5760320 39 class CellularContext : public CellularInterface {
kenjiArai 0:5b88d5760320 40
kenjiArai 0:5b88d5760320 41 public:
kenjiArai 0:5b88d5760320 42
kenjiArai 0:5b88d5760320 43 // max simultaneous PDP contexts active
kenjiArai 0:5b88d5760320 44 static const int PDP_CONTEXT_COUNT = 4;
kenjiArai 0:5b88d5760320 45
kenjiArai 0:5b88d5760320 46 /* authentication type when activating or modifying the pdp context */
kenjiArai 0:5b88d5760320 47 enum AuthenticationType {
kenjiArai 0:5b88d5760320 48 NOAUTH = 0,
kenjiArai 0:5b88d5760320 49 PAP,
kenjiArai 1:9db0e321a9f4 50 CHAP,
kenjiArai 1:9db0e321a9f4 51 AUTOMATIC
kenjiArai 0:5b88d5760320 52 };
kenjiArai 0:5b88d5760320 53
kenjiArai 0:5b88d5760320 54 /* whether the additional exception reports are allowed to be sent when the maximum uplink rate is reached */
kenjiArai 0:5b88d5760320 55 enum RateControlExceptionReports {
kenjiArai 0:5b88d5760320 56 NotAllowedToBeSent = 0,
kenjiArai 0:5b88d5760320 57 AllowedToBeSent
kenjiArai 0:5b88d5760320 58 };
kenjiArai 0:5b88d5760320 59
kenjiArai 0:5b88d5760320 60 /* specifies the time unit to be used for the maximum uplink rate */
kenjiArai 0:5b88d5760320 61 enum RateControlUplinkTimeUnit {
kenjiArai 0:5b88d5760320 62 Unrestricted = 0,
kenjiArai 0:5b88d5760320 63 Minute,
kenjiArai 0:5b88d5760320 64 Hour,
kenjiArai 0:5b88d5760320 65 Day,
kenjiArai 0:5b88d5760320 66 Week
kenjiArai 0:5b88d5760320 67 };
kenjiArai 0:5b88d5760320 68
kenjiArai 0:5b88d5760320 69 /// PDP Context information
kenjiArai 0:5b88d5760320 70 struct pdpcontext_params_t {
kenjiArai 0:5b88d5760320 71 char apn[MAX_ACCESSPOINT_NAME_LENGTH + 1];
kenjiArai 0:5b88d5760320 72 char local_addr[MAX_IPV6_ADDR_IN_IPV4LIKE_DOTTED_FORMAT + 1];
kenjiArai 0:5b88d5760320 73 char local_subnet_mask[MAX_IPV6_ADDR_IN_IPV4LIKE_DOTTED_FORMAT + 1];
kenjiArai 0:5b88d5760320 74 char gateway_addr[MAX_IPV6_ADDR_IN_IPV4LIKE_DOTTED_FORMAT + 1];
kenjiArai 0:5b88d5760320 75 char dns_primary_addr[MAX_IPV6_ADDR_IN_IPV4LIKE_DOTTED_FORMAT + 1];
kenjiArai 0:5b88d5760320 76 char dns_secondary_addr[MAX_IPV6_ADDR_IN_IPV4LIKE_DOTTED_FORMAT + 1];
kenjiArai 0:5b88d5760320 77 char p_cscf_prim_addr[MAX_IPV6_ADDR_IN_IPV4LIKE_DOTTED_FORMAT + 1];
kenjiArai 0:5b88d5760320 78 char p_cscf_sec_addr[MAX_IPV6_ADDR_IN_IPV4LIKE_DOTTED_FORMAT + 1];
kenjiArai 0:5b88d5760320 79 int cid;
kenjiArai 0:5b88d5760320 80 int bearer_id;
kenjiArai 0:5b88d5760320 81 int im_signalling_flag;
kenjiArai 0:5b88d5760320 82 int lipa_indication;
kenjiArai 0:5b88d5760320 83 int ipv4_mtu;
kenjiArai 0:5b88d5760320 84 int wlan_offload;
kenjiArai 0:5b88d5760320 85 int local_addr_ind;
kenjiArai 0:5b88d5760320 86 int non_ip_mtu;
kenjiArai 0:5b88d5760320 87 int serving_plmn_rate_control_value;
kenjiArai 0:5b88d5760320 88 pdpcontext_params_t *next;
kenjiArai 0:5b88d5760320 89
kenjiArai 0:5b88d5760320 90 pdpcontext_params_t()
kenjiArai 0:5b88d5760320 91 {
kenjiArai 0:5b88d5760320 92 apn[0] = '\0';
kenjiArai 0:5b88d5760320 93 local_addr[0] = '\0';
kenjiArai 0:5b88d5760320 94 local_subnet_mask[0] = '\0';
kenjiArai 0:5b88d5760320 95 gateway_addr[0] = '\0';
kenjiArai 0:5b88d5760320 96 dns_primary_addr[0] = '\0';
kenjiArai 0:5b88d5760320 97 dns_secondary_addr[0] = '\0';
kenjiArai 0:5b88d5760320 98 p_cscf_prim_addr[0] = '\0';
kenjiArai 0:5b88d5760320 99 p_cscf_sec_addr[0] = '\0';
kenjiArai 0:5b88d5760320 100 cid = -1;
kenjiArai 0:5b88d5760320 101 bearer_id = -1;
kenjiArai 0:5b88d5760320 102 im_signalling_flag = -1;
kenjiArai 0:5b88d5760320 103 lipa_indication = -1;
kenjiArai 0:5b88d5760320 104 ipv4_mtu = -1;
kenjiArai 0:5b88d5760320 105 wlan_offload = -1;
kenjiArai 0:5b88d5760320 106 local_addr_ind = -1;
kenjiArai 0:5b88d5760320 107 non_ip_mtu = -1;
kenjiArai 0:5b88d5760320 108 serving_plmn_rate_control_value = -1;
kenjiArai 0:5b88d5760320 109 next = NULL;
kenjiArai 0:5b88d5760320 110 }
kenjiArai 0:5b88d5760320 111 };
kenjiArai 0:5b88d5760320 112 typedef CellularList<pdpcontext_params_t> pdpContextList_t;
kenjiArai 0:5b88d5760320 113
kenjiArai 0:5b88d5760320 114 // pointer for next item when used as a linked list
kenjiArai 0:5b88d5760320 115 CellularContext *_next;
kenjiArai 0:5b88d5760320 116 protected:
kenjiArai 0:5b88d5760320 117 // friend of CellularDevice, so it's the only way to close or delete this class.
kenjiArai 0:5b88d5760320 118 friend class CellularDevice;
kenjiArai 0:5b88d5760320 119 CellularContext();
kenjiArai 0:5b88d5760320 120 virtual ~CellularContext() {}
kenjiArai 0:5b88d5760320 121 public: // from NetworkInterface
kenjiArai 0:5b88d5760320 122 virtual nsapi_error_t set_blocking(bool blocking) = 0;
kenjiArai 0:5b88d5760320 123 virtual NetworkStack *get_stack() = 0;
kenjiArai 1:9db0e321a9f4 124 virtual nsapi_error_t get_ip_address(SocketAddress *address) = 0;
kenjiArai 1:9db0e321a9f4 125 MBED_DEPRECATED_SINCE("mbed-os-5.15", "String-based APIs are deprecated")
kenjiArai 0:5b88d5760320 126 virtual const char *get_ip_address() = 0;
kenjiArai 0:5b88d5760320 127
kenjiArai 0:5b88d5760320 128 /** Register callback for status reporting.
kenjiArai 0:5b88d5760320 129 *
kenjiArai 0:5b88d5760320 130 * The specified status callback function is called on the network, and the cellular device status changes.
kenjiArai 0:5b88d5760320 131 * The parameters on the callback are the event type and event type dependent reason parameter.
kenjiArai 0:5b88d5760320 132 *
kenjiArai 0:5b88d5760320 133 * @remark deleting CellularDevice/CellularContext in callback is not allowed.
kenjiArai 0:5b88d5760320 134 * @remark Allocating/adding lots of traces not recommended as callback is called mostly from State machines thread which
kenjiArai 0:5b88d5760320 135 * is now 2048. You can change to main thread for example via EventQueue.
kenjiArai 0:5b88d5760320 136 *
kenjiArai 0:5b88d5760320 137 * @param status_cb The callback for status changes.
kenjiArai 0:5b88d5760320 138 */
kenjiArai 0:5b88d5760320 139 virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb) = 0;
kenjiArai 0:5b88d5760320 140 virtual nsapi_error_t connect() = 0;
kenjiArai 0:5b88d5760320 141 virtual nsapi_error_t disconnect() = 0;
kenjiArai 0:5b88d5760320 142
kenjiArai 0:5b88d5760320 143 // from CellularInterface
kenjiArai 0:5b88d5760320 144 virtual void set_plmn(const char *plmn) = 0;
kenjiArai 0:5b88d5760320 145 virtual void set_sim_pin(const char *sim_pin) = 0;
kenjiArai 0:5b88d5760320 146 virtual nsapi_error_t connect(const char *sim_pin, const char *apn = 0, const char *uname = 0,
kenjiArai 0:5b88d5760320 147 const char *pwd = 0) = 0;
kenjiArai 0:5b88d5760320 148 virtual void set_credentials(const char *apn, const char *uname = 0, const char *pwd = 0) = 0;
kenjiArai 1:9db0e321a9f4 149 virtual nsapi_error_t get_netmask(SocketAddress *address) = 0;
kenjiArai 1:9db0e321a9f4 150 MBED_DEPRECATED_SINCE("mbed-os-5.15", "String-based APIs are deprecated")
kenjiArai 0:5b88d5760320 151 virtual const char *get_netmask() = 0;
kenjiArai 1:9db0e321a9f4 152 virtual nsapi_error_t get_gateway(SocketAddress *address) = 0;
kenjiArai 1:9db0e321a9f4 153 MBED_DEPRECATED_SINCE("mbed-os-5.15", "String-based APIs are deprecated")
kenjiArai 0:5b88d5760320 154 virtual const char *get_gateway() = 0;
kenjiArai 0:5b88d5760320 155 virtual bool is_connected() = 0;
kenjiArai 0:5b88d5760320 156
kenjiArai 0:5b88d5760320 157 /** Same as NetworkInterface::get_default_instance()
kenjiArai 0:5b88d5760320 158 *
kenjiArai 0:5b88d5760320 159 * @note not to be used if get_default_nonip_instance() was already used
kenjiArai 0:5b88d5760320 160 *
kenjiArai 0:5b88d5760320 161 */
kenjiArai 0:5b88d5760320 162 static CellularContext *get_default_instance();
kenjiArai 0:5b88d5760320 163
kenjiArai 0:5b88d5760320 164
kenjiArai 0:5b88d5760320 165 /** Instantiates a default Non-IP cellular interface
kenjiArai 0:5b88d5760320 166 *
kenjiArai 0:5b88d5760320 167 * This function creates a new Non-IP PDP context.
kenjiArai 0:5b88d5760320 168 *
kenjiArai 0:5b88d5760320 169 * @note not to be used if get_default_instance() was already used
kenjiArai 0:5b88d5760320 170 *
kenjiArai 0:5b88d5760320 171 * @return A Non-IP cellular PDP context
kenjiArai 0:5b88d5760320 172 *
kenjiArai 0:5b88d5760320 173 */
kenjiArai 0:5b88d5760320 174 static CellularContext *get_default_nonip_instance();
kenjiArai 0:5b88d5760320 175
kenjiArai 0:5b88d5760320 176 /** Get pointer to CellularDevice instance. May be null if not AT-layer.
kenjiArai 0:5b88d5760320 177 *
kenjiArai 0:5b88d5760320 178 * @return pointer to CellularDevice instance
kenjiArai 0:5b88d5760320 179 */
kenjiArai 0:5b88d5760320 180 CellularDevice *get_device() const;
kenjiArai 0:5b88d5760320 181
kenjiArai 0:5b88d5760320 182 // Operations, can be sync/async. Also Connect() is this kind of operation, inherited from NetworkInterface above.
kenjiArai 0:5b88d5760320 183
kenjiArai 0:5b88d5760320 184 /** Start the interface
kenjiArai 0:5b88d5760320 185 *
kenjiArai 0:5b88d5760320 186 * Initializes the modem for communication.
kenjiArai 0:5b88d5760320 187 * By default, this API is synchronous. API can be set to asynchronous with method set_blocking(...).
kenjiArai 0:5b88d5760320 188 * In synchronous and asynchronous mode application can get result in from callback which is set with
kenjiArai 0:5b88d5760320 189 * attach(...)
kenjiArai 0:5b88d5760320 190 *
kenjiArai 0:5b88d5760320 191 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 192 * NSAPI_ERROR_NO_MEMORY on case of memory failure
kenjiArai 0:5b88d5760320 193 */
kenjiArai 0:5b88d5760320 194 virtual nsapi_error_t set_device_ready() = 0;
kenjiArai 0:5b88d5760320 195
kenjiArai 0:5b88d5760320 196 /** Start the interface
kenjiArai 0:5b88d5760320 197 *
kenjiArai 0:5b88d5760320 198 * Attempts to open the SIM.
kenjiArai 0:5b88d5760320 199 * By default, this API is synchronous. API can be set to asynchronous with method set_blocking(...).
kenjiArai 0:5b88d5760320 200 * In synchronous and asynchronous mode, the application can get result in from callback, which is set with
kenjiArai 0:5b88d5760320 201 * attach(...)
kenjiArai 0:5b88d5760320 202 *
kenjiArai 0:5b88d5760320 203 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 204 * NSAPI_ERROR_NO_MEMORY on case of memory failure
kenjiArai 0:5b88d5760320 205 */
kenjiArai 0:5b88d5760320 206 virtual nsapi_error_t set_sim_ready() = 0;
kenjiArai 0:5b88d5760320 207
kenjiArai 0:5b88d5760320 208 /** Start the interface
kenjiArai 0:5b88d5760320 209 *
kenjiArai 0:5b88d5760320 210 * Attempts to register the device to cellular network.
kenjiArai 0:5b88d5760320 211 * By default, this API is synchronous. API can be set to asynchronous with method set_blocking(...).
kenjiArai 0:5b88d5760320 212 * In synchronous and asynchronous mode, the application can get result in from callback, which is set with
kenjiArai 0:5b88d5760320 213 * attach(...)
kenjiArai 0:5b88d5760320 214 *
kenjiArai 0:5b88d5760320 215 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 216 * NSAPI_ERROR_NO_MEMORY on case of memory failure
kenjiArai 0:5b88d5760320 217 */
kenjiArai 0:5b88d5760320 218 virtual nsapi_error_t register_to_network() = 0;
kenjiArai 0:5b88d5760320 219
kenjiArai 0:5b88d5760320 220 /** Start the interface
kenjiArai 0:5b88d5760320 221 *
kenjiArai 0:5b88d5760320 222 * Attempts to attach the device to cellular network.
kenjiArai 0:5b88d5760320 223 * By default, this API is synchronous. API can be set to asynchronous with method set_blocking(...).
kenjiArai 0:5b88d5760320 224 * In synchronous and asynchronous mode, the application can get result in from callback, which is set with
kenjiArai 0:5b88d5760320 225 * attach(...)
kenjiArai 0:5b88d5760320 226 *
kenjiArai 0:5b88d5760320 227 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 228 * NSAPI_ERROR_NO_MEMORY on case of memory failure
kenjiArai 0:5b88d5760320 229 */
kenjiArai 0:5b88d5760320 230 virtual nsapi_error_t attach_to_network() = 0;
kenjiArai 0:5b88d5760320 231
kenjiArai 0:5b88d5760320 232 // PDP Context specific functions
kenjiArai 0:5b88d5760320 233
kenjiArai 0:5b88d5760320 234 /** Get APN rate control.
kenjiArai 0:5b88d5760320 235 *
kenjiArai 0:5b88d5760320 236 * @remark optional params are not updated if not received from network, so use good defaults
kenjiArai 0:5b88d5760320 237 * @param reports Additional exception reports at maximum rate reached are allowed to be sent [optional]
kenjiArai 0:5b88d5760320 238 * @param time_unit Uplink time unit with values 0=unrestricted, 1=minute, 2=hour, 3=day, 4=week [optional]
kenjiArai 0:5b88d5760320 239 * @param uplink_rate Maximum number of messages per timeUnit [optional]
kenjiArai 0:5b88d5760320 240 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 241 * NSAPI_ERROR_DEVICE_ERROR on case of failure
kenjiArai 0:5b88d5760320 242 */
kenjiArai 0:5b88d5760320 243 virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports,
kenjiArai 0:5b88d5760320 244 CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate) = 0;
kenjiArai 0:5b88d5760320 245
kenjiArai 0:5b88d5760320 246 /** Get the relevant information for an active nonsecondary PDP context.
kenjiArai 0:5b88d5760320 247 *
kenjiArai 0:5b88d5760320 248 * @remark optional params are not updated if not received from network.
kenjiArai 0:5b88d5760320 249 * @param params_list reference to linked list, which is filled on successful call
kenjiArai 0:5b88d5760320 250 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 251 * NSAPI_ERROR_NO_MEMORY on memory failure
kenjiArai 0:5b88d5760320 252 * NSAPI_ERROR_DEVICE_ERROR on other failures
kenjiArai 0:5b88d5760320 253 */
kenjiArai 0:5b88d5760320 254 virtual nsapi_error_t get_pdpcontext_params(pdpContextList_t &params_list) = 0;
kenjiArai 0:5b88d5760320 255
kenjiArai 0:5b88d5760320 256 /** Get backoff timer value
kenjiArai 0:5b88d5760320 257 *
kenjiArai 0:5b88d5760320 258 * @param backoff_timer Backoff timer value associated with PDP APN in seconds
kenjiArai 0:5b88d5760320 259 * @return NSAPI_ERROR_OK on success
kenjiArai 0:5b88d5760320 260 * NSAPI_ERROR_PARAMETER if no access point is set or found when activating context
kenjiArai 0:5b88d5760320 261 * NSAPI_ERROR_DEVICE_ERROR on failure
kenjiArai 0:5b88d5760320 262 */
kenjiArai 0:5b88d5760320 263 virtual nsapi_error_t get_apn_backoff_timer(int &backoff_timer) = 0;
kenjiArai 0:5b88d5760320 264
kenjiArai 0:5b88d5760320 265 /** Set the file handle used to communicate with the modem. You can use this to change the default file handle.
kenjiArai 0:5b88d5760320 266 *
kenjiArai 0:5b88d5760320 267 * @param fh file handle for communicating with the modem
kenjiArai 0:5b88d5760320 268 */
kenjiArai 0:5b88d5760320 269 virtual void set_file_handle(FileHandle *fh) = 0;
kenjiArai 0:5b88d5760320 270
kenjiArai 0:5b88d5760320 271 #if (DEVICE_SERIAL && DEVICE_INTERRUPTIN) || defined(DOXYGEN_ONLY)
kenjiArai 0:5b88d5760320 272 /** Set the UART serial used to communicate with the modem. Can be used to change default file handle.
kenjiArai 0:5b88d5760320 273 * File handle set with this method will use data carrier detect to be able to detect disconnection much faster in PPP mode.
kenjiArai 0:5b88d5760320 274 *
kenjiArai 0:5b88d5760320 275 * @param serial UARTSerial used in communication to modem. If null then the default file handle is used.
kenjiArai 0:5b88d5760320 276 * @param dcd_pin Pin used to set data carrier detect on/off for the given UART
kenjiArai 0:5b88d5760320 277 * @param active_high a boolean set to true if DCD polarity is active low
kenjiArai 0:5b88d5760320 278 */
kenjiArai 0:5b88d5760320 279 virtual void set_file_handle(UARTSerial *serial, PinName dcd_pin = NC, bool active_high = false) = 0;
kenjiArai 0:5b88d5760320 280 #endif // #if DEVICE_SERIAL
kenjiArai 0:5b88d5760320 281
kenjiArai 0:5b88d5760320 282 /** Returns the control plane AT command interface
kenjiArai 0:5b88d5760320 283 */
kenjiArai 0:5b88d5760320 284 virtual ControlPlane_netif *get_cp_netif() = 0;
kenjiArai 0:5b88d5760320 285
kenjiArai 0:5b88d5760320 286 /** Get the pdp context id associated with this context.
kenjiArai 0:5b88d5760320 287 *
kenjiArai 0:5b88d5760320 288 * @return cid
kenjiArai 0:5b88d5760320 289 */
kenjiArai 0:5b88d5760320 290 int get_cid() const;
kenjiArai 0:5b88d5760320 291
kenjiArai 0:5b88d5760320 292 /** Set the authentication type to be used in user authentication if user name and password are defined
kenjiArai 0:5b88d5760320 293 *
kenjiArai 0:5b88d5760320 294 * @param type enum AuthenticationType
kenjiArai 0:5b88d5760320 295 */
kenjiArai 0:5b88d5760320 296 void set_authentication_type(AuthenticationType type);
kenjiArai 0:5b88d5760320 297
kenjiArai 0:5b88d5760320 298 protected: // Device specific implementations might need these so protected
kenjiArai 0:5b88d5760320 299 enum ContextOperation {
kenjiArai 0:5b88d5760320 300 OP_INVALID = -1,
kenjiArai 0:5b88d5760320 301 OP_DEVICE_READY = 0,
kenjiArai 0:5b88d5760320 302 OP_SIM_READY = 1,
kenjiArai 0:5b88d5760320 303 OP_REGISTER = 2,
kenjiArai 0:5b88d5760320 304 OP_ATTACH = 3,
kenjiArai 0:5b88d5760320 305 OP_CONNECT = 4,
kenjiArai 0:5b88d5760320 306 OP_MAX = 5
kenjiArai 0:5b88d5760320 307 };
kenjiArai 0:5b88d5760320 308
kenjiArai 0:5b88d5760320 309 /** The CellularDevice calls the status callback function on status changes on the network or CellularDevice.
kenjiArai 0:5b88d5760320 310 *
kenjiArai 0:5b88d5760320 311 * @param ev event type
kenjiArai 0:5b88d5760320 312 * @param ptr event-type dependent reason parameter
kenjiArai 0:5b88d5760320 313 */
kenjiArai 0:5b88d5760320 314 virtual void cellular_callback(nsapi_event_t ev, intptr_t ptr) = 0;
kenjiArai 0:5b88d5760320 315
kenjiArai 0:5b88d5760320 316 /** Enable or disable hang-up detection
kenjiArai 0:5b88d5760320 317 *
kenjiArai 0:5b88d5760320 318 * When in PPP data pump mode, it is helpful if the FileHandle will signal hang-up via
kenjiArai 0:5b88d5760320 319 * POLLHUP, e.g., if the DCD line is deasserted on a UART. During command mode, this
kenjiArai 0:5b88d5760320 320 * signaling is not desired. enable_hup() controls whether this function should be
kenjiArai 0:5b88d5760320 321 * active.
kenjiArai 0:5b88d5760320 322 */
kenjiArai 0:5b88d5760320 323 virtual void enable_hup(bool enable) = 0;
kenjiArai 0:5b88d5760320 324
kenjiArai 0:5b88d5760320 325 /** Triggers control plane's operations needed when control plane data is received,
kenjiArai 0:5b88d5760320 326 * like socket event, for example.
kenjiArai 0:5b88d5760320 327 */
kenjiArai 0:5b88d5760320 328 void cp_data_received();
kenjiArai 0:5b88d5760320 329
kenjiArai 0:5b88d5760320 330 /** Retry logic after device attached to network. Retry to find and activate pdp context or in case
kenjiArai 0:5b88d5760320 331 * of PPP find correct pdp context and open data channel. Retry logic is the same which is used in
kenjiArai 0:5b88d5760320 332 * CellularStateMachine.
kenjiArai 0:5b88d5760320 333 */
kenjiArai 0:5b88d5760320 334 virtual void do_connect_with_retry();
kenjiArai 0:5b88d5760320 335
kenjiArai 0:5b88d5760320 336 /** Helper method to call callback function if it is provided
kenjiArai 0:5b88d5760320 337 *
kenjiArai 0:5b88d5760320 338 * @param status connection status which is parameter in callback function
kenjiArai 0:5b88d5760320 339 */
kenjiArai 0:5b88d5760320 340 void call_network_cb(nsapi_connection_status_t status);
kenjiArai 0:5b88d5760320 341
kenjiArai 0:5b88d5760320 342 /** Find and activate pdp context or in case of PPP find correct pdp context and open data channel.
kenjiArai 0:5b88d5760320 343 */
kenjiArai 0:5b88d5760320 344 virtual void do_connect();
kenjiArai 0:5b88d5760320 345
kenjiArai 1:9db0e321a9f4 346 /** After we have connected successfully we must check that we have a valid IP address.
kenjiArai 1:9db0e321a9f4 347 * Some modems/networks don't give IP address right after connect so we must poll it for a while.
kenjiArai 1:9db0e321a9f4 348 */
kenjiArai 1:9db0e321a9f4 349 void validate_ip_address();
kenjiArai 1:9db0e321a9f4 350
kenjiArai 0:5b88d5760320 351 // member variables needed in target override methods
kenjiArai 0:5b88d5760320 352 NetworkStack *_stack; // must be pointer because of PPP
kenjiArai 0:5b88d5760320 353 pdp_type_t _pdp_type;
kenjiArai 0:5b88d5760320 354 CellularContext::AuthenticationType _authentication_type;
kenjiArai 0:5b88d5760320 355 nsapi_connection_status_t _connect_status;
kenjiArai 0:5b88d5760320 356 cell_callback_data_t _cb_data;
kenjiArai 0:5b88d5760320 357 Callback<void(nsapi_event_t, intptr_t)> _status_cb;
kenjiArai 0:5b88d5760320 358 int _cid;
kenjiArai 0:5b88d5760320 359 bool _new_context_set;
kenjiArai 0:5b88d5760320 360 bool _is_context_active;
kenjiArai 0:5b88d5760320 361 bool _is_context_activated; // did we activate the context
kenjiArai 0:5b88d5760320 362 const char *_apn;
kenjiArai 0:5b88d5760320 363 const char *_uname;
kenjiArai 0:5b88d5760320 364 const char *_pwd;
kenjiArai 0:5b88d5760320 365 PinName _dcd_pin;
kenjiArai 0:5b88d5760320 366 bool _active_high;
kenjiArai 0:5b88d5760320 367
kenjiArai 0:5b88d5760320 368 ControlPlane_netif *_cp_netif;
kenjiArai 0:5b88d5760320 369 uint16_t _retry_timeout_array[CELLULAR_RETRY_ARRAY_SIZE];
kenjiArai 0:5b88d5760320 370 int _retry_array_length;
kenjiArai 0:5b88d5760320 371 int _retry_count;
kenjiArai 0:5b88d5760320 372 CellularDevice *_device;
kenjiArai 0:5b88d5760320 373 CellularNetwork *_nw;
kenjiArai 0:5b88d5760320 374 bool _is_blocking;
kenjiArai 1:9db0e321a9f4 375 // flag indicating if Non-IP context was requested to be setup
kenjiArai 1:9db0e321a9f4 376 bool _nonip_req;
kenjiArai 1:9db0e321a9f4 377 // tells if CCIOTOPTI received green from network for CP optimization use
kenjiArai 1:9db0e321a9f4 378 bool _cp_in_use;
kenjiArai 0:5b88d5760320 379 };
kenjiArai 0:5b88d5760320 380
kenjiArai 0:5b88d5760320 381 /**
kenjiArai 0:5b88d5760320 382 * @}
kenjiArai 0:5b88d5760320 383 */
kenjiArai 0:5b88d5760320 384
kenjiArai 0:5b88d5760320 385 } // namespace mbed
kenjiArai 0:5b88d5760320 386
kenjiArai 0:5b88d5760320 387
kenjiArai 0:5b88d5760320 388 #endif /* _CELLULARCONTEXT_H_ */