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 "AT_CellularBase.h"
22 #include "Semaphore.h"
24 const int MAX_APN_LENGTH = 63 + 1;
26 namespace mbed {
28 class AT_CellularDevice;
31 public:
32  AT_CellularContext(ATHandler &at, CellularDevice *device, const char *apn = 0, bool cp_req = false, bool nonip_req = false);
33  virtual ~AT_CellularContext();
35 // from CellularBase/NetworkInterface
36  virtual nsapi_error_t set_blocking(bool blocking);
37  virtual NetworkStack *get_stack();
38  virtual nsapi_error_t get_ip_address(SocketAddress *address);
39  virtual const char *get_ip_address();
40  virtual char *get_interface_name(char *interface_name);
41  virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
42  virtual nsapi_error_t connect();
43  virtual nsapi_error_t disconnect();
44  virtual nsapi_connection_status_t get_connection_status() const;
45  virtual bool is_connected();
46  // from CellularBase
47  virtual void set_plmn(const char *plmn);
48  virtual void set_sim_pin(const char *sim_pin);
49  virtual nsapi_error_t connect(const char *sim_pin, const char *apn = 0, const char *uname = 0,
50  const char *pwd = 0);
51  virtual void set_credentials(const char *apn, const char *uname = 0, const char *pwd = 0);
52  virtual nsapi_error_t get_netmask(SocketAddress *address);
53  virtual const char *get_netmask();
54  virtual nsapi_error_t get_gateway(SocketAddress *address);
55  virtual const char *get_gateway();
57 // from CellularContext
59  virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports,
60  CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate);
61  virtual nsapi_error_t get_apn_backoff_timer(int &backoff_timer);
63  virtual nsapi_error_t set_sim_ready();
66  virtual void set_file_handle(FileHandle *fh);
68  virtual void set_file_handle(UARTSerial *serial, PinName dcd_pin = NC, bool active_high = false);
69 #endif // #if DEVICE_SERIAL
70  virtual void enable_hup(bool enable);
74  AT_CellularDevice *get_device() const;
75 protected:
76  virtual void cellular_callback(nsapi_event_t ev, intptr_t ptr);
78  /** Does the authentication for the PDP Context if user name and password are provided.
79  * Can be overridden by the modem target if 3GPP default implementation if not an option
80  *
81  * @return NSAPI_ERROR_OK if no credentials provided or authentication was successful
82  * NSAPI_ERROR_AUTH_FAILURE if authentication failed
83  * NSAPI_ERROR_DEVICE_ERROR if communication with the modemm failed
84  */
87  /** Activates PDP context or in PPP mode opens data channel.
88  * Can be overridden by the modem target if 3GPP default implementation if not an option
89  */
90  virtual void do_connect();
92  /** Get the operation specific timeout. Used in synchronous mode when setting the maximum
93  * waiting time. Modem specific implementation can override this to provide different timeouts.
94  *
95  * @param op current operation
96  * @return timeout in milliseconds
97  */
98  virtual uint32_t get_timeout_for_operation(ContextOperation op) const;
100  virtual nsapi_error_t activate_non_ip_context();
101  virtual nsapi_error_t setup_control_plane_opt();
102  virtual void deactivate_non_ip_context();
103  virtual void deactivate_ip_context();
104  virtual void set_disconnect();
105  virtual void deactivate_context();
106  virtual bool get_context();
107  AT_CellularBase::CellularProperty pdp_type_t_to_cellular_property(pdp_type_t pdp_type);
108  bool set_new_context(int cid);
109 private:
111  nsapi_error_t open_data_channel();
112  void ppp_status_cb(nsapi_event_t ev, intptr_t ptr);
113  void ppp_disconnected();
114 #endif // #if NSAPI_PPP_AVAILABLE
115  nsapi_error_t do_activate_context();
116  virtual void activate_context();
117  nsapi_error_t find_and_activate_context();
118  nsapi_error_t activate_ip_context();
119  void check_and_deactivate_context();
120  void delete_current_context();
121  nsapi_error_t check_operation(nsapi_error_t err, ContextOperation op);
122  void ciot_opt_cb(mbed::CellularNetwork::CIoT_Supported_Opt ciot_opt);
123  virtual void do_connect_with_retry();
124  void do_disconnect();
125  void set_cid(int cid);
126 private:
127  ContextOperation _current_op;
128  FileHandle *_fh;
129  rtos::Semaphore _semaphore;
130  rtos::Semaphore _cp_opt_semaphore;
132 protected:
133  char _found_apn[MAX_APN_LENGTH];
134  // flag indicating if CP was requested to be setup
135  bool _cp_req;
136  bool _is_connected;
137 };
139 } // namespace mbed
Implements support for data transfer using Control Plane CIoT EPS optimization specified in 3GPP 23...
virtual void set_sim_pin(const char *sim_pin)
Set the PIN code for SIM card.
NetworkStack class.
Definition: NetworkStack.h:40
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:47
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
Class FileHandle.
Definition: FileHandle.h:46
virtual nsapi_error_t get_rate_control(CellularContext::RateControlExceptionReports &reports, CellularContext::RateControlUplinkTimeUnit &time_unit, int &uplink_rate)
Get APN rate control.
Class providing buffered UART communication functionality using separate circular buffer for send and...
Definition: UARTSerial.h:51
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:35
virtual nsapi_error_t set_sim_ready()
Start the interface.
virtual nsapi_error_t connect()
Attempt to connect to a cellular network.
Class AT_CellularBase.
virtual void set_file_handle(FileHandle *fh)
Set the file handle used to communicate with the modem.
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 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_netmask(SocketAddress *address)
Get the local network mask.
virtual nsapi_error_t get_ip_address(SocketAddress *address)
Get the local IP address.
virtual void enable_hup(bool enable)
Enable or disable hang-up detection.
virtual nsapi_error_t get_gateway(SocketAddress *address)
Get the local gateway.
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:39
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:68
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.