mbed client lightswitch demo
Dependencies: mbed Socket lwip-eth lwip-sys lwip
Fork of mbed-client-classic-example-lwip by
mbed-client/source/include/m2minterfaceimpl.h@11:cada08fc8a70, 2016-06-09 (annotated)
- Committer:
- mbedAustin
- Date:
- Thu Jun 09 17:08:36 2016 +0000
- Revision:
- 11:cada08fc8a70
Commit for public Consumption
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mbedAustin | 11:cada08fc8a70 | 1 | /* |
| mbedAustin | 11:cada08fc8a70 | 2 | * Copyright (c) 2015 ARM Limited. All rights reserved. |
| mbedAustin | 11:cada08fc8a70 | 3 | * SPDX-License-Identifier: Apache-2.0 |
| mbedAustin | 11:cada08fc8a70 | 4 | * Licensed under the Apache License, Version 2.0 (the License); you may |
| mbedAustin | 11:cada08fc8a70 | 5 | * not use this file except in compliance with the License. |
| mbedAustin | 11:cada08fc8a70 | 6 | * You may obtain a copy of the License at |
| mbedAustin | 11:cada08fc8a70 | 7 | * |
| mbedAustin | 11:cada08fc8a70 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| mbedAustin | 11:cada08fc8a70 | 9 | * |
| mbedAustin | 11:cada08fc8a70 | 10 | * Unless required by applicable law or agreed to in writing, software |
| mbedAustin | 11:cada08fc8a70 | 11 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT |
| mbedAustin | 11:cada08fc8a70 | 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| mbedAustin | 11:cada08fc8a70 | 13 | * See the License for the specific language governing permissions and |
| mbedAustin | 11:cada08fc8a70 | 14 | * limitations under the License. |
| mbedAustin | 11:cada08fc8a70 | 15 | */ |
| mbedAustin | 11:cada08fc8a70 | 16 | #ifndef M2M_INTERFACE_IMPL_H |
| mbedAustin | 11:cada08fc8a70 | 17 | #define M2M_INTERFACE_IMPL_H |
| mbedAustin | 11:cada08fc8a70 | 18 | |
| mbedAustin | 11:cada08fc8a70 | 19 | #include "mbed-client/m2minterface.h" |
| mbedAustin | 11:cada08fc8a70 | 20 | #include "mbed-client/m2mserver.h" |
| mbedAustin | 11:cada08fc8a70 | 21 | #include "mbed-client/m2mconnectionobserver.h" |
| mbedAustin | 11:cada08fc8a70 | 22 | #include "include/m2mnsdlobserver.h" |
| mbedAustin | 11:cada08fc8a70 | 23 | #include "mbed-client/m2mtimerobserver.h" |
| mbedAustin | 11:cada08fc8a70 | 24 | |
| mbedAustin | 11:cada08fc8a70 | 25 | //FORWARD DECLARATION |
| mbedAustin | 11:cada08fc8a70 | 26 | class M2MNsdlInterface; |
| mbedAustin | 11:cada08fc8a70 | 27 | class M2MConnectionHandler; |
| mbedAustin | 11:cada08fc8a70 | 28 | class EventData; |
| mbedAustin | 11:cada08fc8a70 | 29 | class M2MTimer; |
| mbedAustin | 11:cada08fc8a70 | 30 | |
| mbedAustin | 11:cada08fc8a70 | 31 | /** |
| mbedAustin | 11:cada08fc8a70 | 32 | * @brief M2MInterfaceImpl. |
| mbedAustin | 11:cada08fc8a70 | 33 | * This class implements handling of all mbed Client Interface operations |
| mbedAustin | 11:cada08fc8a70 | 34 | * defined in OMA LWM2M specifications. |
| mbedAustin | 11:cada08fc8a70 | 35 | * This includes Bootstrapping, Client Registration, Device Management & |
| mbedAustin | 11:cada08fc8a70 | 36 | * Service Enablement and Information Reporting. |
| mbedAustin | 11:cada08fc8a70 | 37 | */ |
| mbedAustin | 11:cada08fc8a70 | 38 | |
| mbedAustin | 11:cada08fc8a70 | 39 | class M2MInterfaceImpl : public M2MInterface, |
| mbedAustin | 11:cada08fc8a70 | 40 | public M2MNsdlObserver, |
| mbedAustin | 11:cada08fc8a70 | 41 | public M2MConnectionObserver, |
| mbedAustin | 11:cada08fc8a70 | 42 | public M2MTimerObserver |
| mbedAustin | 11:cada08fc8a70 | 43 | { |
| mbedAustin | 11:cada08fc8a70 | 44 | private: |
| mbedAustin | 11:cada08fc8a70 | 45 | // Prevents the use of assignment operator by accident. |
| mbedAustin | 11:cada08fc8a70 | 46 | M2MInterfaceImpl& operator=( const M2MInterfaceImpl& /*other*/ ); |
| mbedAustin | 11:cada08fc8a70 | 47 | |
| mbedAustin | 11:cada08fc8a70 | 48 | // Prevents the use of copy constructor by accident |
| mbedAustin | 11:cada08fc8a70 | 49 | M2MInterfaceImpl( const M2MInterfaceImpl& /*other*/ ); |
| mbedAustin | 11:cada08fc8a70 | 50 | |
| mbedAustin | 11:cada08fc8a70 | 51 | friend class M2MInterfaceFactory; |
| mbedAustin | 11:cada08fc8a70 | 52 | |
| mbedAustin | 11:cada08fc8a70 | 53 | private: |
| mbedAustin | 11:cada08fc8a70 | 54 | |
| mbedAustin | 11:cada08fc8a70 | 55 | /** |
| mbedAustin | 11:cada08fc8a70 | 56 | * @brief Constructor |
| mbedAustin | 11:cada08fc8a70 | 57 | * @param observer, Observer to pass the event callbacks for various |
| mbedAustin | 11:cada08fc8a70 | 58 | * interface operations. |
| mbedAustin | 11:cada08fc8a70 | 59 | * @param endpoint_name, Endpoint name of the client. |
| mbedAustin | 11:cada08fc8a70 | 60 | * @param endpoint_type, Endpoint type of the client. |
| mbedAustin | 11:cada08fc8a70 | 61 | * @param life_time, Life time of the client in seconds |
| mbedAustin | 11:cada08fc8a70 | 62 | * @param listen_port, Listening port for the endpoint, default is 8000. |
| mbedAustin | 11:cada08fc8a70 | 63 | * @param domain, Domain of the client. |
| mbedAustin | 11:cada08fc8a70 | 64 | * @param mode, Binding mode of the client, default is UDP |
| mbedAustin | 11:cada08fc8a70 | 65 | * @param stack, Network Stack to be used for connection, default is LwIP_IPv4 |
| mbedAustin | 11:cada08fc8a70 | 66 | * @param context_address, Context address default is empty. |
| mbedAustin | 11:cada08fc8a70 | 67 | */ |
| mbedAustin | 11:cada08fc8a70 | 68 | M2MInterfaceImpl(M2MInterfaceObserver& observer, |
| mbedAustin | 11:cada08fc8a70 | 69 | const String &endpoint_name, |
| mbedAustin | 11:cada08fc8a70 | 70 | const String &endpoint_type, |
| mbedAustin | 11:cada08fc8a70 | 71 | const int32_t life_time, |
| mbedAustin | 11:cada08fc8a70 | 72 | const uint16_t listen_port, |
| mbedAustin | 11:cada08fc8a70 | 73 | const String &domain = "", |
| mbedAustin | 11:cada08fc8a70 | 74 | BindingMode mode = M2MInterface::NOT_SET, |
| mbedAustin | 11:cada08fc8a70 | 75 | M2MInterface::NetworkStack stack = M2MInterface::LwIP_IPv4, |
| mbedAustin | 11:cada08fc8a70 | 76 | const String &context_address = ""); |
| mbedAustin | 11:cada08fc8a70 | 77 | |
| mbedAustin | 11:cada08fc8a70 | 78 | public: |
| mbedAustin | 11:cada08fc8a70 | 79 | |
| mbedAustin | 11:cada08fc8a70 | 80 | /** |
| mbedAustin | 11:cada08fc8a70 | 81 | * @brief Destructor |
| mbedAustin | 11:cada08fc8a70 | 82 | */ |
| mbedAustin | 11:cada08fc8a70 | 83 | virtual ~M2MInterfaceImpl(); |
| mbedAustin | 11:cada08fc8a70 | 84 | |
| mbedAustin | 11:cada08fc8a70 | 85 | /** |
| mbedAustin | 11:cada08fc8a70 | 86 | * @brief Initiates bootstrapping of the client with the provided Bootstrap |
| mbedAustin | 11:cada08fc8a70 | 87 | * server information. |
| mbedAustin | 11:cada08fc8a70 | 88 | * @param security_object, Security object which contains information |
| mbedAustin | 11:cada08fc8a70 | 89 | * required for successful bootstrapping of the client. |
| mbedAustin | 11:cada08fc8a70 | 90 | */ |
| mbedAustin | 11:cada08fc8a70 | 91 | virtual void bootstrap(M2MSecurity *security); |
| mbedAustin | 11:cada08fc8a70 | 92 | |
| mbedAustin | 11:cada08fc8a70 | 93 | /** |
| mbedAustin | 11:cada08fc8a70 | 94 | * @brief Cancels on going bootstrapping operation of the client. If the client has |
| mbedAustin | 11:cada08fc8a70 | 95 | * already successfully bootstrapped then this function deletes existing |
| mbedAustin | 11:cada08fc8a70 | 96 | * bootstrap information from the client. |
| mbedAustin | 11:cada08fc8a70 | 97 | */ |
| mbedAustin | 11:cada08fc8a70 | 98 | virtual void cancel_bootstrap(); |
| mbedAustin | 11:cada08fc8a70 | 99 | |
| mbedAustin | 11:cada08fc8a70 | 100 | /** |
| mbedAustin | 11:cada08fc8a70 | 101 | * @brief Initiates registration of the provided Security object to the |
| mbedAustin | 11:cada08fc8a70 | 102 | * corresponding LWM2M server. |
| mbedAustin | 11:cada08fc8a70 | 103 | * @param security_object, Security object which contains information |
| mbedAustin | 11:cada08fc8a70 | 104 | * required for registering to the LWM2M server. |
| mbedAustin | 11:cada08fc8a70 | 105 | * If client wants to register to multiple LWM2M servers then it has call |
| mbedAustin | 11:cada08fc8a70 | 106 | * this function once for each of LWM2M server object separately. |
| mbedAustin | 11:cada08fc8a70 | 107 | * @param object_list, Objects which contains information |
| mbedAustin | 11:cada08fc8a70 | 108 | * which the client want to register to the LWM2M server. |
| mbedAustin | 11:cada08fc8a70 | 109 | */ |
| mbedAustin | 11:cada08fc8a70 | 110 | virtual void register_object(M2MSecurity *security_object, const M2MObjectList &object_list); |
| mbedAustin | 11:cada08fc8a70 | 111 | |
| mbedAustin | 11:cada08fc8a70 | 112 | /** |
| mbedAustin | 11:cada08fc8a70 | 113 | * @brief Updates or refreshes the client's registration on the LWM2M |
| mbedAustin | 11:cada08fc8a70 | 114 | * server. |
| mbedAustin | 11:cada08fc8a70 | 115 | * @param security_object, Security object from which the device object |
| mbedAustin | 11:cada08fc8a70 | 116 | * needs to update registration, if there is only one LWM2M server registered |
| mbedAustin | 11:cada08fc8a70 | 117 | * then this parameter can be NULL. |
| mbedAustin | 11:cada08fc8a70 | 118 | * @param lifetime, Lifetime for the endpoint client in seconds. |
| mbedAustin | 11:cada08fc8a70 | 119 | */ |
| mbedAustin | 11:cada08fc8a70 | 120 | virtual void update_registration(M2MSecurity *security_object, const uint32_t lifetime = 0); |
| mbedAustin | 11:cada08fc8a70 | 121 | |
| mbedAustin | 11:cada08fc8a70 | 122 | /** |
| mbedAustin | 11:cada08fc8a70 | 123 | * @brief Unregisters the registered object from the LWM2M server |
| mbedAustin | 11:cada08fc8a70 | 124 | * @param security_object, Security object from which the device object |
| mbedAustin | 11:cada08fc8a70 | 125 | * needs to be unregistered, if there is only one LWM2M server registered |
| mbedAustin | 11:cada08fc8a70 | 126 | * then this parameter can be NULL. |
| mbedAustin | 11:cada08fc8a70 | 127 | */ |
| mbedAustin | 11:cada08fc8a70 | 128 | virtual void unregister_object(M2MSecurity* security = NULL); |
| mbedAustin | 11:cada08fc8a70 | 129 | |
| mbedAustin | 11:cada08fc8a70 | 130 | /** |
| mbedAustin | 11:cada08fc8a70 | 131 | * @brief Sets the function which will be called indicating client |
| mbedAustin | 11:cada08fc8a70 | 132 | * is going to sleep when the Binding mode is selected with Queue mode. |
| mbedAustin | 11:cada08fc8a70 | 133 | * @param callback, Function pointer which will be called when client |
| mbedAustin | 11:cada08fc8a70 | 134 | * goes to seleep. |
| mbedAustin | 11:cada08fc8a70 | 135 | */ |
| mbedAustin | 11:cada08fc8a70 | 136 | virtual void set_queue_sleep_handler(callback_handler handler); |
| mbedAustin | 11:cada08fc8a70 | 137 | |
| mbedAustin | 11:cada08fc8a70 | 138 | protected: // From M2MNsdlObserver |
| mbedAustin | 11:cada08fc8a70 | 139 | |
| mbedAustin | 11:cada08fc8a70 | 140 | virtual void coap_message_ready(uint8_t *data_ptr, |
| mbedAustin | 11:cada08fc8a70 | 141 | uint16_t data_len, |
| mbedAustin | 11:cada08fc8a70 | 142 | sn_nsdl_addr_s *address_ptr); |
| mbedAustin | 11:cada08fc8a70 | 143 | |
| mbedAustin | 11:cada08fc8a70 | 144 | virtual void client_registered(M2MServer *server_object); |
| mbedAustin | 11:cada08fc8a70 | 145 | |
| mbedAustin | 11:cada08fc8a70 | 146 | virtual void registration_updated(const M2MServer &server_object); |
| mbedAustin | 11:cada08fc8a70 | 147 | |
| mbedAustin | 11:cada08fc8a70 | 148 | virtual void registration_error(uint8_t error_code); |
| mbedAustin | 11:cada08fc8a70 | 149 | |
| mbedAustin | 11:cada08fc8a70 | 150 | virtual void client_unregistered(); |
| mbedAustin | 11:cada08fc8a70 | 151 | |
| mbedAustin | 11:cada08fc8a70 | 152 | virtual void bootstrap_done(M2MSecurity *security_object); |
| mbedAustin | 11:cada08fc8a70 | 153 | |
| mbedAustin | 11:cada08fc8a70 | 154 | virtual void bootstrap_error(); |
| mbedAustin | 11:cada08fc8a70 | 155 | |
| mbedAustin | 11:cada08fc8a70 | 156 | virtual void coap_data_processed(); |
| mbedAustin | 11:cada08fc8a70 | 157 | |
| mbedAustin | 11:cada08fc8a70 | 158 | virtual void value_updated(M2MBase *base); |
| mbedAustin | 11:cada08fc8a70 | 159 | |
| mbedAustin | 11:cada08fc8a70 | 160 | protected: // From M2MConnectionObserver |
| mbedAustin | 11:cada08fc8a70 | 161 | |
| mbedAustin | 11:cada08fc8a70 | 162 | virtual void data_available(uint8_t* data, |
| mbedAustin | 11:cada08fc8a70 | 163 | uint16_t data_size, |
| mbedAustin | 11:cada08fc8a70 | 164 | const M2MConnectionObserver::SocketAddress &address); |
| mbedAustin | 11:cada08fc8a70 | 165 | |
| mbedAustin | 11:cada08fc8a70 | 166 | virtual void socket_error(uint8_t error_code); |
| mbedAustin | 11:cada08fc8a70 | 167 | |
| mbedAustin | 11:cada08fc8a70 | 168 | virtual void address_ready(const M2MConnectionObserver::SocketAddress &address, |
| mbedAustin | 11:cada08fc8a70 | 169 | M2MConnectionObserver::ServerType server_type, |
| mbedAustin | 11:cada08fc8a70 | 170 | const uint16_t server_port); |
| mbedAustin | 11:cada08fc8a70 | 171 | |
| mbedAustin | 11:cada08fc8a70 | 172 | virtual void data_sent(); |
| mbedAustin | 11:cada08fc8a70 | 173 | |
| mbedAustin | 11:cada08fc8a70 | 174 | protected: // from M2MTimerObserver |
| mbedAustin | 11:cada08fc8a70 | 175 | |
| mbedAustin | 11:cada08fc8a70 | 176 | virtual void timer_expired(M2MTimerObserver::Type type); |
| mbedAustin | 11:cada08fc8a70 | 177 | |
| mbedAustin | 11:cada08fc8a70 | 178 | |
| mbedAustin | 11:cada08fc8a70 | 179 | private: // state machine state functions |
| mbedAustin | 11:cada08fc8a70 | 180 | |
| mbedAustin | 11:cada08fc8a70 | 181 | /** |
| mbedAustin | 11:cada08fc8a70 | 182 | * When the state is Idle. |
| mbedAustin | 11:cada08fc8a70 | 183 | */ |
| mbedAustin | 11:cada08fc8a70 | 184 | void state_idle(EventData* data); |
| mbedAustin | 11:cada08fc8a70 | 185 | |
| mbedAustin | 11:cada08fc8a70 | 186 | /** |
| mbedAustin | 11:cada08fc8a70 | 187 | * When the client starts bootstrap. |
| mbedAustin | 11:cada08fc8a70 | 188 | */ |
| mbedAustin | 11:cada08fc8a70 | 189 | void state_bootstrap( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 190 | |
| mbedAustin | 11:cada08fc8a70 | 191 | /** |
| mbedAustin | 11:cada08fc8a70 | 192 | * When the bootstrap server address is resolved. |
| mbedAustin | 11:cada08fc8a70 | 193 | */ |
| mbedAustin | 11:cada08fc8a70 | 194 | void state_bootstrap_address_resolved( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 195 | |
| mbedAustin | 11:cada08fc8a70 | 196 | /** |
| mbedAustin | 11:cada08fc8a70 | 197 | * When the bootstrap resource is created. |
| mbedAustin | 11:cada08fc8a70 | 198 | */ |
| mbedAustin | 11:cada08fc8a70 | 199 | void state_bootstrap_resource_created( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 200 | |
| mbedAustin | 11:cada08fc8a70 | 201 | /** |
| mbedAustin | 11:cada08fc8a70 | 202 | * When the server has sent response and bootstrapping is done. |
| mbedAustin | 11:cada08fc8a70 | 203 | */ |
| mbedAustin | 11:cada08fc8a70 | 204 | void state_bootstrapped( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 205 | |
| mbedAustin | 11:cada08fc8a70 | 206 | /** |
| mbedAustin | 11:cada08fc8a70 | 207 | * When the client starts register. |
| mbedAustin | 11:cada08fc8a70 | 208 | */ |
| mbedAustin | 11:cada08fc8a70 | 209 | void state_register( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 210 | |
| mbedAustin | 11:cada08fc8a70 | 211 | /** |
| mbedAustin | 11:cada08fc8a70 | 212 | * When the server address for register is resolved. |
| mbedAustin | 11:cada08fc8a70 | 213 | */ |
| mbedAustin | 11:cada08fc8a70 | 214 | void state_register_address_resolved( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 215 | |
| mbedAustin | 11:cada08fc8a70 | 216 | /** |
| mbedAustin | 11:cada08fc8a70 | 217 | * When the register resource is created. |
| mbedAustin | 11:cada08fc8a70 | 218 | */ |
| mbedAustin | 11:cada08fc8a70 | 219 | void state_register_resource_created( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 220 | |
| mbedAustin | 11:cada08fc8a70 | 221 | /** |
| mbedAustin | 11:cada08fc8a70 | 222 | * When the client is registered. |
| mbedAustin | 11:cada08fc8a70 | 223 | */ |
| mbedAustin | 11:cada08fc8a70 | 224 | void state_registered( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 225 | |
| mbedAustin | 11:cada08fc8a70 | 226 | /** |
| mbedAustin | 11:cada08fc8a70 | 227 | * When the client is updating registration. |
| mbedAustin | 11:cada08fc8a70 | 228 | */ |
| mbedAustin | 11:cada08fc8a70 | 229 | void state_update_registration( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 230 | |
| mbedAustin | 11:cada08fc8a70 | 231 | /** |
| mbedAustin | 11:cada08fc8a70 | 232 | * When the client starts unregister. |
| mbedAustin | 11:cada08fc8a70 | 233 | */ |
| mbedAustin | 11:cada08fc8a70 | 234 | void state_unregister( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 235 | |
| mbedAustin | 11:cada08fc8a70 | 236 | /** |
| mbedAustin | 11:cada08fc8a70 | 237 | * When the client has been unregistered. |
| mbedAustin | 11:cada08fc8a70 | 238 | */ |
| mbedAustin | 11:cada08fc8a70 | 239 | void state_unregistered( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 240 | |
| mbedAustin | 11:cada08fc8a70 | 241 | /** |
| mbedAustin | 11:cada08fc8a70 | 242 | * When the coap data is been sent through socket. |
| mbedAustin | 11:cada08fc8a70 | 243 | */ |
| mbedAustin | 11:cada08fc8a70 | 244 | void state_sending_coap_data( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 245 | |
| mbedAustin | 11:cada08fc8a70 | 246 | /** |
| mbedAustin | 11:cada08fc8a70 | 247 | * When the coap data is sent successfully. |
| mbedAustin | 11:cada08fc8a70 | 248 | */ |
| mbedAustin | 11:cada08fc8a70 | 249 | void state_coap_data_sent( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 250 | |
| mbedAustin | 11:cada08fc8a70 | 251 | /** |
| mbedAustin | 11:cada08fc8a70 | 252 | * When the socket is receiving coap data. |
| mbedAustin | 11:cada08fc8a70 | 253 | */ |
| mbedAustin | 11:cada08fc8a70 | 254 | void state_receiving_coap_data( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 255 | |
| mbedAustin | 11:cada08fc8a70 | 256 | /** |
| mbedAustin | 11:cada08fc8a70 | 257 | * When the socket has received coap data. |
| mbedAustin | 11:cada08fc8a70 | 258 | */ |
| mbedAustin | 11:cada08fc8a70 | 259 | void state_coap_data_received( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 260 | |
| mbedAustin | 11:cada08fc8a70 | 261 | /** |
| mbedAustin | 11:cada08fc8a70 | 262 | * When the coap message is being processed. |
| mbedAustin | 11:cada08fc8a70 | 263 | */ |
| mbedAustin | 11:cada08fc8a70 | 264 | void state_processing_coap_data( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 265 | |
| mbedAustin | 11:cada08fc8a70 | 266 | /** |
| mbedAustin | 11:cada08fc8a70 | 267 | * When the coap message has been processed. |
| mbedAustin | 11:cada08fc8a70 | 268 | */ |
| mbedAustin | 11:cada08fc8a70 | 269 | void state_coap_data_processed( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 270 | |
| mbedAustin | 11:cada08fc8a70 | 271 | /** |
| mbedAustin | 11:cada08fc8a70 | 272 | * When the client is waiting to receive or send data. |
| mbedAustin | 11:cada08fc8a70 | 273 | */ |
| mbedAustin | 11:cada08fc8a70 | 274 | void state_waiting( EventData *data); |
| mbedAustin | 11:cada08fc8a70 | 275 | |
| mbedAustin | 11:cada08fc8a70 | 276 | /** |
| mbedAustin | 11:cada08fc8a70 | 277 | * State enumeration order must match the order of state |
| mbedAustin | 11:cada08fc8a70 | 278 | * method entries in the state map |
| mbedAustin | 11:cada08fc8a70 | 279 | */ |
| mbedAustin | 11:cada08fc8a70 | 280 | enum E_States { |
| mbedAustin | 11:cada08fc8a70 | 281 | STATE_IDLE = 0, |
| mbedAustin | 11:cada08fc8a70 | 282 | STATE_BOOTSTRAP, |
| mbedAustin | 11:cada08fc8a70 | 283 | STATE_BOOTSTRAP_ADDRESS_RESOLVED, |
| mbedAustin | 11:cada08fc8a70 | 284 | STATE_BOOTSTRAP_RESOURCE_CREATED, |
| mbedAustin | 11:cada08fc8a70 | 285 | STATE_BOOTSTRAPPED, |
| mbedAustin | 11:cada08fc8a70 | 286 | STATE_REGISTER, //5 |
| mbedAustin | 11:cada08fc8a70 | 287 | STATE_REGISTER_ADDRESS_RESOLVED, |
| mbedAustin | 11:cada08fc8a70 | 288 | STATE_REGISTER_RESOURCE_CREATED, |
| mbedAustin | 11:cada08fc8a70 | 289 | STATE_REGISTERED, |
| mbedAustin | 11:cada08fc8a70 | 290 | STATE_UPDATE_REGISTRATION, |
| mbedAustin | 11:cada08fc8a70 | 291 | STATE_UNREGISTER, //10 |
| mbedAustin | 11:cada08fc8a70 | 292 | STATE_UNREGISTERED, |
| mbedAustin | 11:cada08fc8a70 | 293 | STATE_SENDING_COAP_DATA, |
| mbedAustin | 11:cada08fc8a70 | 294 | STATE_COAP_DATA_SENT, |
| mbedAustin | 11:cada08fc8a70 | 295 | STATE_COAP_DATA_RECEIVED, |
| mbedAustin | 11:cada08fc8a70 | 296 | STATE_PROCESSING_COAP_DATA, //15 |
| mbedAustin | 11:cada08fc8a70 | 297 | STATE_COAP_DATA_PROCESSED, |
| mbedAustin | 11:cada08fc8a70 | 298 | STATE_WAITING, |
| mbedAustin | 11:cada08fc8a70 | 299 | STATE_MAX_STATES |
| mbedAustin | 11:cada08fc8a70 | 300 | }; |
| mbedAustin | 11:cada08fc8a70 | 301 | |
| mbedAustin | 11:cada08fc8a70 | 302 | /** |
| mbedAustin | 11:cada08fc8a70 | 303 | * @brief Redirects the state machine to right function. |
| mbedAustin | 11:cada08fc8a70 | 304 | * @param current_state Current state to be set. |
| mbedAustin | 11:cada08fc8a70 | 305 | * @param data, Data to be passed to the state function. |
| mbedAustin | 11:cada08fc8a70 | 306 | */ |
| mbedAustin | 11:cada08fc8a70 | 307 | void state_function( uint8_t current_state, EventData* data ); |
| mbedAustin | 11:cada08fc8a70 | 308 | |
| mbedAustin | 11:cada08fc8a70 | 309 | /** |
| mbedAustin | 11:cada08fc8a70 | 310 | * @brief State Engine maintaining state machine logic. |
| mbedAustin | 11:cada08fc8a70 | 311 | */ |
| mbedAustin | 11:cada08fc8a70 | 312 | void state_engine(void); |
| mbedAustin | 11:cada08fc8a70 | 313 | |
| mbedAustin | 11:cada08fc8a70 | 314 | /** |
| mbedAustin | 11:cada08fc8a70 | 315 | * External event which can trigger the state machine. |
| mbedAustin | 11:cada08fc8a70 | 316 | * @param New State which the state machine should go to. |
| mbedAustin | 11:cada08fc8a70 | 317 | * @param data to be passed to the state machine. |
| mbedAustin | 11:cada08fc8a70 | 318 | */ |
| mbedAustin | 11:cada08fc8a70 | 319 | void external_event(uint8_t, EventData* = NULL); |
| mbedAustin | 11:cada08fc8a70 | 320 | |
| mbedAustin | 11:cada08fc8a70 | 321 | /** |
| mbedAustin | 11:cada08fc8a70 | 322 | * Internal event generated by state machine. |
| mbedAustin | 11:cada08fc8a70 | 323 | * @param New State which the state machine should go to. |
| mbedAustin | 11:cada08fc8a70 | 324 | * @param data to be passed to the state machine. |
| mbedAustin | 11:cada08fc8a70 | 325 | */ |
| mbedAustin | 11:cada08fc8a70 | 326 | void internal_event(uint8_t, EventData* = NULL); |
| mbedAustin | 11:cada08fc8a70 | 327 | |
| mbedAustin | 11:cada08fc8a70 | 328 | enum |
| mbedAustin | 11:cada08fc8a70 | 329 | { |
| mbedAustin | 11:cada08fc8a70 | 330 | EVENT_IGNORED = 0xFE, |
| mbedAustin | 11:cada08fc8a70 | 331 | CANNOT_HAPPEN |
| mbedAustin | 11:cada08fc8a70 | 332 | }; |
| mbedAustin | 11:cada08fc8a70 | 333 | |
| mbedAustin | 11:cada08fc8a70 | 334 | private: |
| mbedAustin | 11:cada08fc8a70 | 335 | |
| mbedAustin | 11:cada08fc8a70 | 336 | M2MInterfaceObserver &_observer; |
| mbedAustin | 11:cada08fc8a70 | 337 | M2MConnectionHandler *_connection_handler; |
| mbedAustin | 11:cada08fc8a70 | 338 | M2MNsdlInterface *_nsdl_interface; |
| mbedAustin | 11:cada08fc8a70 | 339 | uint8_t _current_state; |
| mbedAustin | 11:cada08fc8a70 | 340 | const int _max_states; |
| mbedAustin | 11:cada08fc8a70 | 341 | bool _event_generated; |
| mbedAustin | 11:cada08fc8a70 | 342 | EventData *_event_data; |
| mbedAustin | 11:cada08fc8a70 | 343 | |
| mbedAustin | 11:cada08fc8a70 | 344 | String _endpoint_name; |
| mbedAustin | 11:cada08fc8a70 | 345 | String _endpoint_type; |
| mbedAustin | 11:cada08fc8a70 | 346 | String _domain; |
| mbedAustin | 11:cada08fc8a70 | 347 | int32_t _life_time; |
| mbedAustin | 11:cada08fc8a70 | 348 | BindingMode _binding_mode; |
| mbedAustin | 11:cada08fc8a70 | 349 | String _context_address; |
| mbedAustin | 11:cada08fc8a70 | 350 | uint16_t _listen_port; |
| mbedAustin | 11:cada08fc8a70 | 351 | M2MSecurity *_register_server; //TODO: to be the list not owned |
| mbedAustin | 11:cada08fc8a70 | 352 | bool _event_ignored; |
| mbedAustin | 11:cada08fc8a70 | 353 | bool _register_ongoing; |
| mbedAustin | 11:cada08fc8a70 | 354 | bool _update_register_ongoing; |
| mbedAustin | 11:cada08fc8a70 | 355 | M2MTimer *_queue_sleep_timer; |
| mbedAustin | 11:cada08fc8a70 | 356 | callback_handler _callback_handler; |
| mbedAustin | 11:cada08fc8a70 | 357 | |
| mbedAustin | 11:cada08fc8a70 | 358 | friend class Test_M2MInterfaceImpl; |
| mbedAustin | 11:cada08fc8a70 | 359 | |
| mbedAustin | 11:cada08fc8a70 | 360 | }; |
| mbedAustin | 11:cada08fc8a70 | 361 | |
| mbedAustin | 11:cada08fc8a70 | 362 | #define BEGIN_TRANSITION_MAP \ |
| mbedAustin | 11:cada08fc8a70 | 363 | static const uint8_t TRANSITIONS[] = {\ |
| mbedAustin | 11:cada08fc8a70 | 364 | |
| mbedAustin | 11:cada08fc8a70 | 365 | #define TRANSITION_MAP_ENTRY(entry)\ |
| mbedAustin | 11:cada08fc8a70 | 366 | entry, |
| mbedAustin | 11:cada08fc8a70 | 367 | |
| mbedAustin | 11:cada08fc8a70 | 368 | #define END_TRANSITION_MAP(data) \ |
| mbedAustin | 11:cada08fc8a70 | 369 | 0 };\ |
| mbedAustin | 11:cada08fc8a70 | 370 | external_event(TRANSITIONS[_current_state], data); |
| mbedAustin | 11:cada08fc8a70 | 371 | |
| mbedAustin | 11:cada08fc8a70 | 372 | #endif //M2M_INTERFACE_IMPL_H |
| mbedAustin | 11:cada08fc8a70 | 373 | |
| mbedAustin | 11:cada08fc8a70 | 374 |
Austin Blackstone
