Mbed OS Reference
Loading...
Searching...
No Matches
AT_CellularContext.h
1/*
2 * Copyright (c) 2018, Arm Limited and affiliates.
3 * SPDX-License-Identifier: Apache-2.0
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17#ifndef AT_CELLULARCONTEXT_H_
18#define AT_CELLULARCONTEXT_H_
19
20#include "CellularContext.h"
21#include "ATHandler.h"
22#include "rtos/Semaphore.h"
23#include "AT_CellularDevice.h"
24
25
26const int MAX_APN_LENGTH = 63 + 1;
27
28namespace mbed {
29
30/**
31 * @addtogroup at-hayes AT/Hayes Command Set
32 * @ingroup Cellular
33 * @{
34 */
35
37public:
38 AT_CellularContext(ATHandler &at, CellularDevice *device, const char *apn = 0, bool cp_req = false, bool nonip_req = false);
39 virtual ~AT_CellularContext();
40
41// from CellularInterface/NetworkInterface
42 virtual nsapi_error_t set_blocking(bool blocking);
43 virtual NetworkStack *get_stack();
45 virtual char *get_interface_name(char *interface_name);
46 virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
49 virtual nsapi_connection_status_t get_connection_status() const;
50 virtual bool is_connected();
51 // from CellularInterface
52 virtual void set_plmn(const char *plmn);
53 virtual void set_sim_pin(const char *sim_pin);
54 virtual nsapi_error_t connect(const char *sim_pin, const char *apn = 0, const char *uname = 0,
55 const char *pwd = 0);
56 virtual void set_credentials(const char *apn, const char *uname = 0, const char *pwd = 0);
57
58// from CellularContext
60 virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports,
61 CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate);
62 virtual nsapi_error_t get_apn_backoff_timer(int &backoff_timer);
67#if (DEVICE_SERIAL && DEVICE_INTERRUPTIN) || defined(DOXYGEN_ONLY)
68 virtual nsapi_error_t configure_hup(PinName dcd_pin = NC, bool active_high = false);
69#endif // #if DEVICE_SERIAL
70
72
73 AT_CellularDevice *get_device() const;
74
75protected:
76 virtual void enable_hup(bool enable);
77
78 virtual void cellular_callback(nsapi_event_t ev, intptr_t ptr);
79
80 /** Does the authentication for the PDP Context if user name and password are provided.
81 * Can be overridden by the modem target if 3GPP default implementation if not an option
82 *
83 * @return NSAPI_ERROR_OK if no credentials provided or authentication was successful
84 * NSAPI_ERROR_AUTH_FAILURE if authentication failed
85 * NSAPI_ERROR_DEVICE_ERROR if communication with the modemm failed
86 */
88
89 /** Activates PDP context or in PPP mode opens data channel.
90 * Can be overridden by the modem target if 3GPP default implementation if not an option
91 */
92 virtual void do_connect();
93
94 virtual void do_disconnect();
95
96 /** Get the operation specific timeout. Used in synchronous mode when setting the maximum
97 * waiting time. Modem specific implementation can override this to provide different timeouts.
98 *
99 * @param op current operation
100 * @return timeout in milliseconds
101 */
102 virtual uint32_t get_timeout_for_operation(ContextOperation op) const;
103
104 virtual nsapi_error_t activate_non_ip_context();
105 virtual nsapi_error_t setup_control_plane_opt();
106 virtual void deactivate_non_ip_context();
107 virtual void deactivate_ip_context();
108 virtual void set_disconnect();
109 virtual void deactivate_context();
110 virtual bool get_context();
111 AT_CellularDevice::CellularProperty pdp_type_t_to_cellular_property(pdp_type_t pdp_type);
112 bool set_new_context(int cid);
113 /** Get string name for NIDD context type.
114 * @return NIDD context text, e.g. Non-IP or NONIP
115 */
116 virtual const char *get_nonip_context_type_str();
117
118private:
119#if NSAPI_PPP_AVAILABLE
120 nsapi_error_t open_data_channel();
121 void ppp_status_cb(nsapi_event_t ev, intptr_t ptr);
122 void ppp_disconnected();
123#endif // #if NSAPI_PPP_AVAILABLE
124 nsapi_error_t do_activate_context();
125 virtual void activate_context();
126 nsapi_error_t find_and_activate_context();
127 nsapi_error_t activate_ip_context();
128 void check_and_deactivate_context();
129 void delete_current_context();
130 nsapi_error_t check_operation(nsapi_error_t err, ContextOperation op);
131 void ciot_opt_cb(mbed::CellularNetwork::CIoT_Supported_Opt ciot_opt);
132 virtual void do_connect_with_retry();
133 void set_cid(int cid);
134
135private:
136 ContextOperation _current_op;
137 rtos::Semaphore _semaphore;
138 rtos::Semaphore _cp_opt_semaphore;
139
140 PinName _dcd_pin;
141 bool _active_high;
142
143protected:
144 char _found_apn[MAX_APN_LENGTH];
145 // flag indicating if CP was requested to be setup
146 bool _cp_req;
147 bool _is_connected;
148 ATHandler &_at;
149};
150
151/**
152 * @}
153 */
154
155} // namespace mbed
156
157#endif // AT_CELLULARCONTEXT_H_
Cellular PDP context class.
NetworkStack class.
Definition: NetworkStack.h:42
SocketAddress class.
Definition: SocketAddress.h:37
virtual char * get_interface_name(char *interface_name)
Get the network interface name.
virtual void attach(mbed::Callback< void(nsapi_event_t, intptr_t)> status_cb)
Register callback for status reporting.
virtual nsapi_error_t disconnect()
Stop the interface.
virtual nsapi_error_t get_ip_address(SocketAddress *address)
Get the local IP address.
virtual nsapi_error_t connect(const char *sim_pin, const char *apn=0, const char *uname=0, const char *pwd=0)
Attempt to connect to a cellular network with a PIN and credentials.
virtual void set_sim_pin(const char *sim_pin)
Set the PIN code for SIM card.
virtual uint32_t get_timeout_for_operation(ContextOperation op) const
Get the operation specific timeout.
virtual nsapi_error_t register_to_network()
Start the interface.
virtual bool is_connected()
Check if the connection is currently established.
virtual nsapi_error_t connect()
Attempt to connect to a cellular network.
virtual nsapi_error_t do_user_authentication()
Does the authentication for the PDP Context if user name and password are provided.
virtual void cellular_callback(nsapi_event_t ev, intptr_t ptr)
The CellularDevice calls the status callback function on status changes on the network or CellularDev...
virtual void set_credentials(const char *apn, const char *uname=0, const char *pwd=0)
Set the cellular network credentials.
virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports, CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate)
Get APN rate control.
virtual nsapi_connection_status_t get_connection_status() const
Get the connection status.
virtual ControlPlane_netif * get_cp_netif()
Returns the control plane AT command interface.
virtual nsapi_error_t set_blocking(bool blocking)
Set asynchronous operation of connect() and disconnect() calls.
virtual nsapi_error_t set_device_ready()
Start the interface.
virtual void set_plmn(const char *plmn)
Set the plmn.
virtual const char * get_nonip_context_type_str()
Get string name for NIDD context type.
virtual nsapi_error_t get_pdpcontext_params(pdpContextList_t &params_list)
Get the relevant information for an active nonsecondary PDP context.
virtual nsapi_error_t attach_to_network()
Start the interface.
virtual nsapi_error_t set_sim_ready()
Start the interface.
virtual nsapi_error_t configure_hup(PinName dcd_pin=NC, bool active_high=false)
Enable or disable hang-up detection.
virtual void do_connect()
Activates PDP context or in PPP mode opens data channel.
virtual nsapi_error_t get_apn_backoff_timer(int &backoff_timer)
Get backoff timer value.
Class AT_CellularDevice.
Class for sending AT commands and parsing AT responses.
Definition: ATHandler.h:68
Callback class based on template specialization.
Definition: Callback.h:53
CellularContext is CellularInterface/NetworkInterface with extensions for cellular connectivity.
Class CellularDevice.
Class CellularList.
Definition: CellularList.h:30
Implements support for data transfer using Control Plane CIoT EPS optimization specified in 3GPP 23....
The Semaphore class is used to manage and protect access to a set of shared resources.
Definition: Semaphore.h:50
signed int nsapi_error_t
Type used to represent error codes.
Definition: nsapi_types.h:142