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.
SocketAddress class.
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.
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.