Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
share/object_device.c@14:ec9e195830ff, 2017-05-06 (annotated)
- Committer:
- terencez
- Date:
- Sat May 06 11:21:27 2017 +0000
- Revision:
- 14:ec9e195830ff
- Parent:
- object_device.c@4:35892233a85d
- Child:
- 15:d0f20339c1ad
First compile version, registration success but could not handle request.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
terencez | 0:f9d13e09cf11 | 1 | /******************************************************************************* |
terencez | 0:f9d13e09cf11 | 2 | * |
terence zhang | 4:35892233a85d | 3 | * Copyright (c) 2013, 2014, 2015 Intel Corporation and others. |
terencez | 0:f9d13e09cf11 | 4 | * All rights reserved. This program and the accompanying materials |
terencez | 0:f9d13e09cf11 | 5 | * are made available under the terms of the Eclipse Public License v1.0 |
terencez | 0:f9d13e09cf11 | 6 | * and Eclipse Distribution License v1.0 which accompany this distribution. |
terencez | 0:f9d13e09cf11 | 7 | * |
terencez | 0:f9d13e09cf11 | 8 | * The Eclipse Public License is available at |
terencez | 0:f9d13e09cf11 | 9 | * http://www.eclipse.org/legal/epl-v10.html |
terencez | 0:f9d13e09cf11 | 10 | * The Eclipse Distribution License is available at |
terencez | 0:f9d13e09cf11 | 11 | * http://www.eclipse.org/org/documents/edl-v10.php. |
terencez | 0:f9d13e09cf11 | 12 | * |
terencez | 0:f9d13e09cf11 | 13 | * Contributors: |
terencez | 0:f9d13e09cf11 | 14 | * David Navarro, Intel Corporation - initial API and implementation |
terencez | 0:f9d13e09cf11 | 15 | * domedambrosio - Please refer to git log |
terencez | 0:f9d13e09cf11 | 16 | * Fabien Fleutot - Please refer to git log |
terencez | 0:f9d13e09cf11 | 17 | * Axel Lorente - Please refer to git log |
terence zhang | 4:35892233a85d | 18 | * Bosch Software Innovations GmbH - Please refer to git log |
terence zhang | 4:35892233a85d | 19 | * Pascal Rieux - Please refer to git log |
terencez | 0:f9d13e09cf11 | 20 | * |
terencez | 0:f9d13e09cf11 | 21 | *******************************************************************************/ |
terencez | 0:f9d13e09cf11 | 22 | |
terencez | 0:f9d13e09cf11 | 23 | /* |
terencez | 0:f9d13e09cf11 | 24 | Copyright (c) 2013, 2014 Intel Corporation |
terencez | 0:f9d13e09cf11 | 25 | |
terencez | 0:f9d13e09cf11 | 26 | Redistribution and use in source and binary forms, with or without modification, |
terencez | 0:f9d13e09cf11 | 27 | are permitted provided that the following conditions are met: |
terencez | 0:f9d13e09cf11 | 28 | |
terencez | 0:f9d13e09cf11 | 29 | * Redistributions of source code must retain the above copyright notice, |
terencez | 0:f9d13e09cf11 | 30 | this list of conditions and the following disclaimer. |
terencez | 0:f9d13e09cf11 | 31 | * Redistributions in binary form must reproduce the above copyright notice, |
terencez | 0:f9d13e09cf11 | 32 | this list of conditions and the following disclaimer in the documentation |
terencez | 0:f9d13e09cf11 | 33 | and/or other materials provided with the distribution. |
terencez | 0:f9d13e09cf11 | 34 | * Neither the name of Intel Corporation nor the names of its contributors |
terencez | 0:f9d13e09cf11 | 35 | may be used to endorse or promote products derived from this software |
terencez | 0:f9d13e09cf11 | 36 | without specific prior written permission. |
terencez | 0:f9d13e09cf11 | 37 | |
terencez | 0:f9d13e09cf11 | 38 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
terencez | 0:f9d13e09cf11 | 39 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
terencez | 0:f9d13e09cf11 | 40 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
terencez | 0:f9d13e09cf11 | 41 | IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
terencez | 0:f9d13e09cf11 | 42 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
terencez | 0:f9d13e09cf11 | 43 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
terencez | 0:f9d13e09cf11 | 44 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
terencez | 0:f9d13e09cf11 | 45 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
terencez | 0:f9d13e09cf11 | 46 | OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
terencez | 0:f9d13e09cf11 | 47 | THE POSSIBILITY OF SUCH DAMAGE. |
terencez | 0:f9d13e09cf11 | 48 | |
terencez | 0:f9d13e09cf11 | 49 | David Navarro <david.navarro@intel.com> |
terencez | 0:f9d13e09cf11 | 50 | |
terencez | 0:f9d13e09cf11 | 51 | */ |
terencez | 0:f9d13e09cf11 | 52 | |
terencez | 0:f9d13e09cf11 | 53 | /* |
terencez | 0:f9d13e09cf11 | 54 | * This object is single instance only, and is mandatory to all LWM2M device as it describe the object such as its |
terencez | 0:f9d13e09cf11 | 55 | * manufacturer, model, etc... |
terence zhang | 4:35892233a85d | 56 | * |
terence zhang | 4:35892233a85d | 57 | * Here we implement only some of the optional resources. |
terence zhang | 4:35892233a85d | 58 | * |
terencez | 0:f9d13e09cf11 | 59 | */ |
terencez | 0:f9d13e09cf11 | 60 | |
terencez | 0:f9d13e09cf11 | 61 | #include "liblwm2m.h" |
terencez | 0:f9d13e09cf11 | 62 | |
terencez | 0:f9d13e09cf11 | 63 | #include <stdio.h> |
terencez | 0:f9d13e09cf11 | 64 | #include <stdlib.h> |
terencez | 0:f9d13e09cf11 | 65 | #include <string.h> |
terencez | 0:f9d13e09cf11 | 66 | #include <ctype.h> |
terencez | 0:f9d13e09cf11 | 67 | |
terencez | 0:f9d13e09cf11 | 68 | |
terencez | 0:f9d13e09cf11 | 69 | #define PRV_MANUFACTURER "Open Mobile Alliance" |
terencez | 0:f9d13e09cf11 | 70 | #define PRV_MODEL_NUMBER "Lightweight M2M Client" |
terencez | 0:f9d13e09cf11 | 71 | #define PRV_BINDING_MODE "U" |
terencez | 0:f9d13e09cf11 | 72 | |
terence zhang | 4:35892233a85d | 73 | // Resource Id's: |
terence zhang | 4:35892233a85d | 74 | #define RES_O_MANUFACTURER 0 |
terence zhang | 4:35892233a85d | 75 | #define RES_O_MODEL_NUMBER 1 |
terence zhang | 4:35892233a85d | 76 | #define RES_O_SERIAL_NUMBER 2 |
terence zhang | 4:35892233a85d | 77 | #define RES_O_FIRMWARE_VERSION 3 |
terence zhang | 4:35892233a85d | 78 | #define RES_M_REBOOT 4 |
terence zhang | 4:35892233a85d | 79 | #define RES_O_FACTORY_RESET 5 |
terence zhang | 4:35892233a85d | 80 | #define RES_O_AVL_POWER_SOURCES 6 |
terence zhang | 4:35892233a85d | 81 | #define RES_O_POWER_SOURCE_VOLTAGE 7 |
terence zhang | 4:35892233a85d | 82 | #define RES_O_POWER_SOURCE_CURRENT 8 |
terence zhang | 4:35892233a85d | 83 | #define RES_O_BATTERY_LEVEL 9 |
terence zhang | 4:35892233a85d | 84 | #define RES_O_MEMORY_FREE 10 |
terence zhang | 4:35892233a85d | 85 | #define RES_M_ERROR_CODE 11 |
terence zhang | 4:35892233a85d | 86 | #define RES_O_RESET_ERROR_CODE 12 |
terence zhang | 4:35892233a85d | 87 | #define RES_O_CURRENT_TIME 13 |
terence zhang | 4:35892233a85d | 88 | #define RES_O_UTC_OFFSET 14 |
terence zhang | 4:35892233a85d | 89 | #define RES_O_TIMEZONE 15 |
terence zhang | 4:35892233a85d | 90 | #define RES_M_BINDING_MODES 16 |
terence zhang | 4:35892233a85d | 91 | #define RES_O_DEVICE_TYPE 17 |
terence zhang | 4:35892233a85d | 92 | #define RES_O_HARDWARE_VERSION 18 |
terence zhang | 4:35892233a85d | 93 | #define RES_O_SOFTWARE_VERSION 19 |
terence zhang | 4:35892233a85d | 94 | #define RES_O_BATTERY_STATUS 20 |
terence zhang | 4:35892233a85d | 95 | #define RES_O_MEMORY_TOTAL 21 |
terencez | 0:f9d13e09cf11 | 96 | |
terencez | 0:f9d13e09cf11 | 97 | |
terence zhang | 4:35892233a85d | 98 | static uint8_t prv_set_value(lwm2m_data_t * dataP) |
terencez | 0:f9d13e09cf11 | 99 | { |
terencez | 0:f9d13e09cf11 | 100 | // a simple switch structure is used to respond at the specified resource asked |
terence zhang | 4:35892233a85d | 101 | switch (dataP->id) |
terencez | 0:f9d13e09cf11 | 102 | { |
terence zhang | 4:35892233a85d | 103 | case RES_O_MANUFACTURER: |
terence zhang | 4:35892233a85d | 104 | lwm2m_data_encode_string(PRV_MANUFACTURER, dataP); |
terencez | 0:f9d13e09cf11 | 105 | return COAP_205_CONTENT; |
terencez | 0:f9d13e09cf11 | 106 | |
terence zhang | 4:35892233a85d | 107 | case RES_O_MODEL_NUMBER: |
terence zhang | 4:35892233a85d | 108 | lwm2m_data_encode_string(PRV_MODEL_NUMBER, dataP); |
terencez | 0:f9d13e09cf11 | 109 | return COAP_205_CONTENT; |
terencez | 0:f9d13e09cf11 | 110 | |
terence zhang | 4:35892233a85d | 111 | case RES_M_REBOOT: |
terence zhang | 4:35892233a85d | 112 | return COAP_405_METHOD_NOT_ALLOWED; |
terence zhang | 4:35892233a85d | 113 | |
terence zhang | 4:35892233a85d | 114 | case RES_M_BINDING_MODES: |
terence zhang | 4:35892233a85d | 115 | lwm2m_data_encode_string(PRV_BINDING_MODE, dataP); |
terencez | 0:f9d13e09cf11 | 116 | return COAP_205_CONTENT; |
terencez | 0:f9d13e09cf11 | 117 | |
terence zhang | 4:35892233a85d | 118 | |
terencez | 0:f9d13e09cf11 | 119 | default: |
terencez | 0:f9d13e09cf11 | 120 | return COAP_404_NOT_FOUND; |
terencez | 0:f9d13e09cf11 | 121 | } |
terencez | 0:f9d13e09cf11 | 122 | } |
terencez | 0:f9d13e09cf11 | 123 | |
terencez | 0:f9d13e09cf11 | 124 | static uint8_t prv_device_read(uint16_t instanceId, |
terencez | 0:f9d13e09cf11 | 125 | int * numDataP, |
terence zhang | 4:35892233a85d | 126 | lwm2m_data_t ** dataArrayP, |
terencez | 0:f9d13e09cf11 | 127 | lwm2m_object_t * objectP) |
terencez | 0:f9d13e09cf11 | 128 | { |
terencez | 0:f9d13e09cf11 | 129 | uint8_t result; |
terencez | 0:f9d13e09cf11 | 130 | int i; |
terencez | 0:f9d13e09cf11 | 131 | |
terencez | 0:f9d13e09cf11 | 132 | // this is a single instance object |
terencez | 0:f9d13e09cf11 | 133 | if (instanceId != 0) |
terencez | 0:f9d13e09cf11 | 134 | { |
terencez | 0:f9d13e09cf11 | 135 | return COAP_404_NOT_FOUND; |
terencez | 0:f9d13e09cf11 | 136 | } |
terencez | 0:f9d13e09cf11 | 137 | |
terencez | 0:f9d13e09cf11 | 138 | // is the server asking for the full object ? |
terencez | 0:f9d13e09cf11 | 139 | if (*numDataP == 0) |
terencez | 0:f9d13e09cf11 | 140 | { |
terence zhang | 4:35892233a85d | 141 | uint16_t resList[] = { |
terence zhang | 4:35892233a85d | 142 | RES_O_MANUFACTURER, |
terence zhang | 4:35892233a85d | 143 | RES_O_MODEL_NUMBER, |
terence zhang | 4:35892233a85d | 144 | RES_M_BINDING_MODES |
terence zhang | 4:35892233a85d | 145 | }; |
terencez | 0:f9d13e09cf11 | 146 | int nbRes = sizeof(resList)/sizeof(uint16_t); |
terencez | 0:f9d13e09cf11 | 147 | |
terence zhang | 4:35892233a85d | 148 | *dataArrayP = lwm2m_data_new(nbRes); |
terencez | 0:f9d13e09cf11 | 149 | if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR; |
terencez | 0:f9d13e09cf11 | 150 | *numDataP = nbRes; |
terencez | 0:f9d13e09cf11 | 151 | for (i = 0 ; i < nbRes ; i++) |
terencez | 0:f9d13e09cf11 | 152 | { |
terencez | 0:f9d13e09cf11 | 153 | (*dataArrayP)[i].id = resList[i]; |
terencez | 0:f9d13e09cf11 | 154 | } |
terencez | 0:f9d13e09cf11 | 155 | } |
terencez | 0:f9d13e09cf11 | 156 | |
terencez | 0:f9d13e09cf11 | 157 | i = 0; |
terencez | 0:f9d13e09cf11 | 158 | do |
terencez | 0:f9d13e09cf11 | 159 | { |
terence zhang | 4:35892233a85d | 160 | result = prv_set_value((*dataArrayP) + i); |
terencez | 0:f9d13e09cf11 | 161 | i++; |
terencez | 0:f9d13e09cf11 | 162 | } while (i < *numDataP && result == COAP_205_CONTENT); |
terencez | 0:f9d13e09cf11 | 163 | |
terencez | 0:f9d13e09cf11 | 164 | return result; |
terencez | 0:f9d13e09cf11 | 165 | } |
terencez | 0:f9d13e09cf11 | 166 | |
terence zhang | 4:35892233a85d | 167 | static uint8_t prv_device_discover(uint16_t instanceId, |
terence zhang | 4:35892233a85d | 168 | int * numDataP, |
terence zhang | 4:35892233a85d | 169 | lwm2m_data_t ** dataArrayP, |
terence zhang | 4:35892233a85d | 170 | lwm2m_object_t * objectP) |
terencez | 0:f9d13e09cf11 | 171 | { |
terence zhang | 4:35892233a85d | 172 | uint8_t result; |
terencez | 0:f9d13e09cf11 | 173 | int i; |
terencez | 0:f9d13e09cf11 | 174 | |
terencez | 0:f9d13e09cf11 | 175 | // this is a single instance object |
terencez | 0:f9d13e09cf11 | 176 | if (instanceId != 0) |
terencez | 0:f9d13e09cf11 | 177 | { |
terencez | 0:f9d13e09cf11 | 178 | return COAP_404_NOT_FOUND; |
terencez | 0:f9d13e09cf11 | 179 | } |
terencez | 0:f9d13e09cf11 | 180 | |
terence zhang | 4:35892233a85d | 181 | result = COAP_205_CONTENT; |
terencez | 0:f9d13e09cf11 | 182 | |
terence zhang | 4:35892233a85d | 183 | // is the server asking for the full object ? |
terence zhang | 4:35892233a85d | 184 | if (*numDataP == 0) |
terencez | 0:f9d13e09cf11 | 185 | { |
terence zhang | 4:35892233a85d | 186 | uint16_t resList[] = { |
terence zhang | 4:35892233a85d | 187 | RES_O_MANUFACTURER, |
terence zhang | 4:35892233a85d | 188 | RES_O_MODEL_NUMBER, |
terence zhang | 4:35892233a85d | 189 | RES_M_BINDING_MODES, |
terence zhang | 4:35892233a85d | 190 | RES_M_REBOOT |
terence zhang | 4:35892233a85d | 191 | }; |
terence zhang | 4:35892233a85d | 192 | int nbRes = sizeof(resList)/sizeof(uint16_t); |
terencez | 0:f9d13e09cf11 | 193 | |
terence zhang | 4:35892233a85d | 194 | *dataArrayP = lwm2m_data_new(nbRes); |
terence zhang | 4:35892233a85d | 195 | if (*dataArrayP == NULL) return COAP_500_INTERNAL_SERVER_ERROR; |
terence zhang | 4:35892233a85d | 196 | *numDataP = nbRes; |
terence zhang | 4:35892233a85d | 197 | for (i = 0 ; i < nbRes ; i++) |
terence zhang | 4:35892233a85d | 198 | { |
terence zhang | 4:35892233a85d | 199 | (*dataArrayP)[i].id = resList[i]; |
terence zhang | 4:35892233a85d | 200 | } |
terence zhang | 4:35892233a85d | 201 | } |
terence zhang | 4:35892233a85d | 202 | else |
terence zhang | 4:35892233a85d | 203 | { |
terence zhang | 4:35892233a85d | 204 | for (i = 0; i < *numDataP && result == COAP_205_CONTENT; i++) |
terence zhang | 4:35892233a85d | 205 | { |
terence zhang | 4:35892233a85d | 206 | switch ((*dataArrayP)[i].id) |
terencez | 0:f9d13e09cf11 | 207 | { |
terence zhang | 4:35892233a85d | 208 | case RES_O_MANUFACTURER: |
terence zhang | 4:35892233a85d | 209 | case RES_O_MODEL_NUMBER: |
terence zhang | 4:35892233a85d | 210 | case RES_M_BINDING_MODES: |
terence zhang | 4:35892233a85d | 211 | case RES_M_REBOOT: |
terence zhang | 4:35892233a85d | 212 | break; |
terence zhang | 4:35892233a85d | 213 | default: |
terence zhang | 4:35892233a85d | 214 | result = COAP_404_NOT_FOUND; |
terencez | 0:f9d13e09cf11 | 215 | } |
terencez | 0:f9d13e09cf11 | 216 | } |
terence zhang | 4:35892233a85d | 217 | } |
terencez | 0:f9d13e09cf11 | 218 | |
terencez | 0:f9d13e09cf11 | 219 | return result; |
terencez | 0:f9d13e09cf11 | 220 | } |
terencez | 0:f9d13e09cf11 | 221 | |
terencez | 0:f9d13e09cf11 | 222 | static uint8_t prv_device_execute(uint16_t instanceId, |
terencez | 0:f9d13e09cf11 | 223 | uint16_t resourceId, |
terence zhang | 4:35892233a85d | 224 | uint8_t * buffer, |
terencez | 0:f9d13e09cf11 | 225 | int length, |
terencez | 0:f9d13e09cf11 | 226 | lwm2m_object_t * objectP) |
terencez | 0:f9d13e09cf11 | 227 | { |
terencez | 0:f9d13e09cf11 | 228 | // this is a single instance object |
terencez | 0:f9d13e09cf11 | 229 | if (instanceId != 0) |
terencez | 0:f9d13e09cf11 | 230 | { |
terencez | 0:f9d13e09cf11 | 231 | return COAP_404_NOT_FOUND; |
terencez | 0:f9d13e09cf11 | 232 | } |
terencez | 0:f9d13e09cf11 | 233 | |
terencez | 0:f9d13e09cf11 | 234 | if (length != 0) return COAP_400_BAD_REQUEST; |
terencez | 0:f9d13e09cf11 | 235 | |
terence zhang | 4:35892233a85d | 236 | if (resourceId == RES_M_REBOOT) |
terencez | 0:f9d13e09cf11 | 237 | { |
terencez | 0:f9d13e09cf11 | 238 | fprintf(stdout, "\n\t REBOOT\r\n\n"); |
terencez | 0:f9d13e09cf11 | 239 | return COAP_204_CHANGED; |
terencez | 0:f9d13e09cf11 | 240 | } |
terence zhang | 4:35892233a85d | 241 | |
terence zhang | 4:35892233a85d | 242 | return COAP_405_METHOD_NOT_ALLOWED; |
terencez | 0:f9d13e09cf11 | 243 | } |
terencez | 0:f9d13e09cf11 | 244 | |
terencez | 0:f9d13e09cf11 | 245 | lwm2m_object_t * get_object_device() |
terencez | 0:f9d13e09cf11 | 246 | { |
terencez | 0:f9d13e09cf11 | 247 | /* |
terencez | 0:f9d13e09cf11 | 248 | * The get_object_device function create the object itself and return a pointer to the structure that represent it. |
terencez | 0:f9d13e09cf11 | 249 | */ |
terencez | 0:f9d13e09cf11 | 250 | lwm2m_object_t * deviceObj; |
terencez | 0:f9d13e09cf11 | 251 | |
terence zhang | 4:35892233a85d | 252 | deviceObj = (lwm2m_object_t *)lwm2m_malloc(sizeof(lwm2m_object_t)); |
terencez | 0:f9d13e09cf11 | 253 | |
terencez | 0:f9d13e09cf11 | 254 | if (NULL != deviceObj) |
terencez | 0:f9d13e09cf11 | 255 | { |
terencez | 0:f9d13e09cf11 | 256 | memset(deviceObj, 0, sizeof(lwm2m_object_t)); |
terencez | 0:f9d13e09cf11 | 257 | |
terencez | 0:f9d13e09cf11 | 258 | /* |
terence zhang | 4:35892233a85d | 259 | * It assigns his unique ID |
terencez | 0:f9d13e09cf11 | 260 | * The 3 is the standard ID for the mandatory object "Object device". |
terencez | 0:f9d13e09cf11 | 261 | */ |
terence zhang | 4:35892233a85d | 262 | deviceObj->objID = LWM2M_DEVICE_OBJECT_ID; |
terencez | 0:f9d13e09cf11 | 263 | |
terencez | 0:f9d13e09cf11 | 264 | /* |
terence zhang | 4:35892233a85d | 265 | * and its unique instance |
terence zhang | 4:35892233a85d | 266 | * |
terence zhang | 4:35892233a85d | 267 | */ |
terence zhang | 4:35892233a85d | 268 | deviceObj->instanceList = (lwm2m_list_t *)lwm2m_malloc(sizeof(lwm2m_list_t)); |
terence zhang | 4:35892233a85d | 269 | if (NULL != deviceObj->instanceList) |
terence zhang | 4:35892233a85d | 270 | { |
terence zhang | 4:35892233a85d | 271 | memset(deviceObj->instanceList, 0, sizeof(lwm2m_list_t)); |
terence zhang | 4:35892233a85d | 272 | } |
terence zhang | 4:35892233a85d | 273 | else |
terence zhang | 4:35892233a85d | 274 | { |
terence zhang | 4:35892233a85d | 275 | lwm2m_free(deviceObj); |
terence zhang | 4:35892233a85d | 276 | return NULL; |
terence zhang | 4:35892233a85d | 277 | } |
terence zhang | 4:35892233a85d | 278 | |
terence zhang | 4:35892233a85d | 279 | /* |
terencez | 0:f9d13e09cf11 | 280 | * And the private function that will access the object. |
terencez | 0:f9d13e09cf11 | 281 | * Those function will be called when a read/write/execute query is made by the server. In fact the library don't need to |
terencez | 0:f9d13e09cf11 | 282 | * know the resources of the object, only the server does. |
terencez | 0:f9d13e09cf11 | 283 | */ |
terence zhang | 4:35892233a85d | 284 | deviceObj->readFunc = prv_device_read; |
terence zhang | 4:35892233a85d | 285 | deviceObj->executeFunc = prv_device_execute; |
terence zhang | 4:35892233a85d | 286 | deviceObj->discoverFunc = prv_device_discover; |
terencez | 0:f9d13e09cf11 | 287 | |
terence zhang | 4:35892233a85d | 288 | } |
terencez | 0:f9d13e09cf11 | 289 | |
terencez | 0:f9d13e09cf11 | 290 | return deviceObj; |
terencez | 0:f9d13e09cf11 | 291 | } |
terence zhang | 4:35892233a85d | 292 | |
terence zhang | 4:35892233a85d | 293 | void free_object_device(lwm2m_object_t * objectP) |
terence zhang | 4:35892233a85d | 294 | { |
terence zhang | 4:35892233a85d | 295 | if (NULL != objectP->userData) |
terence zhang | 4:35892233a85d | 296 | { |
terence zhang | 4:35892233a85d | 297 | lwm2m_free(objectP->userData); |
terence zhang | 4:35892233a85d | 298 | objectP->userData = NULL; |
terence zhang | 4:35892233a85d | 299 | } |
terence zhang | 4:35892233a85d | 300 | if (NULL != objectP->instanceList) |
terence zhang | 4:35892233a85d | 301 | { |
terence zhang | 4:35892233a85d | 302 | lwm2m_free(objectP->instanceList); |
terence zhang | 4:35892233a85d | 303 | objectP->instanceList = NULL; |
terence zhang | 4:35892233a85d | 304 | } |
terence zhang | 4:35892233a85d | 305 | |
terence zhang | 4:35892233a85d | 306 | lwm2m_free(objectP); |
terence zhang | 4:35892233a85d | 307 | } |