mbed-os5 only for TYBLE16
Dependents: TYBLE16_simple_data_logger TYBLE16_MP3_Air
features/cellular/framework/API/CellularContext.h@1:9db0e321a9f4, 2019-12-31 (annotated)
- 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?
User | Revision | Line number | New 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 ¶ms_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_ */ |