Dependencies:   MMA7660 LM75B

Committer:
MACRUM
Date:
Sat Jun 30 01:40:30 2018 +0000
Revision:
0:119624335925
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:119624335925 1 // ----------------------------------------------------------------------------
MACRUM 0:119624335925 2 // Copyright 2016-2017 ARM Ltd.
MACRUM 0:119624335925 3 //
MACRUM 0:119624335925 4 // SPDX-License-Identifier: Apache-2.0
MACRUM 0:119624335925 5 //
MACRUM 0:119624335925 6 // Licensed under the Apache License, Version 2.0 (the "License");
MACRUM 0:119624335925 7 // you may not use this file except in compliance with the License.
MACRUM 0:119624335925 8 // You may obtain a copy of the License at
MACRUM 0:119624335925 9 //
MACRUM 0:119624335925 10 // http://www.apache.org/licenses/LICENSE-2.0
MACRUM 0:119624335925 11 //
MACRUM 0:119624335925 12 // Unless required by applicable law or agreed to in writing, software
MACRUM 0:119624335925 13 // distributed under the License is distributed on an "AS IS" BASIS,
MACRUM 0:119624335925 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
MACRUM 0:119624335925 15 // See the License for the specific language governing permissions and
MACRUM 0:119624335925 16 // limitations under the License.
MACRUM 0:119624335925 17 // ----------------------------------------------------------------------------
MACRUM 0:119624335925 18
MACRUM 0:119624335925 19 #include "update-client-lwm2m/DeviceMetadataResource.h"
MACRUM 0:119624335925 20
MACRUM 0:119624335925 21 #include "update-client-common/arm_uc_common.h"
MACRUM 0:119624335925 22 #include "pal4life-device-identity/pal_device_identity.h"
MACRUM 0:119624335925 23
MACRUM 0:119624335925 24 #include <stdio.h>
MACRUM 0:119624335925 25
MACRUM 0:119624335925 26 #define ARM_UCS_LWM2M_INTERNAL_ERROR (-1)
MACRUM 0:119624335925 27 #define ARM_UCS_LWM2M_INTERNAL_SUCCESS (0)
MACRUM 0:119624335925 28
MACRUM 0:119624335925 29 namespace DeviceMetadataResource {
MACRUM 0:119624335925 30
MACRUM 0:119624335925 31 /* LWM2M Firmware Update Object */
MACRUM 0:119624335925 32 static M2MObject* deviceMetadataObject = NULL;
MACRUM 0:119624335925 33
MACRUM 0:119624335925 34 /* LWM2M Firmware Update Object resources */
MACRUM 0:119624335925 35 static M2MResource* protocolSupportedResource = NULL; // /10255/0/0
MACRUM 0:119624335925 36 static M2MResource* bootloaderHashResource = NULL; // /10255/0/1
MACRUM 0:119624335925 37 static M2MResource* OEMBootloaderHashResource = NULL; // /10255/0/2
MACRUM 0:119624335925 38 static M2MResource* vendorIdResource = NULL; // /10255/0/3
MACRUM 0:119624335925 39 static M2MResource* classIdResource = NULL; // /10255/0/4
MACRUM 0:119624335925 40 static M2MResource* deviceIdResource = NULL; // /10255/0/5
MACRUM 0:119624335925 41 }
MACRUM 0:119624335925 42
MACRUM 0:119624335925 43
MACRUM 0:119624335925 44 /**
MACRUM 0:119624335925 45 * @brief Initialize LWM2M Device Metadata Object
MACRUM 0:119624335925 46 * @details Sets up LWM2M object with accompanying resources.
MACRUM 0:119624335925 47 */
MACRUM 0:119624335925 48 void DeviceMetadataResource::Initialize(void)
MACRUM 0:119624335925 49 {
MACRUM 0:119624335925 50 static bool initialized = false;
MACRUM 0:119624335925 51
MACRUM 0:119624335925 52 if (!initialized)
MACRUM 0:119624335925 53 {
MACRUM 0:119624335925 54 initialized = true;
MACRUM 0:119624335925 55
MACRUM 0:119624335925 56 /* The LWM2M Firmware Update Object is at /10255 */
MACRUM 0:119624335925 57 deviceMetadataObject = M2MInterfaceFactory::create_object("10255");
MACRUM 0:119624335925 58
MACRUM 0:119624335925 59 if (deviceMetadataObject)
MACRUM 0:119624335925 60 {
MACRUM 0:119624335925 61 /* Set object operating mode to GET_ALLOWED */
MACRUM 0:119624335925 62 deviceMetadataObject->set_operation(M2MBase::GET_ALLOWED);
MACRUM 0:119624335925 63 /* Create first (and only) instance /10255/0 */
MACRUM 0:119624335925 64 M2MObjectInstance* deviceMetadataInstance = deviceMetadataObject->create_object_instance();
MACRUM 0:119624335925 65
MACRUM 0:119624335925 66 if (deviceMetadataInstance)
MACRUM 0:119624335925 67 {
MACRUM 0:119624335925 68 /* Default values are non-standard, but the standard has no
MACRUM 0:119624335925 69 values for indicating that the device is initializing.
MACRUM 0:119624335925 70 */
MACRUM 0:119624335925 71 int64_t defaultVersion = 1;
MACRUM 0:119624335925 72 const uint8_t invalid_value[] = "INVALID";
MACRUM 0:119624335925 73 const uint8_t invalid_value_size = sizeof(invalid_value) - 1;
MACRUM 0:119624335925 74
MACRUM 0:119624335925 75 arm_uc_error_t err = { .code = ERR_INVALID_PARAMETER };
MACRUM 0:119624335925 76 arm_uc_guid_t guid = { 0 };
MACRUM 0:119624335925 77 uint8_t* value = NULL;
MACRUM 0:119624335925 78 uint32_t value_length = 0;
MACRUM 0:119624335925 79
MACRUM 0:119624335925 80 /* Set instance operating mode to GET_ALLOWED */
MACRUM 0:119624335925 81 deviceMetadataInstance->set_operation(M2MBase::GET_ALLOWED);
MACRUM 0:119624335925 82
MACRUM 0:119624335925 83 /* Create Update resource /10255/0/0 */
MACRUM 0:119624335925 84 protocolSupportedResource = deviceMetadataInstance->create_dynamic_resource(
MACRUM 0:119624335925 85 "0",
MACRUM 0:119624335925 86 "ProtocolSupported",
MACRUM 0:119624335925 87 M2MResourceInstance::INTEGER,
MACRUM 0:119624335925 88 true);
MACRUM 0:119624335925 89 if (protocolSupportedResource)
MACRUM 0:119624335925 90 {
MACRUM 0:119624335925 91 protocolSupportedResource->set_operation(M2MBase::GET_ALLOWED);
MACRUM 0:119624335925 92 protocolSupportedResource->set_value(defaultVersion);
MACRUM 0:119624335925 93 }
MACRUM 0:119624335925 94
MACRUM 0:119624335925 95 /* Create Update resource /10255/0/1 */
MACRUM 0:119624335925 96 bootloaderHashResource = deviceMetadataInstance->create_static_resource(
MACRUM 0:119624335925 97 "1",
MACRUM 0:119624335925 98 "BootloaderHash",
MACRUM 0:119624335925 99 M2MResourceInstance::OPAQUE,
MACRUM 0:119624335925 100 (uint8_t *) invalid_value,
MACRUM 0:119624335925 101 invalid_value_size);
MACRUM 0:119624335925 102 if (bootloaderHashResource)
MACRUM 0:119624335925 103 {
MACRUM 0:119624335925 104 bootloaderHashResource->set_operation(M2MBase::GET_ALLOWED);
MACRUM 0:119624335925 105 }
MACRUM 0:119624335925 106
MACRUM 0:119624335925 107 /* Create Update resource /10255/0/2 */
MACRUM 0:119624335925 108 OEMBootloaderHashResource = deviceMetadataInstance->create_static_resource(
MACRUM 0:119624335925 109 "2",
MACRUM 0:119624335925 110 "OEMBootloaderHash",
MACRUM 0:119624335925 111 M2MResourceInstance::OPAQUE,
MACRUM 0:119624335925 112 (uint8_t *) invalid_value,
MACRUM 0:119624335925 113 invalid_value_size);
MACRUM 0:119624335925 114 if (OEMBootloaderHashResource)
MACRUM 0:119624335925 115 {
MACRUM 0:119624335925 116 OEMBootloaderHashResource->set_operation(M2MBase::GET_ALLOWED);
MACRUM 0:119624335925 117 }
MACRUM 0:119624335925 118
MACRUM 0:119624335925 119 /* get vendor ID */
MACRUM 0:119624335925 120 err = pal_getVendorGuid(&guid);
MACRUM 0:119624335925 121 if (err.error == ERR_NONE)
MACRUM 0:119624335925 122 {
MACRUM 0:119624335925 123 value = (uint8_t *) &guid;
MACRUM 0:119624335925 124 value_length = sizeof(arm_uc_guid_t);
MACRUM 0:119624335925 125 }
MACRUM 0:119624335925 126 else
MACRUM 0:119624335925 127 {
MACRUM 0:119624335925 128 value = (uint8_t *) invalid_value;
MACRUM 0:119624335925 129 value_length = invalid_value_size;
MACRUM 0:119624335925 130 }
MACRUM 0:119624335925 131
MACRUM 0:119624335925 132 /* Create Update resource /10255/0/3 */
MACRUM 0:119624335925 133 vendorIdResource = deviceMetadataInstance->create_dynamic_resource(
MACRUM 0:119624335925 134 "3",
MACRUM 0:119624335925 135 "Vendor",
MACRUM 0:119624335925 136 M2MResourceInstance::OPAQUE,
MACRUM 0:119624335925 137 true);
MACRUM 0:119624335925 138
MACRUM 0:119624335925 139 if (vendorIdResource)
MACRUM 0:119624335925 140 {
MACRUM 0:119624335925 141 vendorIdResource->set_operation(M2MBase::GET_ALLOWED);
MACRUM 0:119624335925 142 vendorIdResource->set_value(value, value_length);
MACRUM 0:119624335925 143 }
MACRUM 0:119624335925 144
MACRUM 0:119624335925 145 /* get class ID */
MACRUM 0:119624335925 146 err = pal_getClassGuid(&guid);
MACRUM 0:119624335925 147 if (err.error == ERR_NONE)
MACRUM 0:119624335925 148 {
MACRUM 0:119624335925 149 value = (uint8_t *) &guid;
MACRUM 0:119624335925 150 value_length = sizeof(arm_uc_guid_t);
MACRUM 0:119624335925 151 }
MACRUM 0:119624335925 152 else
MACRUM 0:119624335925 153 {
MACRUM 0:119624335925 154 value = (uint8_t *) invalid_value;
MACRUM 0:119624335925 155 value_length = invalid_value_size;
MACRUM 0:119624335925 156 }
MACRUM 0:119624335925 157
MACRUM 0:119624335925 158 /* Create Update resource /10255/0/4 */
MACRUM 0:119624335925 159 classIdResource = deviceMetadataInstance->create_dynamic_resource(
MACRUM 0:119624335925 160 "4",
MACRUM 0:119624335925 161 "Class",
MACRUM 0:119624335925 162 M2MResourceInstance::OPAQUE,
MACRUM 0:119624335925 163 true);
MACRUM 0:119624335925 164
MACRUM 0:119624335925 165 if (classIdResource)
MACRUM 0:119624335925 166 {
MACRUM 0:119624335925 167 classIdResource->set_operation(M2MBase::GET_ALLOWED);
MACRUM 0:119624335925 168 classIdResource->set_value(value, value_length);
MACRUM 0:119624335925 169 }
MACRUM 0:119624335925 170
MACRUM 0:119624335925 171 /* get device ID */
MACRUM 0:119624335925 172 err = pal_getDeviceGuid(&guid);
MACRUM 0:119624335925 173 if (err.error == ERR_NONE)
MACRUM 0:119624335925 174 {
MACRUM 0:119624335925 175 value = (uint8_t *) &guid;
MACRUM 0:119624335925 176 value_length = sizeof(arm_uc_guid_t);
MACRUM 0:119624335925 177 }
MACRUM 0:119624335925 178 else
MACRUM 0:119624335925 179 {
MACRUM 0:119624335925 180 value = (uint8_t *) invalid_value;
MACRUM 0:119624335925 181 value_length = invalid_value_size;
MACRUM 0:119624335925 182 }
MACRUM 0:119624335925 183
MACRUM 0:119624335925 184 /* Create Update resource /10255/0/5 */
MACRUM 0:119624335925 185 deviceIdResource = deviceMetadataInstance->create_static_resource(
MACRUM 0:119624335925 186 "5",
MACRUM 0:119624335925 187 "DeviceId",
MACRUM 0:119624335925 188 M2MResourceInstance::OPAQUE,
MACRUM 0:119624335925 189 value,
MACRUM 0:119624335925 190 value_length);
MACRUM 0:119624335925 191 if (deviceIdResource)
MACRUM 0:119624335925 192 {
MACRUM 0:119624335925 193 deviceIdResource->set_operation(M2MBase::GET_ALLOWED);
MACRUM 0:119624335925 194 }
MACRUM 0:119624335925 195 }
MACRUM 0:119624335925 196 }
MACRUM 0:119624335925 197 }
MACRUM 0:119624335925 198 }
MACRUM 0:119624335925 199
MACRUM 0:119624335925 200 int32_t DeviceMetadataResource::setBootloaderHash(arm_uc_buffer_t* hash)
MACRUM 0:119624335925 201 {
MACRUM 0:119624335925 202 UC_SRCE_TRACE("DeviceMetadataResource::setBootloaderHash ptr %p size %u", hash, hash->size);
MACRUM 0:119624335925 203
MACRUM 0:119624335925 204 int32_t result = ARM_UCS_LWM2M_INTERNAL_ERROR;
MACRUM 0:119624335925 205
MACRUM 0:119624335925 206 if (bootloaderHashResource && hash && hash->size > 0)
MACRUM 0:119624335925 207 {
MACRUM 0:119624335925 208 bool rt = bootloaderHashResource->set_value(hash->ptr, hash->size);
MACRUM 0:119624335925 209 if (rt == true)
MACRUM 0:119624335925 210 {
MACRUM 0:119624335925 211 result = ARM_UCS_LWM2M_INTERNAL_SUCCESS;
MACRUM 0:119624335925 212 }
MACRUM 0:119624335925 213 }
MACRUM 0:119624335925 214
MACRUM 0:119624335925 215 return result;
MACRUM 0:119624335925 216 }
MACRUM 0:119624335925 217
MACRUM 0:119624335925 218 int32_t DeviceMetadataResource::setOEMBootloaderHash(arm_uc_buffer_t* hash)
MACRUM 0:119624335925 219 {
MACRUM 0:119624335925 220 UC_SRCE_TRACE("DeviceMetadataResource::setOEMBootloaderHash ptr %p size %u", hash, hash->size);
MACRUM 0:119624335925 221
MACRUM 0:119624335925 222 int32_t result = ARM_UCS_LWM2M_INTERNAL_ERROR;
MACRUM 0:119624335925 223
MACRUM 0:119624335925 224 if (OEMBootloaderHashResource && hash && hash->size > 0)
MACRUM 0:119624335925 225 {
MACRUM 0:119624335925 226 bool rt = OEMBootloaderHashResource->set_value(hash->ptr, hash->size);
MACRUM 0:119624335925 227 if (rt == true)
MACRUM 0:119624335925 228 {
MACRUM 0:119624335925 229 result = ARM_UCS_LWM2M_INTERNAL_SUCCESS;
MACRUM 0:119624335925 230 }
MACRUM 0:119624335925 231 }
MACRUM 0:119624335925 232
MACRUM 0:119624335925 233 return result;
MACRUM 0:119624335925 234 }
MACRUM 0:119624335925 235
MACRUM 0:119624335925 236 M2MObject* DeviceMetadataResource::getObject()
MACRUM 0:119624335925 237 {
MACRUM 0:119624335925 238 Initialize();
MACRUM 0:119624335925 239
MACRUM 0:119624335925 240 return deviceMetadataObject;
MACRUM 0:119624335925 241 }