Mistake on this page?
Report an issue in GitHub or email us
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  */
20 #include "CellularContext.h"
21 #include "ATHandler.h"
22 #include "rtos/Semaphore.h"
23 #include "AT_CellularDevice.h"
25 const int MAX_APN_LENGTH = 63 + 1;
27 namespace mbed {
30 public:
31  AT_CellularContext(ATHandler &at, CellularDevice *device, const char *apn = 0, bool cp_req = false, bool nonip_req = false);
32  virtual ~AT_CellularContext();
34 // from CellularInterface/NetworkInterface
35  virtual nsapi_error_t set_blocking(bool blocking);
36  virtual NetworkStack *get_stack();
37  virtual nsapi_error_t get_ip_address(SocketAddress *address);
38  virtual char *get_interface_name(char *interface_name);
39  virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
40  virtual nsapi_error_t connect();
41  virtual nsapi_error_t disconnect();
42  virtual nsapi_connection_status_t get_connection_status() const;
43  virtual bool is_connected();
44  // from CellularInterface
45  virtual void set_plmn(const char *plmn);
46  virtual void set_sim_pin(const char *sim_pin);
47  virtual nsapi_error_t connect(const char *sim_pin, const char *apn = 0, const char *uname = 0,
48  const char *pwd = 0);
49  virtual void set_credentials(const char *apn, const char *uname = 0, const char *pwd = 0);
51 // from CellularContext
53  virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports,
54  CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate);
55  virtual nsapi_error_t get_apn_backoff_timer(int &backoff_timer);
57  virtual nsapi_error_t set_sim_ready();
61  virtual nsapi_error_t configure_hup(PinName dcd_pin = NC, bool active_high = false);
62 #endif // #if DEVICE_SERIAL
66  AT_CellularDevice *get_device() const;
68 protected:
69  virtual void enable_hup(bool enable);
71  virtual void cellular_callback(nsapi_event_t ev, intptr_t ptr);
73  /** Does the authentication for the PDP Context if user name and password are provided.
74  * Can be overridden by the modem target if 3GPP default implementation if not an option
75  *
76  * @return NSAPI_ERROR_OK if no credentials provided or authentication was successful
77  * NSAPI_ERROR_AUTH_FAILURE if authentication failed
78  * NSAPI_ERROR_DEVICE_ERROR if communication with the modemm failed
79  */
82  /** Activates PDP context or in PPP mode opens data channel.
83  * Can be overridden by the modem target if 3GPP default implementation if not an option
84  */
85  virtual void do_connect();
87  virtual void do_disconnect();
89  /** Get the operation specific timeout. Used in synchronous mode when setting the maximum
90  * waiting time. Modem specific implementation can override this to provide different timeouts.
91  *
92  * @param op current operation
93  * @return timeout in milliseconds
94  */
95  virtual uint32_t get_timeout_for_operation(ContextOperation op) const;
97  virtual nsapi_error_t activate_non_ip_context();
98  virtual nsapi_error_t setup_control_plane_opt();
99  virtual void deactivate_non_ip_context();
100  virtual void deactivate_ip_context();
101  virtual void set_disconnect();
102  virtual void deactivate_context();
103  virtual bool get_context();
104  AT_CellularDevice::CellularProperty pdp_type_t_to_cellular_property(pdp_type_t pdp_type);
105  bool set_new_context(int cid);
106  /** Get string name for NIDD context type.
107  * @return NIDD context text, e.g. Non-IP or NONIP
108  */
109  virtual const char *get_nonip_context_type_str();
111 private:
113  nsapi_error_t open_data_channel();
114  void ppp_status_cb(nsapi_event_t ev, intptr_t ptr);
115  void ppp_disconnected();
116 #endif // #if NSAPI_PPP_AVAILABLE
117  nsapi_error_t do_activate_context();
118  virtual void activate_context();
119  nsapi_error_t find_and_activate_context();
120  nsapi_error_t activate_ip_context();
121  void check_and_deactivate_context();
122  void delete_current_context();
123  nsapi_error_t check_operation(nsapi_error_t err, ContextOperation op);
124  void ciot_opt_cb(mbed::CellularNetwork::CIoT_Supported_Opt ciot_opt);
125  virtual void do_connect_with_retry();
126  void set_cid(int cid);
128 private:
129  ContextOperation _current_op;
130  rtos::Semaphore _semaphore;
131  rtos::Semaphore _cp_opt_semaphore;
133  PinName _dcd_pin;
134  bool _active_high;
136 protected:
137  char _found_apn[MAX_APN_LENGTH];
138  // flag indicating if CP was requested to be setup
139  bool _cp_req;
140  bool _is_connected;
141  ATHandler &_at;
142 };
144 } // namespace mbed
Implements support for data transfer using Control Plane CIoT EPS optimization specified in 3GPP 23...
virtual nsapi_error_t configure_hup(PinName dcd_pin=NC, bool active_high=false)
Enable or disable hang-up detection.
virtual void set_sim_pin(const char *sim_pin)
Set the PIN code for SIM card.
NetworkStack class.
Definition: NetworkStack.h:41
virtual char * get_interface_name(char *interface_name)
Get the network interface name.
The Semaphore class is used to manage and protect access to a set of shared resources.
Definition: Semaphore.h:50
Class CellularList.
Definition: CellularList.h:30
virtual ControlPlane_netif * get_cp_netif()
Returns the control plane AT command interface.
virtual nsapi_error_t register_to_network()
Start the interface.
CellularContext is CellularInterface/NetworkInterface with extensions for cellular connectivity...
Class CellularDevice.
signed int nsapi_error_t
Type used to represent error codes.
Definition: nsapi_types.h:95
virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports, CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate)
Get APN rate control.
virtual void do_connect()
Activates PDP context or in PPP mode opens data channel.
virtual nsapi_error_t attach_to_network()
Start the interface.
virtual nsapi_error_t disconnect()
Stop the interface.
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 attach(mbed::Callback< void(nsapi_event_t, intptr_t)> status_cb)
Register callback for status reporting.
virtual void set_plmn(const char *plmn)
Set the plmn.
virtual nsapi_error_t get_apn_backoff_timer(int &backoff_timer)
Get backoff timer value.
Cellular PDP context class.
SocketAddress class.
Definition: SocketAddress.h:36
virtual nsapi_error_t set_sim_ready()
Start the interface.
virtual nsapi_error_t connect()
Attempt to connect to a cellular network.
virtual uint32_t get_timeout_for_operation(ContextOperation op) const
Get the operation specific timeout.
Class AT_CellularDevice.
virtual nsapi_error_t set_blocking(bool blocking)
Set asynchronous operation of connect() and disconnect() calls.
virtual nsapi_error_t do_user_authentication()
Does the authentication for the PDP Context if user name and password are provided.
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 get_ip_address(SocketAddress *address)
Get the local IP address.
virtual nsapi_error_t set_device_ready()
Start the interface.
virtual bool is_connected()
Check if the connection is currently established.
Callback class based on template specialization.
Definition: Callback.h:53
Definition: ATHandler.h:46
virtual void set_credentials(const char *apn, const char *uname=0, const char *pwd=0)
Set the cellular network credentials.
Class for sending AT commands and parsing AT responses.
Definition: ATHandler.h:70
virtual nsapi_connection_status_t get_connection_status() const
Get the connection status.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.