mbed Connector Interface simplification API on top of mbed-client

Fork of mbedConnectorInterfaceV3 by Doug Anson

NOTE:

This repo has been replaced with https://github.com/ARMmbed/mbedConnectorInterface. No further updates will occur with this repo. Please use the github repo instead. Thanks!

Committer:
ansond
Date:
Tue Sep 26 16:01:31 2017 +0000
Revision:
127:b4a661ff6fb9
Parent:
98:56e429670fdb
minor re-ordering of FCC init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ansond 1:16f0fb5b8d97 1 /**
ansond 1:16f0fb5b8d97 2 * @file Endpoint.h
ansond 1:16f0fb5b8d97 3 * @brief mbed CoAP Endpoint base class
ansond 1:16f0fb5b8d97 4 * @author Doug Anson/Chris Paola
ansond 1:16f0fb5b8d97 5 * @version 1.0
ansond 1:16f0fb5b8d97 6 * @see
ansond 1:16f0fb5b8d97 7 *
ansond 1:16f0fb5b8d97 8 * Copyright (c) 2014
ansond 1:16f0fb5b8d97 9 *
ansond 1:16f0fb5b8d97 10 * Licensed under the Apache License, Version 2.0 (the "License");
ansond 1:16f0fb5b8d97 11 * you may not use this file except in compliance with the License.
ansond 1:16f0fb5b8d97 12 * You may obtain a copy of the License at
ansond 1:16f0fb5b8d97 13 *
ansond 1:16f0fb5b8d97 14 * http://www.apache.org/licenses/LICENSE-2.0
ansond 1:16f0fb5b8d97 15 *
ansond 1:16f0fb5b8d97 16 * Unless required by applicable law or agreed to in writing, software
ansond 1:16f0fb5b8d97 17 * distributed under the License is distributed on an "AS IS" BASIS,
ansond 1:16f0fb5b8d97 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ansond 1:16f0fb5b8d97 19 * See the License for the specific language governing permissions and
ansond 1:16f0fb5b8d97 20 * limitations under the License.
ansond 1:16f0fb5b8d97 21 */
ansond 1:16f0fb5b8d97 22
ansond 1:16f0fb5b8d97 23 #ifndef __CONNECTOR_ENDPOINT_H__
ansond 1:16f0fb5b8d97 24 #define __CONNECTOR_ENDPOINT_H__
ansond 1:16f0fb5b8d97 25
ansond 71:5069a202e892 26 // Support for Logging/Debug output
ansond 71:5069a202e892 27 #include "mbed-connector-interface/Logger.h"
ansond 71:5069a202e892 28
ansond 1:16f0fb5b8d97 29 // mbed-client support
ansond 1:16f0fb5b8d97 30 #include "mbed-client/m2minterfacefactory.h"
ansond 1:16f0fb5b8d97 31 #include "mbed-client/m2minterfaceobserver.h"
ansond 1:16f0fb5b8d97 32 #include "mbed-client/m2minterface.h"
ansond 1:16f0fb5b8d97 33 #include "mbed-client/m2mobjectinstance.h"
ansond 1:16f0fb5b8d97 34 #include "mbed-client/m2mresource.h"
ansond 33:1d0b855df5a5 35 #include "mbed-client/m2mdevice.h"
ansond 33:1d0b855df5a5 36 #include "mbed-client/m2mfirmware.h"
ansond 1:16f0fb5b8d97 37
ansond 1:16f0fb5b8d97 38 // Options support
ansond 1:16f0fb5b8d97 39 #include "mbed-connector-interface/Options.h"
ansond 1:16f0fb5b8d97 40
ansond 27:b8aaf7dc7023 41 // ConnectionStatusInterface support
ansond 27:b8aaf7dc7023 42 #include "mbed-connector-interface/ConnectionStatusInterface.h"
ansond 27:b8aaf7dc7023 43
ansond 27:b8aaf7dc7023 44 // ObjectInstanceManager support
ansond 27:b8aaf7dc7023 45 #include "mbed-connector-interface/ObjectInstanceManager.h"
ansond 27:b8aaf7dc7023 46
ansond 1:16f0fb5b8d97 47 // Connector namespace
ansond 1:16f0fb5b8d97 48 namespace Connector {
ansond 1:16f0fb5b8d97 49
ansond 1:16f0fb5b8d97 50 /** Endpoint class
ansond 1:16f0fb5b8d97 51 */
ansond 81:a2441163a06e 52 #ifdef ENABLE_MBED_CLOUD_SUPPORT
ansond 81:a2441163a06e 53 class Endpoint : public MbedCloudClientCallback, public M2MInterfaceObserver {
ansond 81:a2441163a06e 54 #else
ansond 1:16f0fb5b8d97 55 class Endpoint : public M2MInterfaceObserver {
ansond 81:a2441163a06e 56 #endif
ansond 1:16f0fb5b8d97 57
ansond 1:16f0fb5b8d97 58 public:
ansond 1:16f0fb5b8d97 59 /**
ansond 1:16f0fb5b8d97 60 Default Constructor
ansond 1:16f0fb5b8d97 61 */
ansond 1:16f0fb5b8d97 62 Endpoint(const Logger *logger,const Options *ob);
ansond 1:16f0fb5b8d97 63
ansond 1:16f0fb5b8d97 64 /**
ansond 1:16f0fb5b8d97 65 Copy Constructor
ansond 1:16f0fb5b8d97 66 @param ob input endpoint instance to deep copy
ansond 1:16f0fb5b8d97 67 */
ansond 1:16f0fb5b8d97 68 Endpoint(const Endpoint &ep);
ansond 1:16f0fb5b8d97 69
ansond 1:16f0fb5b8d97 70 /**
ansond 1:16f0fb5b8d97 71 Destructor
ansond 1:16f0fb5b8d97 72 */
ansond 1:16f0fb5b8d97 73 virtual ~Endpoint();
ansond 1:16f0fb5b8d97 74
ansond 1:16f0fb5b8d97 75 /**
ansond 8:f950fb1b78c0 76 Build out the endpoint.
ansond 1:16f0fb5b8d97 77 */
ansond 46:62da4ce20276 78 void buildEndpoint();
ansond 1:16f0fb5b8d97 79
ansond 1:16f0fb5b8d97 80 /**
ansond 1:16f0fb5b8d97 81 Plumb the lower RF network stack
ansond 13:9edad7677211 82 @param device_manager input optional device manager (DeviceManager type)
ansond 1:16f0fb5b8d97 83 @param canActAsRouterNode input boolean indicating whether this node can act as a router node or not.
ansond 1:16f0fb5b8d97 84 */
ansond 13:9edad7677211 85 static void plumbNetwork(void *device_manager = NULL,bool canActAsRouterNode = false);
ansond 0:1f1f55e73248 86
ansond 1:16f0fb5b8d97 87 /**
ansond 1:16f0fb5b8d97 88 Initialize the endpoint's configuration and begin the endpoint's main even loop
ansond 1:16f0fb5b8d97 89 */
ansond 1:16f0fb5b8d97 90 static void start();
ansond 1:16f0fb5b8d97 91
ansond 43:3fb57c4fba34 92 /**
ansond 43:3fb57c4fba34 93 Set the ConnectionStatusInterface instance
ansond 43:3fb57c4fba34 94 @param csi input instance pointer to the ConnectionStatusInterface implementation to be used
ansond 43:3fb57c4fba34 95 */
ansond 43:3fb57c4fba34 96 static void setConnectionStatusInterface(ConnectionStatusInterface *csi);
ansond 8:f950fb1b78c0 97
ansond 8:f950fb1b78c0 98 // re-register endpoint
ansond 8:f950fb1b78c0 99 void re_register_endpoint();
ansond 8:f950fb1b78c0 100
ansond 8:f950fb1b78c0 101 // de-register endpoint and stop scheduling
ansond 8:f950fb1b78c0 102 void de_register_endpoint(void);
ansond 76:7f55e1c0635d 103
ansond 76:7f55e1c0635d 104 // mbed-client : register the endpoint
ansond 76:7f55e1c0635d 105 void register_endpoint(M2MSecurity *server_instance, M2MObjectList resources);
ansond 8:f950fb1b78c0 106
ansond 81:a2441163a06e 107 #ifdef ENABLE_MBED_CLOUD_SUPPORT
ansond 81:a2441163a06e 108 // mbed-cloud-client : object registered
ansond 81:a2441163a06e 109 static void on_registered();
ansond 81:a2441163a06e 110
ansond 81:a2441163a06e 111 // mbed-cloud-client : registration updated
ansond 98:56e429670fdb 112 static void on_registration_updated();
ansond 81:a2441163a06e 113
ansond 81:a2441163a06e 114 // mbed-cloud-client : object unregistered
ansond 81:a2441163a06e 115 static void on_unregistered();
ansond 81:a2441163a06e 116
ansond 81:a2441163a06e 117 // mbed-cloud-client: error
ansond 81:a2441163a06e 118 static void on_error(int error_code);
ansond 98:56e429670fdb 119
ansond 98:56e429670fdb 120 /**
ansond 98:56e429670fdb 121 * @brief Function for authorizing firmware downloads and reboots.
ansond 98:56e429670fdb 122 * @param request The request under consideration.
ansond 98:56e429670fdb 123 */
ansond 98:56e429670fdb 124 static void update_authorize(int32_t request);
ansond 98:56e429670fdb 125
ansond 98:56e429670fdb 126 /**
ansond 98:56e429670fdb 127 * @brief Callback function for reporting the firmware download progress.
ansond 98:56e429670fdb 128 * @param progress Received bytes.
ansond 98:56e429670fdb 129 * @param total Total amount of bytes to be received.
ansond 98:56e429670fdb 130 */
ansond 98:56e429670fdb 131 static void update_progress(uint32_t progress, uint32_t total);
ansond 81:a2441163a06e 132 #endif
ansond 81:a2441163a06e 133
ansond 8:f950fb1b78c0 134 // mbed-client : object registered
ansond 87:00b3837986c7 135 virtual void object_registered(M2MSecurity *security, const M2MServer &server);
ansond 87:00b3837986c7 136 void object_registered(void *security = NULL,void *server = NULL);
ansond 1:16f0fb5b8d97 137
ansond 8:f950fb1b78c0 138 // mbed-client : registration updated
ansond 87:00b3837986c7 139 virtual void registration_updated(M2MSecurity *security, const M2MServer &server);
ansond 87:00b3837986c7 140 void registration_updated(void *security = NULL,void *server = NULL);
ansond 1:16f0fb5b8d97 141
ansond 1:16f0fb5b8d97 142 // mbed-client : object unregistered
ansond 87:00b3837986c7 143 virtual void object_unregistered(M2MSecurity *security = NULL);
ansond 1:16f0fb5b8d97 144
ansond 8:f950fb1b78c0 145 // mbed-client : bootstrap done
ansond 87:00b3837986c7 146 virtual void bootstrap_done(M2MSecurity *security = NULL);
ansond 1:16f0fb5b8d97 147
ansond 1:16f0fb5b8d97 148 // mbed-client : resource value updated
ansond 8:f950fb1b78c0 149 virtual void value_updated(M2MBase *resource, M2MBase::BaseType type) ;
ansond 1:16f0fb5b8d97 150
ansond 1:16f0fb5b8d97 151 // mbed-client : error handler
ansond 1:16f0fb5b8d97 152 virtual void error(M2MInterface::Error error);
ansond 1:16f0fb5b8d97 153
ansond 1:16f0fb5b8d97 154 // get our Options
ansond 1:16f0fb5b8d97 155 void setOptions(Options *options);
ansond 1:16f0fb5b8d97 156
ansond 1:16f0fb5b8d97 157 // get our Options
ansond 1:16f0fb5b8d97 158 Options *getOptions();
ansond 8:f950fb1b78c0 159
ansond 73:f12a767bc300 160 #ifdef ENABLE_MBED_CLOUD_SUPPORT
ansond 73:f12a767bc300 161 // get our Endpoint Interface
ansond 73:f12a767bc300 162 MbedCloudClient *getEndpointInterface();
ansond 73:f12a767bc300 163 #else
ansond 46:62da4ce20276 164 // get our Endpoint Interface
ansond 46:62da4ce20276 165 M2MInterface *getEndpointInterface();
ansond 81:a2441163a06e 166 #endif
ansond 81:a2441163a06e 167
ansond 46:62da4ce20276 168 // get our Endpoint Security
ansond 81:a2441163a06e 169 M2MSecurity *getSecurityInstance();
ansond 46:62da4ce20276 170
ansond 46:62da4ce20276 171 // get our Endpoint Object List
ansond 46:62da4ce20276 172 M2MObjectList getEndpointObjectList();
ansond 1:16f0fb5b8d97 173
ansond 1:16f0fb5b8d97 174 // configure to act as router node
ansond 1:16f0fb5b8d97 175 void asRouterNode(bool canActAsRouterNode);
ansond 13:9edad7677211 176
ansond 13:9edad7677211 177 // access the logger
ansond 13:9edad7677211 178 Logger *logger();
ansond 13:9edad7677211 179
ansond 13:9edad7677211 180 // set the device manager
ansond 13:9edad7677211 181 void setDeviceManager(void *device_manager);
ansond 13:9edad7677211 182
ansond 13:9edad7677211 183 // get the device manager
ansond 13:9edad7677211 184 void *getDeviceManager(void);
ansond 13:9edad7677211 185
ansond 13:9edad7677211 186 // underlying network is connected (SET)
ansond 13:9edad7677211 187 void isConnected(bool connected);
ansond 13:9edad7677211 188
ansond 13:9edad7677211 189 // underlying network is connected (GET)
ansond 13:9edad7677211 190 bool isConnected();
ansond 15:c11dbe4d354c 191
ansond 15:c11dbe4d354c 192 // Registered with mDC/mDS
ansond 15:c11dbe4d354c 193 bool isRegistered();
ansond 27:b8aaf7dc7023 194
ansond 27:b8aaf7dc7023 195 /**
ansond 27:b8aaf7dc7023 196 Set the ConnectionStatusInterface instance
ansond 27:b8aaf7dc7023 197 @param csi input instance pointer to the ConnectionStatusInterface implementation to be used
ansond 27:b8aaf7dc7023 198 */
ansond 43:3fb57c4fba34 199 void setConnectionStatusInterfaceImpl(ConnectionStatusInterface *csi);
ansond 1:16f0fb5b8d97 200
ansond 27:b8aaf7dc7023 201 // Set ObjectInstanceManager
ansond 27:b8aaf7dc7023 202 void setObjectInstanceManager(ObjectInstanceManager *oim);
ansond 27:b8aaf7dc7023 203
ansond 27:b8aaf7dc7023 204 // Get ObjectInstanceManager
ansond 27:b8aaf7dc7023 205 ObjectInstanceManager *getObjectInstanceManager();
ansond 27:b8aaf7dc7023 206
ansond 1:16f0fb5b8d97 207 private:
ansond 44:7c73baf9f4c1 208 Logger *m_logger;
ansond 44:7c73baf9f4c1 209 Options *m_options;
ansond 44:7c73baf9f4c1 210 bool m_canActAsRouterNode;
ansond 44:7c73baf9f4c1 211 bool m_connected;
ansond 44:7c73baf9f4c1 212 bool m_registered;
ansond 1:16f0fb5b8d97 213
ansond 1:16f0fb5b8d97 214 // mbed-client support
ansond 81:a2441163a06e 215 #ifdef ENABLE_MBED_CLOUD_SUPPORT
ansond 71:5069a202e892 216 MbedCloudClient *m_endpoint_interface;
ansond 71:5069a202e892 217 #else
ansond 81:a2441163a06e 218 M2MInterface *m_endpoint_interface;
ansond 71:5069a202e892 219 #endif
ansond 81:a2441163a06e 220 M2MSecurity *m_endpoint_security;
ansond 46:62da4ce20276 221 M2MObjectList m_endpoint_object_list;
ansond 13:9edad7677211 222
ansond 13:9edad7677211 223 // Device Manager
ansond 44:7c73baf9f4c1 224 void *m_device_manager;
ansond 27:b8aaf7dc7023 225
ansond 27:b8aaf7dc7023 226 // ConnectionStatusInterface implementation
ansond 27:b8aaf7dc7023 227 ConnectionStatusInterface *m_csi;
ansond 27:b8aaf7dc7023 228
ansond 27:b8aaf7dc7023 229 // ObjectInstanceManager
ansond 27:b8aaf7dc7023 230 ObjectInstanceManager *m_oim;
ansond 71:5069a202e892 231
ansond 71:5069a202e892 232 // create our endpoint interface
ansond 71:5069a202e892 233 void createEndpointInterface();
ansond 44:7c73baf9f4c1 234
ansond 71:5069a202e892 235 #ifdef ENABLE_MBED_CLOUD_SUPPORT
ansond 96:73a85768f235 236 // mbed-cloud methods (R1.2+)
ansond 96:73a85768f235 237 bool initializeStorage();
ansond 96:73a85768f235 238 bool initializeFactoryFlow();
ansond 71:5069a202e892 239 void createCloudEndpointInterface();
ansond 71:5069a202e892 240 #else
ansond 71:5069a202e892 241 // mbed-client methods
ansond 71:5069a202e892 242 void createConnectorEndpointInterface();
ansond 83:8d856fa24fda 243 #endif
ansond 83:8d856fa24fda 244
ansond 83:8d856fa24fda 245 // create our endpoint security instance
ansond 81:a2441163a06e 246 M2MSecurity *createEndpointSecurityInstance();
ansond 44:7c73baf9f4c1 247
ansond 44:7c73baf9f4c1 248 // DynamicResource Lookup
ansond 44:7c73baf9f4c1 249 DynamicResource *lookupDynamicResource(M2MBase *base);
ansond 54:dfee8691c83a 250
ansond 54:dfee8691c83a 251 // stop underlying observers
ansond 54:dfee8691c83a 252 void stopObservations();
ansond 81:a2441163a06e 253
ansond 81:a2441163a06e 254 // set our endpoint security instance
ansond 81:a2441163a06e 255 void setSecurityInstance(M2MSecurity *security);
ansond 1:16f0fb5b8d97 256 };
ansond 1:16f0fb5b8d97 257
ansond 1:16f0fb5b8d97 258 } // namespace Connector
ansond 1:16f0fb5b8d97 259
ansond 1:16f0fb5b8d97 260 #endif // __CONNECTOR_ENDPOINT_H__