Mistake on this page?
Report an issue in GitHub or email us
MeshInterfaceNanostack.h
1 /*
2  * Copyright (c) 2016 ARM Limited. All rights reserved.
3  * SPDX-License-Identifier: Apache-2.0
4  * Licensed under the Apache License, Version 2.0 (the License); you may
5  * not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef MESHINTERFACENANOSTACK_H
18 #define MESHINTERFACENANOSTACK_H
19 
20 #include "MeshInterface.h"
21 #include "NanostackRfPhy.h"
22 #include "Nanostack.h"
23 #include "mesh_interface_types.h"
24 
25 class Nanostack::Interface : public OnboardNetworkStack::Interface, private mbed::NonCopyable<Nanostack::Interface> {
26 public:
27  virtual char *get_ip_address(char *buf, nsapi_size_t buflen);
28  virtual char *get_mac_address(char *buf, nsapi_size_t buflen);
29  virtual char *get_netmask(char *buf, nsapi_size_t buflen);
30  virtual char *get_gateway(char *buf, nsapi_size_t buflen);
31  virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
32  virtual nsapi_connection_status_t get_connection_status() const;
33 
34  void get_mac_address(uint8_t *buf) const
35  {
36  interface_phy.get_mac_address(buf);
37  }
38 
39  /**
40  * \brief Callback from C-layer
41  * \param status state of the network
42  * */
43  void network_handler(mesh_connection_status_t status);
44 
45  int8_t get_interface_id() const
46  {
47  return interface_id;
48  }
49  int8_t get_driver_id() const
50  {
51  return _device_id;
52  }
53 
54 private:
55  NanostackPhy &interface_phy;
56 protected:
57  Interface(NanostackPhy &phy);
58  virtual nsapi_error_t register_phy();
59  NanostackPhy &get_phy() const
60  {
61  return interface_phy;
62  }
63  int8_t interface_id;
64  int8_t _device_id;
65  rtos::Semaphore connect_semaphore;
66  rtos::Semaphore disconnect_semaphore;
67 
69  nsapi_connection_status_t _connect_status;
70  nsapi_connection_status_t _previous_connection_status;
71  bool _blocking;
72 };
73 
75 protected:
76  MeshInterface(NanostackRfPhy &phy) : Interface(phy) { }
77  NanostackRfPhy &get_phy() const
78  {
79  return static_cast<NanostackRfPhy &>(Interface::get_phy());
80  }
81 };
82 
83 
84 class InterfaceNanostack : public virtual NetworkInterface {
85 public:
86  /** Start the interface
87  *
88  * @return 0 on success, negative error code on failure
89  */
90  virtual nsapi_error_t connect();
91 
92  /** Stop the interface
93  *
94  * @return 0 on success, negative error code on failure
95  */
96  virtual nsapi_error_t disconnect();
97 
98  /** Get the internally stored IP address
99  /return IP address of the interface or null if not yet connected
100  */
101  virtual const char *get_ip_address();
102 
103  /** Get the internally stored MAC address
104  /return MAC address of the interface
105  */
106  virtual const char *get_mac_address();
107 
108  /** Register callback for status reporting
109  *
110  * The specified status callback function will be called on status changes
111  * on the network. The parameters on the callback are the event type and
112  * event-type dependent reason parameter.
113  *
114  * @param status_cb The callback for status changes
115  */
116  virtual void attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb);
117 
118  /** Get the connection status
119  *
120  * @return The connection status according to ConnectionStatusType
121  */
122  virtual nsapi_connection_status_t get_connection_status() const;
123 
124  /** Set blocking status of connect() which by default should be blocking
125  *
126  * @param blocking true if connect is blocking
127  * @return 0 on success, negative error code on failure
128  */
129  virtual nsapi_error_t set_blocking(bool blocking);
130 
131  /** Get the interface ID
132  /return Interface identifier
133  */
134  int8_t get_interface_id() const
135  {
136  return _interface->get_interface_id();
137  }
138 
139 protected:
141  virtual Nanostack *get_stack(void);
142  Nanostack::Interface *get_interface() const
143  {
144  return _interface;
145  }
146  virtual nsapi_error_t do_initialize() = 0;
147 
148  Nanostack::Interface *_interface;
149 
150  char ip_addr_str[40];
151  char mac_addr_str[24];
152  mbed::Callback<void(nsapi_event_t, intptr_t)> _connection_status_cb;
153  bool _blocking;
154 };
155 
156 class MeshInterfaceNanostack : public InterfaceNanostack, public MeshInterface, private mbed::NonCopyable<MeshInterfaceNanostack> {
157 public:
158 
159  /** Attach phy and initialize the mesh
160  *
161  * Initializes a mesh interface on the given phy. Not needed if
162  * the phy is passed to the mesh's constructor.
163  *
164  * @return 0 on success, negative on failure
165  */
166  nsapi_error_t initialize(NanostackRfPhy *phy);
167 
168 protected:
169  MeshInterfaceNanostack() : _phy(NULL) { }
170  MeshInterfaceNanostack(NanostackRfPhy *phy) : _phy(phy) { }
171  Nanostack::MeshInterface *get_interface() const
172  {
173  return static_cast<Nanostack::MeshInterface *>(_interface);
174  }
175  NanostackRfPhy *_phy;
176 };
177 
178 #endif /* MESHINTERFACENANOSTACK_H */
Radio PHY driver class for Nanostack.
The Semaphore class is used to manage and protect access to a set of shared resources.
Definition: Semaphore.h:45
Representation of a stack&#39;s view of an interface.
signed int nsapi_error_t
Type used to represent error codes.
Definition: nsapi_types.h:95
virtual void attach(mbed::Callback< void(nsapi_event_t, intptr_t)> status_cb)
Register callback for status reporting.
Common interface that is shared between mesh hardware.
Definition: MeshInterface.h:29
Prevents generation of copy constructor and copy assignment operator in derived classes.
Definition: NonCopyable.h:168
virtual char * get_ip_address(char *buf, nsapi_size_t buflen)
Copies IP address of the network interface to user supplied buffer.
virtual char * get_mac_address(char *buf, nsapi_size_t buflen)
Return MAC address of the network interface.
Common interface that is shared between network devices.
virtual char * get_netmask(char *buf, nsapi_size_t buflen)
Copies netmask of the network interface to user supplied buffer.
PHY driver class for Nanostack.
Definition: NanostackPhy.h:22
virtual char * get_gateway(char *buf, nsapi_size_t buflen)
Copies gateway address of the network interface to user supplied buffer.
unsigned int nsapi_size_t
Type used to represent the size of data passed through sockets.
Definition: nsapi_types.h:99
void network_handler(mesh_connection_status_t status)
Callback from C-layer.
Callback class based on template specialization.
Definition: Callback.h:39
virtual nsapi_connection_status_t get_connection_status() const
Get the connection status.
virtual void get_mac_address(uint8_t *mac)=0
Read the mac address of this physical interface.
int8_t get_interface_id() const
Get the interface ID /return Interface identifier.
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.