sandbox / mbed-client

Fork of mbed-client by Christopher Haster

Committer:
Christopher Haster
Date:
Fri Jan 22 14:57:00 2016 -0600
Revision:
1:79b6cc67d8b4
Child:
4:ae5178938864
Initial move of mbed-client to mercurial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 1:79b6cc67d8b4 1 /*
Christopher Haster 1:79b6cc67d8b4 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
Christopher Haster 1:79b6cc67d8b4 3 * SPDX-License-Identifier: Apache-2.0
Christopher Haster 1:79b6cc67d8b4 4 * Licensed under the Apache License, Version 2.0 (the License); you may
Christopher Haster 1:79b6cc67d8b4 5 * not use this file except in compliance with the License.
Christopher Haster 1:79b6cc67d8b4 6 * You may obtain a copy of the License at
Christopher Haster 1:79b6cc67d8b4 7 *
Christopher Haster 1:79b6cc67d8b4 8 * http://www.apache.org/licenses/LICENSE-2.0
Christopher Haster 1:79b6cc67d8b4 9 *
Christopher Haster 1:79b6cc67d8b4 10 * Unless required by applicable law or agreed to in writing, software
Christopher Haster 1:79b6cc67d8b4 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
Christopher Haster 1:79b6cc67d8b4 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Christopher Haster 1:79b6cc67d8b4 13 * See the License for the specific language governing permissions and
Christopher Haster 1:79b6cc67d8b4 14 * limitations under the License.
Christopher Haster 1:79b6cc67d8b4 15 */
Christopher Haster 1:79b6cc67d8b4 16 #ifndef M2MNSDLINTERFACE_H
Christopher Haster 1:79b6cc67d8b4 17 #define M2MNSDLINTERFACE_H
Christopher Haster 1:79b6cc67d8b4 18
Christopher Haster 1:79b6cc67d8b4 19 #include "mbed-client/m2mvector.h"
Christopher Haster 1:79b6cc67d8b4 20 #include "mbed-client/m2mconfig.h"
Christopher Haster 1:79b6cc67d8b4 21 #include "mbed-client/m2minterface.h"
Christopher Haster 1:79b6cc67d8b4 22 #include "mbed-client/m2mtimerobserver.h"
Christopher Haster 1:79b6cc67d8b4 23 #include "mbed-client/m2mobservationhandler.h"
Christopher Haster 1:79b6cc67d8b4 24 #include "include/nsdllinker.h"
Christopher Haster 1:79b6cc67d8b4 25
Christopher Haster 1:79b6cc67d8b4 26 //FORWARD DECLARARTION
Christopher Haster 1:79b6cc67d8b4 27 class M2MSecurity;
Christopher Haster 1:79b6cc67d8b4 28 class M2MObject;
Christopher Haster 1:79b6cc67d8b4 29 class M2MObjectInstance;
Christopher Haster 1:79b6cc67d8b4 30 class M2MResource;
Christopher Haster 1:79b6cc67d8b4 31 class M2MResourceInstance;
Christopher Haster 1:79b6cc67d8b4 32 class M2MNsdlObserver;
Christopher Haster 1:79b6cc67d8b4 33 class M2MBase;
Christopher Haster 1:79b6cc67d8b4 34 class M2MServer;
Christopher Haster 1:79b6cc67d8b4 35 class M2MTimer;
Christopher Haster 1:79b6cc67d8b4 36
Christopher Haster 1:79b6cc67d8b4 37 typedef Vector<M2MObject *> M2MObjectList;
Christopher Haster 1:79b6cc67d8b4 38
Christopher Haster 1:79b6cc67d8b4 39 /**
Christopher Haster 1:79b6cc67d8b4 40 * @brief M2MNsdlInterface
Christopher Haster 1:79b6cc67d8b4 41 * Class which interacts between mbed Client C++ Library and mbed-client-c library.
Christopher Haster 1:79b6cc67d8b4 42 */
Christopher Haster 1:79b6cc67d8b4 43 class M2MNsdlInterface : public M2MTimerObserver,
Christopher Haster 1:79b6cc67d8b4 44 public M2MObservationHandler
Christopher Haster 1:79b6cc67d8b4 45 {
Christopher Haster 1:79b6cc67d8b4 46 private:
Christopher Haster 1:79b6cc67d8b4 47 // Prevents the use of assignment operator by accident.
Christopher Haster 1:79b6cc67d8b4 48 M2MNsdlInterface& operator=( const M2MNsdlInterface& /*other*/ );
Christopher Haster 1:79b6cc67d8b4 49
Christopher Haster 1:79b6cc67d8b4 50 // Prevents the use of copy constructor by accident
Christopher Haster 1:79b6cc67d8b4 51 M2MNsdlInterface( const M2MNsdlInterface& /*other*/ );
Christopher Haster 1:79b6cc67d8b4 52
Christopher Haster 1:79b6cc67d8b4 53 public:
Christopher Haster 1:79b6cc67d8b4 54 /**
Christopher Haster 1:79b6cc67d8b4 55 * @brief Constructor
Christopher Haster 1:79b6cc67d8b4 56 * @param observer, Observer to pass the event callbacks from nsdl library.
Christopher Haster 1:79b6cc67d8b4 57 */
Christopher Haster 1:79b6cc67d8b4 58 M2MNsdlInterface(M2MNsdlObserver &observer);
Christopher Haster 1:79b6cc67d8b4 59
Christopher Haster 1:79b6cc67d8b4 60 /**
Christopher Haster 1:79b6cc67d8b4 61 * @brief Destructor
Christopher Haster 1:79b6cc67d8b4 62 */
Christopher Haster 1:79b6cc67d8b4 63 virtual ~M2MNsdlInterface();
Christopher Haster 1:79b6cc67d8b4 64
Christopher Haster 1:79b6cc67d8b4 65 /**
Christopher Haster 1:79b6cc67d8b4 66 * @brief Creates endpoint object for the nsdl stack.
Christopher Haster 1:79b6cc67d8b4 67 * @param endpoint_name, Endpoint name of the client.
Christopher Haster 1:79b6cc67d8b4 68 * @param endpoint_type, Endpoint type of the client.
Christopher Haster 1:79b6cc67d8b4 69 * @param life_time, Life time of the client in seconds
Christopher Haster 1:79b6cc67d8b4 70 * @param domain, Domain of the client.
Christopher Haster 1:79b6cc67d8b4 71 * @param mode, Binding mode of the client, default is UDP
Christopher Haster 1:79b6cc67d8b4 72 * @param context_address, Context address default is empty.
Christopher Haster 1:79b6cc67d8b4 73 */
Christopher Haster 1:79b6cc67d8b4 74 void create_endpoint(const String &endpoint_name,
Christopher Haster 1:79b6cc67d8b4 75 const String &endpoint_type,
Christopher Haster 1:79b6cc67d8b4 76 const int32_t life_time,
Christopher Haster 1:79b6cc67d8b4 77 const String &domain,
Christopher Haster 1:79b6cc67d8b4 78 const uint8_t mode,
Christopher Haster 1:79b6cc67d8b4 79 const String &context_address);
Christopher Haster 1:79b6cc67d8b4 80
Christopher Haster 1:79b6cc67d8b4 81 /**
Christopher Haster 1:79b6cc67d8b4 82 * @brief Deletes the endpoint.
Christopher Haster 1:79b6cc67d8b4 83 */
Christopher Haster 1:79b6cc67d8b4 84 void delete_endpoint();
Christopher Haster 1:79b6cc67d8b4 85
Christopher Haster 1:79b6cc67d8b4 86 /**
Christopher Haster 1:79b6cc67d8b4 87 * @brief Creates the NSDL structure for the registered objectlist.
Christopher Haster 1:79b6cc67d8b4 88 * @param object_list, List of objects to be registered.
Christopher Haster 1:79b6cc67d8b4 89 * @return true if structure created successfully else false.
Christopher Haster 1:79b6cc67d8b4 90 */
Christopher Haster 1:79b6cc67d8b4 91 bool create_nsdl_list_structure(const M2MObjectList &object_list);
Christopher Haster 1:79b6cc67d8b4 92
Christopher Haster 1:79b6cc67d8b4 93 /**
Christopher Haster 1:79b6cc67d8b4 94 * @brief Removed the NSDL resource for the given resource.
Christopher Haster 1:79b6cc67d8b4 95 * @param resource_name, Resource name to be removed.
Christopher Haster 1:79b6cc67d8b4 96 * @return true if removed successfully else false.
Christopher Haster 1:79b6cc67d8b4 97 */
Christopher Haster 1:79b6cc67d8b4 98 bool delete_nsdl_resource(const String &resource_name);
Christopher Haster 1:79b6cc67d8b4 99
Christopher Haster 1:79b6cc67d8b4 100 /**
Christopher Haster 1:79b6cc67d8b4 101 * @brief Creates the bootstrap object.
Christopher Haster 1:79b6cc67d8b4 102 * @param address Bootstrap address.
Christopher Haster 1:79b6cc67d8b4 103 * @return true if created and sent successfully else false.
Christopher Haster 1:79b6cc67d8b4 104 */
Christopher Haster 1:79b6cc67d8b4 105 bool create_bootstrap_resource(sn_nsdl_addr_s *address);
Christopher Haster 1:79b6cc67d8b4 106
Christopher Haster 1:79b6cc67d8b4 107 /**
Christopher Haster 1:79b6cc67d8b4 108 * @brief Sends the register message to the server.
Christopher Haster 1:79b6cc67d8b4 109 * @param address M2MServer address.
Christopher Haster 1:79b6cc67d8b4 110 * @param port M2MServer port.
Christopher Haster 1:79b6cc67d8b4 111 * @param address_type IP Address type.
Christopher Haster 1:79b6cc67d8b4 112 * @return true if register sent successfully else false.
Christopher Haster 1:79b6cc67d8b4 113 */
Christopher Haster 1:79b6cc67d8b4 114 bool send_register_message(uint8_t* address,
Christopher Haster 1:79b6cc67d8b4 115 const uint16_t port,
Christopher Haster 1:79b6cc67d8b4 116 sn_nsdl_addr_type_e address_type);
Christopher Haster 1:79b6cc67d8b4 117
Christopher Haster 1:79b6cc67d8b4 118 /**
Christopher Haster 1:79b6cc67d8b4 119 * @brief Sends the update registration message to the server.
Christopher Haster 1:79b6cc67d8b4 120 * @param lifetime, Updated lifetime value in seconds.
Christopher Haster 1:79b6cc67d8b4 121 * @return true if sent successfully else false.
Christopher Haster 1:79b6cc67d8b4 122 *
Christopher Haster 1:79b6cc67d8b4 123 */
Christopher Haster 1:79b6cc67d8b4 124 bool send_update_registration(const uint32_t lifetime = 0);
Christopher Haster 1:79b6cc67d8b4 125
Christopher Haster 1:79b6cc67d8b4 126 /**
Christopher Haster 1:79b6cc67d8b4 127 * @brief Sends unregister message to the server.
Christopher Haster 1:79b6cc67d8b4 128 * @return true if unregister sent successfully else false.
Christopher Haster 1:79b6cc67d8b4 129 */
Christopher Haster 1:79b6cc67d8b4 130 bool send_unregister_message();
Christopher Haster 1:79b6cc67d8b4 131
Christopher Haster 1:79b6cc67d8b4 132 /**
Christopher Haster 1:79b6cc67d8b4 133 * @brief Memory Allocation required for libCoap.
Christopher Haster 1:79b6cc67d8b4 134 * @param size, Size of memory to be reserved.
Christopher Haster 1:79b6cc67d8b4 135 */
Christopher Haster 1:79b6cc67d8b4 136 void* memory_alloc(uint16_t size);
Christopher Haster 1:79b6cc67d8b4 137
Christopher Haster 1:79b6cc67d8b4 138 /**
Christopher Haster 1:79b6cc67d8b4 139 * @brief Memory free functions required for libCoap
Christopher Haster 1:79b6cc67d8b4 140 * @param ptr, Object whose memory needs to be freed.
Christopher Haster 1:79b6cc67d8b4 141 */
Christopher Haster 1:79b6cc67d8b4 142 void memory_free(void *ptr);
Christopher Haster 1:79b6cc67d8b4 143
Christopher Haster 1:79b6cc67d8b4 144 /**
Christopher Haster 1:79b6cc67d8b4 145 * @brief Callback from nsdl library to inform the data is ready
Christopher Haster 1:79b6cc67d8b4 146 * to be sent to server.
Christopher Haster 1:79b6cc67d8b4 147 * @param nsdl_handle, Handler for the nsdl structure for this endpoint
Christopher Haster 1:79b6cc67d8b4 148 * @param protocol, Protocol format of the data
Christopher Haster 1:79b6cc67d8b4 149 * @param data, Data to be sent.
Christopher Haster 1:79b6cc67d8b4 150 * @param data_len, Size of the data to be sent
Christopher Haster 1:79b6cc67d8b4 151 * @param address, server address where data has to be sent.
Christopher Haster 1:79b6cc67d8b4 152 * @return 1 if successful else 0.
Christopher Haster 1:79b6cc67d8b4 153 */
Christopher Haster 1:79b6cc67d8b4 154 uint8_t send_to_server_callback(struct nsdl_s * nsdl_handle,
Christopher Haster 1:79b6cc67d8b4 155 sn_nsdl_capab_e protocol,
Christopher Haster 1:79b6cc67d8b4 156 uint8_t *data,
Christopher Haster 1:79b6cc67d8b4 157 uint16_t data_len,
Christopher Haster 1:79b6cc67d8b4 158 sn_nsdl_addr_s *address);
Christopher Haster 1:79b6cc67d8b4 159
Christopher Haster 1:79b6cc67d8b4 160 /**
Christopher Haster 1:79b6cc67d8b4 161 * @brief Callback from nsdl library to inform the data which is
Christopher Haster 1:79b6cc67d8b4 162 * received from server for the client has been converted to coap message.
Christopher Haster 1:79b6cc67d8b4 163 * @param nsdl_handle, Handler for the nsdl structure for this endpoint
Christopher Haster 1:79b6cc67d8b4 164 * @param coap_header, Coap message formed from data.
Christopher Haster 1:79b6cc67d8b4 165 * @param address, Server address from where the data is received.
Christopher Haster 1:79b6cc67d8b4 166 * @return 1 if successful else 0.
Christopher Haster 1:79b6cc67d8b4 167 */
Christopher Haster 1:79b6cc67d8b4 168 uint8_t received_from_server_callback(struct nsdl_s * nsdl_handle,
Christopher Haster 1:79b6cc67d8b4 169 sn_coap_hdr_s *coap_header,
Christopher Haster 1:79b6cc67d8b4 170 sn_nsdl_addr_s *address);
Christopher Haster 1:79b6cc67d8b4 171
Christopher Haster 1:79b6cc67d8b4 172 /**
Christopher Haster 1:79b6cc67d8b4 173 * @brief Callback from nsdl library to inform the data which is
Christopher Haster 1:79b6cc67d8b4 174 * received from server for the resources has been converted to coap message.
Christopher Haster 1:79b6cc67d8b4 175 * @param nsdl_handle, Handler for the nsdl resource structure for this endpoint..
Christopher Haster 1:79b6cc67d8b4 176 * @param coap_header, Coap message formed from data.
Christopher Haster 1:79b6cc67d8b4 177 * @param address, Server address from where the data is received.
Christopher Haster 1:79b6cc67d8b4 178 * @param nsdl_capab, Protocol for the message, currently only coap is supported.
Christopher Haster 1:79b6cc67d8b4 179 * @return 1 if successful else 0.
Christopher Haster 1:79b6cc67d8b4 180 */
Christopher Haster 1:79b6cc67d8b4 181 uint8_t resource_callback(struct nsdl_s *nsdl_handle, sn_coap_hdr_s *coap,
Christopher Haster 1:79b6cc67d8b4 182 sn_nsdl_addr_s *address,
Christopher Haster 1:79b6cc67d8b4 183 sn_nsdl_capab_e nsdl_capab);
Christopher Haster 1:79b6cc67d8b4 184
Christopher Haster 1:79b6cc67d8b4 185 /**
Christopher Haster 1:79b6cc67d8b4 186 * @brief Callback when the bootstrap information is received from bootstrap server.
Christopher Haster 1:79b6cc67d8b4 187 * @param server_info, Server information received from bootstrap server.
Christopher Haster 1:79b6cc67d8b4 188 */
Christopher Haster 1:79b6cc67d8b4 189 void bootstrap_done_callback(sn_nsdl_oma_server_info_t *server_info);
Christopher Haster 1:79b6cc67d8b4 190
Christopher Haster 1:79b6cc67d8b4 191 /**
Christopher Haster 1:79b6cc67d8b4 192 * @brief Callback when there is data received from server and needs to be processed.
Christopher Haster 1:79b6cc67d8b4 193 * @param data, data received from server.
Christopher Haster 1:79b6cc67d8b4 194 * @param data_size, data size received from server.
Christopher Haster 1:79b6cc67d8b4 195 * @param addres, address structure of the server.
Christopher Haster 1:79b6cc67d8b4 196 * @return true if successfully processed else false.
Christopher Haster 1:79b6cc67d8b4 197 */
Christopher Haster 1:79b6cc67d8b4 198 bool process_received_data(uint8_t *data,
Christopher Haster 1:79b6cc67d8b4 199 uint16_t data_size,
Christopher Haster 1:79b6cc67d8b4 200 sn_nsdl_addr_s *address);
Christopher Haster 1:79b6cc67d8b4 201
Christopher Haster 1:79b6cc67d8b4 202 /**
Christopher Haster 1:79b6cc67d8b4 203 * @brief Stops all the timers in case there is any errors.
Christopher Haster 1:79b6cc67d8b4 204 */
Christopher Haster 1:79b6cc67d8b4 205 void stop_timers();
Christopher Haster 1:79b6cc67d8b4 206
Christopher Haster 1:79b6cc67d8b4 207 protected: // from M2MTimerObserver
Christopher Haster 1:79b6cc67d8b4 208
Christopher Haster 1:79b6cc67d8b4 209 virtual void timer_expired(M2MTimerObserver::Type type);
Christopher Haster 1:79b6cc67d8b4 210
Christopher Haster 1:79b6cc67d8b4 211 protected: // from M2MObservationHandler
Christopher Haster 1:79b6cc67d8b4 212
Christopher Haster 1:79b6cc67d8b4 213 virtual void observation_to_be_sent(M2MBase *object);
Christopher Haster 1:79b6cc67d8b4 214
Christopher Haster 1:79b6cc67d8b4 215 virtual void resource_to_be_deleted(const String &resource_name);
Christopher Haster 1:79b6cc67d8b4 216
Christopher Haster 1:79b6cc67d8b4 217 virtual void value_updated(M2MBase *base, const String &object_name);
Christopher Haster 1:79b6cc67d8b4 218
Christopher Haster 1:79b6cc67d8b4 219 virtual void remove_object(M2MBase *object);
Christopher Haster 1:79b6cc67d8b4 220
Christopher Haster 1:79b6cc67d8b4 221 private:
Christopher Haster 1:79b6cc67d8b4 222
Christopher Haster 1:79b6cc67d8b4 223 /**
Christopher Haster 1:79b6cc67d8b4 224 * @brief Initializes all the nsdl library component to be usable.
Christopher Haster 1:79b6cc67d8b4 225 * @return true if initialization is successful else false.
Christopher Haster 1:79b6cc67d8b4 226 */
Christopher Haster 1:79b6cc67d8b4 227 bool initialize();
Christopher Haster 1:79b6cc67d8b4 228
Christopher Haster 1:79b6cc67d8b4 229 bool add_object_to_list(M2MObject *object);
Christopher Haster 1:79b6cc67d8b4 230
Christopher Haster 1:79b6cc67d8b4 231 bool create_nsdl_object_structure(M2MObject *object);
Christopher Haster 1:79b6cc67d8b4 232
Christopher Haster 1:79b6cc67d8b4 233 bool create_nsdl_object_instance_structure(M2MObjectInstance *object_instance);
Christopher Haster 1:79b6cc67d8b4 234
Christopher Haster 1:79b6cc67d8b4 235 bool create_nsdl_resource_structure(M2MResource *resource,
Christopher Haster 1:79b6cc67d8b4 236 const String &object_name = "",
Christopher Haster 1:79b6cc67d8b4 237 bool multiple_instances = false);
Christopher Haster 1:79b6cc67d8b4 238
Christopher Haster 1:79b6cc67d8b4 239 bool create_nsdl_resource(M2MBase *base, const String &name = "");
Christopher Haster 1:79b6cc67d8b4 240
Christopher Haster 1:79b6cc67d8b4 241 String coap_to_string(uint8_t *coap_data_ptr,
Christopher Haster 1:79b6cc67d8b4 242 int coap_data_ptr_length);
Christopher Haster 1:79b6cc67d8b4 243
Christopher Haster 1:79b6cc67d8b4 244 void execute_nsdl_process_loop();
Christopher Haster 1:79b6cc67d8b4 245
Christopher Haster 1:79b6cc67d8b4 246 uint64_t registration_time();
Christopher Haster 1:79b6cc67d8b4 247
Christopher Haster 1:79b6cc67d8b4 248 M2MBase* find_resource(const String &object);
Christopher Haster 1:79b6cc67d8b4 249
Christopher Haster 1:79b6cc67d8b4 250 M2MBase* find_resource(const M2MObject *object,
Christopher Haster 1:79b6cc67d8b4 251 const String &object_instance);
Christopher Haster 1:79b6cc67d8b4 252
Christopher Haster 1:79b6cc67d8b4 253 M2MBase* find_resource(const M2MObjectInstance *object_instance,
Christopher Haster 1:79b6cc67d8b4 254 const String &resource_instance);
Christopher Haster 1:79b6cc67d8b4 255
Christopher Haster 1:79b6cc67d8b4 256 M2MBase* find_resource(const M2MResource *resource,
Christopher Haster 1:79b6cc67d8b4 257 const String &object_name,
Christopher Haster 1:79b6cc67d8b4 258 const String &resource_instance);
Christopher Haster 1:79b6cc67d8b4 259
Christopher Haster 1:79b6cc67d8b4 260 bool object_present(M2MObject * object) const;
Christopher Haster 1:79b6cc67d8b4 261
Christopher Haster 1:79b6cc67d8b4 262 void clear_resource(sn_nsdl_resource_info_s *&resource);
Christopher Haster 1:79b6cc67d8b4 263
Christopher Haster 1:79b6cc67d8b4 264 M2MInterface::Error interface_error(sn_coap_hdr_s *coap_header);
Christopher Haster 1:79b6cc67d8b4 265
Christopher Haster 1:79b6cc67d8b4 266 void send_object_observation(M2MObject *object);
Christopher Haster 1:79b6cc67d8b4 267
Christopher Haster 1:79b6cc67d8b4 268 void send_object_instance_observation(M2MObjectInstance *object_instance);
Christopher Haster 1:79b6cc67d8b4 269
Christopher Haster 1:79b6cc67d8b4 270 void send_resource_observation(M2MResource *resource);
Christopher Haster 1:79b6cc67d8b4 271
Christopher Haster 1:79b6cc67d8b4 272 private:
Christopher Haster 1:79b6cc67d8b4 273
Christopher Haster 1:79b6cc67d8b4 274 M2MNsdlObserver &_observer;
Christopher Haster 1:79b6cc67d8b4 275 M2MObjectList _object_list;
Christopher Haster 1:79b6cc67d8b4 276 M2MServer *_server;
Christopher Haster 1:79b6cc67d8b4 277 M2MTimer *_nsdl_exceution_timer;
Christopher Haster 1:79b6cc67d8b4 278 M2MTimer *_registration_timer;
Christopher Haster 1:79b6cc67d8b4 279 sn_nsdl_ep_parameters_s *_endpoint;
Christopher Haster 1:79b6cc67d8b4 280 sn_nsdl_resource_info_s *_resource;
Christopher Haster 1:79b6cc67d8b4 281 sn_nsdl_bs_ep_info_t _bootstrap_endpoint;
Christopher Haster 1:79b6cc67d8b4 282 sn_nsdl_oma_device_t _bootstrap_device_setup;
Christopher Haster 1:79b6cc67d8b4 283 sn_nsdl_addr_s _sn_nsdl_address;
Christopher Haster 1:79b6cc67d8b4 284 nsdl_s *_nsdl_handle;
Christopher Haster 1:79b6cc67d8b4 285 uint32_t _counter_for_nsdl;
Christopher Haster 1:79b6cc67d8b4 286 uint16_t _register_id;
Christopher Haster 1:79b6cc67d8b4 287 uint16_t _unregister_id;
Christopher Haster 1:79b6cc67d8b4 288 uint16_t _update_id;
Christopher Haster 1:79b6cc67d8b4 289 uint16_t _bootstrap_id;
Christopher Haster 1:79b6cc67d8b4 290
Christopher Haster 1:79b6cc67d8b4 291 friend class Test_M2MNsdlInterface;
Christopher Haster 1:79b6cc67d8b4 292
Christopher Haster 1:79b6cc67d8b4 293 };
Christopher Haster 1:79b6cc67d8b4 294
Christopher Haster 1:79b6cc67d8b4 295 #endif // M2MNSDLINTERFACE_H