Simulated product dispenser

Dependencies:   HTS221

Fork of mbed-cloud-workshop-connect-HTS221 by Jim Carver

Committer:
JimCarver
Date:
Fri Oct 12 21:22:49 2018 +0000
Revision:
0:6b753f761943
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JimCarver 0:6b753f761943 1 // ----------------------------------------------------------------------------
JimCarver 0:6b753f761943 2 // Copyright 2016-2018 ARM Ltd.
JimCarver 0:6b753f761943 3 //
JimCarver 0:6b753f761943 4 // SPDX-License-Identifier: Apache-2.0
JimCarver 0:6b753f761943 5 //
JimCarver 0:6b753f761943 6 // Licensed under the Apache License, Version 2.0 (the "License");
JimCarver 0:6b753f761943 7 // you may not use this file except in compliance with the License.
JimCarver 0:6b753f761943 8 // You may obtain a copy of the License at
JimCarver 0:6b753f761943 9 //
JimCarver 0:6b753f761943 10 // http://www.apache.org/licenses/LICENSE-2.0
JimCarver 0:6b753f761943 11 //
JimCarver 0:6b753f761943 12 // Unless required by applicable law or agreed to in writing, software
JimCarver 0:6b753f761943 13 // distributed under the License is distributed on an "AS IS" BASIS,
JimCarver 0:6b753f761943 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
JimCarver 0:6b753f761943 15 // See the License for the specific language governing permissions and
JimCarver 0:6b753f761943 16 // limitations under the License.
JimCarver 0:6b753f761943 17 // ----------------------------------------------------------------------------
JimCarver 0:6b753f761943 18
JimCarver 0:6b753f761943 19 #ifdef TARGET_LIKE_MBED
JimCarver 0:6b753f761943 20
JimCarver 0:6b753f761943 21 #ifdef MBED_HEAP_STATS_ENABLED
JimCarver 0:6b753f761943 22 // used by print_heap_stats only
JimCarver 0:6b753f761943 23 #include "mbed_stats.h"
JimCarver 0:6b753f761943 24 #define __STDC_FORMAT_MACROS
JimCarver 0:6b753f761943 25 #include <inttypes.h>
JimCarver 0:6b753f761943 26 #include "mbed-client/m2mbase.h"
JimCarver 0:6b753f761943 27 #endif
JimCarver 0:6b753f761943 28
JimCarver 0:6b753f761943 29 // fixup the compilation on AMRCC for PRIu32
JimCarver 0:6b753f761943 30 #define __STDC_FORMAT_MACROS
JimCarver 0:6b753f761943 31 #include <inttypes.h>
JimCarver 0:6b753f761943 32
JimCarver 0:6b753f761943 33 #include "memory_tests.h"
JimCarver 0:6b753f761943 34
JimCarver 0:6b753f761943 35 #include "mbed-client/m2mblockmessage.h"
JimCarver 0:6b753f761943 36 #include "mbed-client/m2mdevice.h"
JimCarver 0:6b753f761943 37 #include "mbed-client/m2mfirmware.h"
JimCarver 0:6b753f761943 38 #include "mbed-client/m2minterfacefactory.h"
JimCarver 0:6b753f761943 39 #include "mbed-client/m2mobject.h"
JimCarver 0:6b753f761943 40 #include "mbed-client/m2mserver.h"
JimCarver 0:6b753f761943 41 #include "mbed-client/m2msecurity.h"
JimCarver 0:6b753f761943 42 #include "source/include/m2mreporthandler.h"
JimCarver 0:6b753f761943 43
JimCarver 0:6b753f761943 44 #include "mbed.h"
JimCarver 0:6b753f761943 45 #include "mbed_stats.h"
JimCarver 0:6b753f761943 46
JimCarver 0:6b753f761943 47 #include <assert.h>
JimCarver 0:6b753f761943 48
JimCarver 0:6b753f761943 49 void heap_stats()
JimCarver 0:6b753f761943 50 {
JimCarver 0:6b753f761943 51 #ifdef MBED_HEAP_STATS_ENABLED
JimCarver 0:6b753f761943 52 mbed_stats_heap_t stats;
JimCarver 0:6b753f761943 53 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 54 printf("**** current_size: %" PRIu32 "\n", stats.current_size);
JimCarver 0:6b753f761943 55 printf("**** max_size : %" PRIu32 "\n", stats.max_size);
JimCarver 0:6b753f761943 56 #endif // MBED_HEAP_STATS_ENABLED
JimCarver 0:6b753f761943 57 }
JimCarver 0:6b753f761943 58
JimCarver 0:6b753f761943 59 void m2mobject_test_set(M2MObjectList& object_list)
JimCarver 0:6b753f761943 60 {
JimCarver 0:6b753f761943 61 #ifdef MBED_HEAP_STATS_ENABLED
JimCarver 0:6b753f761943 62 printf("*************************************\n");
JimCarver 0:6b753f761943 63
JimCarver 0:6b753f761943 64 mbed_stats_heap_t stats;
JimCarver 0:6b753f761943 65 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 66
JimCarver 0:6b753f761943 67 uint32_t initial = stats.current_size;
JimCarver 0:6b753f761943 68
JimCarver 0:6b753f761943 69 const int object_count = 1;
JimCarver 0:6b753f761943 70 const int object_id_range_start = 90;
JimCarver 0:6b753f761943 71 const int object_id_range_end = object_id_range_start + object_count;
JimCarver 0:6b753f761943 72
JimCarver 0:6b753f761943 73 const int object_instance_count = 5;
JimCarver 0:6b753f761943 74 const int resource_count = 5;
JimCarver 0:6b753f761943 75
JimCarver 0:6b753f761943 76 int total_object_count = 0;
JimCarver 0:6b753f761943 77 int total_object_instance_count = 0;
JimCarver 0:6b753f761943 78 int total_resource_count = 0;
JimCarver 0:6b753f761943 79
JimCarver 0:6b753f761943 80 for (int object_id = object_id_range_start; object_id < object_id_range_end; object_id++) {
JimCarver 0:6b753f761943 81
JimCarver 0:6b753f761943 82 char buff[64];
JimCarver 0:6b753f761943 83 sprintf(buff, "%d", object_id);
JimCarver 0:6b753f761943 84 M2MObject *obj = M2MInterfaceFactory::create_object(buff);
JimCarver 0:6b753f761943 85
JimCarver 0:6b753f761943 86 for (int object_instance_id = 0; object_instance_id < object_instance_count; object_instance_id++) {
JimCarver 0:6b753f761943 87
JimCarver 0:6b753f761943 88 M2MObjectInstance* obj_inst = obj->create_object_instance(object_instance_id);
JimCarver 0:6b753f761943 89
JimCarver 0:6b753f761943 90 assert(obj_inst != NULL);
JimCarver 0:6b753f761943 91 total_object_instance_count++;
JimCarver 0:6b753f761943 92 for (int resource_id = 0; resource_id < resource_count; resource_id++) {
JimCarver 0:6b753f761943 93 String res_name;
JimCarver 0:6b753f761943 94 String res_type;
JimCarver 0:6b753f761943 95
JimCarver 0:6b753f761943 96 res_name.append_int(resource_id);
JimCarver 0:6b753f761943 97 res_type.append_int(resource_id);
JimCarver 0:6b753f761943 98
JimCarver 0:6b753f761943 99 M2MResource* resource = obj_inst->create_dynamic_resource(res_name, res_type,
JimCarver 0:6b753f761943 100 M2MResourceInstance::INTEGER, true);
JimCarver 0:6b753f761943 101
JimCarver 0:6b753f761943 102 assert(resource != NULL);
JimCarver 0:6b753f761943 103
JimCarver 0:6b753f761943 104 resource->set_operation(M2MBase::GET_ALLOWED);
JimCarver 0:6b753f761943 105 resource->set_value(7);
JimCarver 0:6b753f761943 106
JimCarver 0:6b753f761943 107 total_resource_count++;
JimCarver 0:6b753f761943 108 }
JimCarver 0:6b753f761943 109 }
JimCarver 0:6b753f761943 110
JimCarver 0:6b753f761943 111 object_list.push_back(obj);
JimCarver 0:6b753f761943 112 total_object_count++;
JimCarver 0:6b753f761943 113 }
JimCarver 0:6b753f761943 114
JimCarver 0:6b753f761943 115 printf("objects : %d\n", total_object_count);
JimCarver 0:6b753f761943 116 printf("obj instances : %d\n", total_object_instance_count);
JimCarver 0:6b753f761943 117 printf("resources : %d\n", total_resource_count);
JimCarver 0:6b753f761943 118
JimCarver 0:6b753f761943 119 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 120 printf("heap used : %" PRIu32 "\n", stats.current_size - initial);
JimCarver 0:6b753f761943 121
JimCarver 0:6b753f761943 122 printf("*************************************\n");
JimCarver 0:6b753f761943 123 #endif // MBED_HEAP_STATS_ENABLED
JimCarver 0:6b753f761943 124 }
JimCarver 0:6b753f761943 125
JimCarver 0:6b753f761943 126 // Note: the mbed-os needs to be compiled with MBED_HEAP_STATS_ENABLED to get
JimCarver 0:6b753f761943 127 // functional heap stats, or the mbed_stats_heap_get() will return just zeroes.
JimCarver 0:6b753f761943 128 void m2mobject_stats()
JimCarver 0:6b753f761943 129 {
JimCarver 0:6b753f761943 130 #ifdef MBED_HEAP_STATS_ENABLED
JimCarver 0:6b753f761943 131 printf("\n*** M2M object sizes in bytes ***\n");
JimCarver 0:6b753f761943 132 printf("M2MBase: %" PRIu32 "\n", sizeof(M2MBase));
JimCarver 0:6b753f761943 133 printf("M2MObject: %" PRIu32 "\n", sizeof(M2MObject));
JimCarver 0:6b753f761943 134 printf("M2MObjectInstance: %" PRIu32 "\n", sizeof(M2MObjectInstance));
JimCarver 0:6b753f761943 135 printf("M2MResource: %" PRIu32 "\n", sizeof(M2MResource));
JimCarver 0:6b753f761943 136 printf("M2MResourceInstance: %" PRIu32 "\n", sizeof(M2MResourceInstance));
JimCarver 0:6b753f761943 137 printf("M2MDevice: %" PRIu32 "\n", sizeof(M2MDevice));
JimCarver 0:6b753f761943 138 printf("M2MFirmware: %" PRIu32 "\n", sizeof(M2MFirmware));
JimCarver 0:6b753f761943 139 printf("M2MServer: %" PRIu32 "\n", sizeof(M2MServer));
JimCarver 0:6b753f761943 140 printf("M2MSecurity: %" PRIu32 "\n", sizeof(M2MSecurity));
JimCarver 0:6b753f761943 141 printf("M2MBlockMessage: %" PRIu32 "\n", sizeof(M2MBlockMessage));
JimCarver 0:6b753f761943 142 printf("M2MReportHandler: %" PRIu32 "\n", sizeof(M2MReportHandler));
JimCarver 0:6b753f761943 143 printf("*************************************\n\n");
JimCarver 0:6b753f761943 144
JimCarver 0:6b753f761943 145 mbed_stats_heap_t stats;
JimCarver 0:6b753f761943 146 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 147
JimCarver 0:6b753f761943 148 printf("*** M2M heap stats in bytes***\n");
JimCarver 0:6b753f761943 149 uint32_t initial = stats.current_size;
JimCarver 0:6b753f761943 150
JimCarver 0:6b753f761943 151 // M2MDevice
JimCarver 0:6b753f761943 152 M2MDevice *device_object = M2MInterfaceFactory::create_device();
JimCarver 0:6b753f761943 153 assert(device_object);
JimCarver 0:6b753f761943 154 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 155 printf("M2MDevice heap size: %" PRIu32 "\n", stats.current_size - initial);
JimCarver 0:6b753f761943 156 M2MDevice::delete_instance();
JimCarver 0:6b753f761943 157 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 158 if (initial != stats.current_size) {
JimCarver 0:6b753f761943 159 printf("M2MDevice leaked: %" PRIu32 "bytes\n", stats.current_size - initial);
JimCarver 0:6b753f761943 160 }
JimCarver 0:6b753f761943 161
JimCarver 0:6b753f761943 162 // M2MServer
JimCarver 0:6b753f761943 163 initial = stats.current_size;
JimCarver 0:6b753f761943 164 M2MServer *server = M2MInterfaceFactory::create_server();
JimCarver 0:6b753f761943 165 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 166 printf("M2MServer heap size: %" PRIu32 "\n", stats.current_size - initial);
JimCarver 0:6b753f761943 167 delete server;
JimCarver 0:6b753f761943 168 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 169 if (initial != stats.current_size) {
JimCarver 0:6b753f761943 170 printf("M2MServer leaked: %" PRIu32 "bytes\n", stats.current_size - initial);
JimCarver 0:6b753f761943 171 }
JimCarver 0:6b753f761943 172
JimCarver 0:6b753f761943 173 // M2MSecurity
JimCarver 0:6b753f761943 174 initial = stats.current_size;
JimCarver 0:6b753f761943 175 M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
JimCarver 0:6b753f761943 176 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 177 printf("M2MSecurity heap size: %" PRIu32 "\n", stats.current_size - initial);
JimCarver 0:6b753f761943 178 M2MSecurity::delete_instance();
JimCarver 0:6b753f761943 179 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 180 if (initial != stats.current_size) {
JimCarver 0:6b753f761943 181 printf("M2MSecurity leaked: %" PRIu32 "bytes\n", stats.current_size - initial);
JimCarver 0:6b753f761943 182 }
JimCarver 0:6b753f761943 183
JimCarver 0:6b753f761943 184 // M2MFirmware
JimCarver 0:6b753f761943 185 initial = stats.current_size;
JimCarver 0:6b753f761943 186 M2MFirmware *firmware = M2MInterfaceFactory::create_firmware();
JimCarver 0:6b753f761943 187 assert(firmware);
JimCarver 0:6b753f761943 188 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 189 printf("M2MFirmware heap size: %" PRIu32 "\n", stats.current_size - initial);
JimCarver 0:6b753f761943 190 M2MFirmware::delete_instance();
JimCarver 0:6b753f761943 191 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 192 if (initial != stats.current_size) {
JimCarver 0:6b753f761943 193 printf("M2MFirmware leaked: %" PRIu32 "bytes\n", stats.current_size - initial);
JimCarver 0:6b753f761943 194 }
JimCarver 0:6b753f761943 195
JimCarver 0:6b753f761943 196 // Basic object creation
JimCarver 0:6b753f761943 197 initial = stats.current_size;
JimCarver 0:6b753f761943 198 uint32_t before_object = initial;
JimCarver 0:6b753f761943 199 M2MObject *obj = M2MInterfaceFactory::create_object("1");
JimCarver 0:6b753f761943 200 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 201 printf("M2MObject heap size: %" PRIu32 "\n", stats.current_size - initial);
JimCarver 0:6b753f761943 202 initial = stats.current_size;
JimCarver 0:6b753f761943 203
JimCarver 0:6b753f761943 204 M2MObjectInstance* obj_inst = obj->create_object_instance();
JimCarver 0:6b753f761943 205 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 206 printf("M2MObjectInstance heap size: %" PRIu32 "\n", stats.current_size - initial);
JimCarver 0:6b753f761943 207
JimCarver 0:6b753f761943 208 initial = stats.current_size;
JimCarver 0:6b753f761943 209 M2MResource* res = obj_inst->create_dynamic_resource("1", "1", M2MResourceInstance::STRING, false);
JimCarver 0:6b753f761943 210 assert(res);
JimCarver 0:6b753f761943 211 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 212 printf("M2MResource heap size: %" PRIu32 "\n", stats.current_size - initial);
JimCarver 0:6b753f761943 213
JimCarver 0:6b753f761943 214 delete obj;
JimCarver 0:6b753f761943 215 mbed_stats_heap_get(&stats);
JimCarver 0:6b753f761943 216 if (before_object != stats.current_size) {
JimCarver 0:6b753f761943 217 printf("Resource leaked: %" PRIu32 "bytes\n", stats.current_size - before_object);
JimCarver 0:6b753f761943 218 }
JimCarver 0:6b753f761943 219 printf("*************************************\n\n");
JimCarver 0:6b753f761943 220 #endif // MBED_HEAP_STATS_ENABLED
JimCarver 0:6b753f761943 221 }
JimCarver 0:6b753f761943 222 #endif // TARGET_LIKE_MBED