Pfp Cybersecurity (Aka Power Fingerprinting, Inc.) / Mbed OS pfp-emon-nxp

Dependencies:   FXAS21002 FXOS8700Q

Committer:
vithyat
Date:
Fri Mar 20 20:15:18 2020 +0000
Revision:
2:990c985a69ae
Parent:
0:977e87915078
Update to work with P2Scan runtime

Who changed what in which revision?

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