This program collects raw time series data from the ADC using the NXP board that will later be post processed by PFP Cyber-security cloud base machine learning engine to determine the state of the device.

Dependencies:   FXAS21002 FXOS8700Q

Committer:
vithyat
Date:
Wed Nov 20 18:58:49 2019 +0000
Revision:
1:0c589850480e
Parent:
0:977e87915078
Child:
2:990c985a69ae
Add support for run time on cloud.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vithyat 0:977e87915078 1 // ----------------------------------------------------------------------------
vithyat 0:977e87915078 2 // Copyright 2019 PFP Cybersecurity.
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 #ifndef MBED_TEST_MODE
vithyat 0:977e87915078 19
vithyat 0:977e87915078 20 #include "mbed.h"
vithyat 0:977e87915078 21
vithyat 0:977e87915078 22 // Default network interface object. Don't forget to change the WiFi SSID/password in mbed_app.json if you're using WiFi.
vithyat 0:977e87915078 23 NetworkInterface *net = NetworkInterface::get_default_instance();
vithyat 0:977e87915078 24
vithyat 0:977e87915078 25 AnalogIn ain(A1);
vithyat 0:977e87915078 26
vithyat 1:0c589850480e 27 ///////////////////////////////////////////////////////////////////////////////////////
vithyat 1:0c589850480e 28 ///
vithyat 1:0c589850480e 29 /// PFP Main code start
vithyat 1:0c589850480e 30 ///
vithyat 1:0c589850480e 31 //////////////////////////////////////////////////////////////////////////////////////
vithyat 0:977e87915078 32 uint8_t PFP_REGISTER_DIGITIZER = 87;
vithyat 1:0c589850480e 33 uint8_t PFP_CLK_FREQ = 11;
vithyat 0:977e87915078 34 uint8_t PFP_ADC_GET_RAW = 3;
vithyat 0:977e87915078 35 uint8_t PFP_ADC_INIT = 0;
vithyat 0:977e87915078 36 uint8_t PFP_TRIG_CONFIG = 26;
vithyat 1:0c589850480e 37 uint8_t PFP_TRIG_RECEIVED = 88;
vithyat 0:977e87915078 38
vithyat 0:977e87915078 39 struct DeviceData {
vithyat 0:977e87915078 40 int channel;
vithyat 0:977e87915078 41
vithyat 0:977e87915078 42 int numberOfTraces;
vithyat 0:977e87915078 43 int traceLength;
vithyat 0:977e87915078 44
vithyat 0:977e87915078 45 int sampleRate;
vithyat 0:977e87915078 46 int digitizer;
vithyat 0:977e87915078 47
vithyat 0:977e87915078 48 int trigMode;
vithyat 0:977e87915078 49 int trigSource;
vithyat 0:977e87915078 50
vithyat 0:977e87915078 51 float trigLevel;
vithyat 0:977e87915078 52 float trigHyst;
vithyat 0:977e87915078 53
vithyat 0:977e87915078 54 int trigPercentage;
vithyat 0:977e87915078 55 int gain;
vithyat 0:977e87915078 56 };
vithyat 0:977e87915078 57
vithyat 0:977e87915078 58 struct DeviceData deviceData;
vithyat 0:977e87915078 59
vithyat 0:977e87915078 60 int bytesToInt(int8_t b0, int8_t b1, int8_t b2, int8_t b3)
vithyat 0:977e87915078 61 {
vithyat 0:977e87915078 62 int value = (b3 << 24) & 0xff000000
vithyat 0:977e87915078 63 | (b2 << 16) & 0x00ff0000
vithyat 0:977e87915078 64 | (b1 << 8) & 0x0000ff00
vithyat 0:977e87915078 65 | (b0 << 0) & 0x000000ff;
vithyat 0:977e87915078 66 return value;
vithyat 0:977e87915078 67 }
vithyat 0:977e87915078 68
vithyat 0:977e87915078 69 float bytesToFloat(int8_t b0, int8_t b1, int8_t b2, int8_t b3)
vithyat 0:977e87915078 70 {
vithyat 0:977e87915078 71
vithyat 0:977e87915078 72 float val = 0;
vithyat 0:977e87915078 73 unsigned long result = 0;
vithyat 0:977e87915078 74 result |= ((unsigned long) (b0) << 0x18);
vithyat 0:977e87915078 75 result |= ((unsigned long) (b1) << 0x10);
vithyat 0:977e87915078 76 result |= ((unsigned long) (b2) << 0x08);
vithyat 0:977e87915078 77 result |= ((unsigned long) (b3));
vithyat 0:977e87915078 78 memcpy(&val, &result, 4);
vithyat 0:977e87915078 79
vithyat 0:977e87915078 80 return val;
vithyat 0:977e87915078 81 }
vithyat 0:977e87915078 82
vithyat 0:977e87915078 83 int8_t * intToBytes(int value)
vithyat 0:977e87915078 84 {
vithyat 1:0c589850480e 85 int8_t *b = (int8_t*) calloc(4, sizeof(int8_t));
vithyat 1:0c589850480e 86
vithyat 0:977e87915078 87 b[0] = ((int8_t) (value >> 0));
vithyat 0:977e87915078 88 b[1] = ((int8_t) (value >> 8));
vithyat 0:977e87915078 89 b[2] = ((int8_t) (value >> 16));
vithyat 0:977e87915078 90 b[3] = ((int8_t) (value >> 24));
vithyat 0:977e87915078 91 return b;
vithyat 0:977e87915078 92 }
vithyat 0:977e87915078 93
vithyat 0:977e87915078 94 int8_t * longToBytes(long value)
vithyat 0:977e87915078 95 {
vithyat 0:977e87915078 96 static int8_t b[8];
vithyat 0:977e87915078 97 b[0] = (int8_t) ((value >> 0) & 0xFF);
vithyat 0:977e87915078 98 b[1] = (int8_t) ((value >> 8) & 0xFF);
vithyat 0:977e87915078 99 b[2] = (int8_t) ((value >> 16) & 0xFF);
vithyat 0:977e87915078 100 b[3] = (int8_t) ((value >> 24) & 0xFF);
vithyat 0:977e87915078 101 b[4] = (int8_t) ((value >> 32) & 0xFF);
vithyat 0:977e87915078 102 b[5] = (int8_t) ((value >> 40) & 0xFF);
vithyat 0:977e87915078 103 b[6] = (int8_t) ((value >> 48) & 0xFF);
vithyat 0:977e87915078 104 b[7] = (int8_t) ((value >> 56) & 0xFF);
vithyat 0:977e87915078 105 return b;
vithyat 0:977e87915078 106 }
vithyat 0:977e87915078 107
vithyat 1:0c589850480e 108 int8_t * pfp_emon_create_ack_for_client(int commandType, int numberOfBytes)
vithyat 0:977e87915078 109 {
vithyat 1:0c589850480e 110 static int8_t b[64];
vithyat 0:977e87915078 111
vithyat 1:0c589850480e 112 int8_t *totalBytes = intToBytes(numberOfBytes);
vithyat 0:977e87915078 113 int8_t *successBytes = intToBytes(3);
vithyat 0:977e87915078 114 int8_t *returnBytes = intToBytes(commandType);
vithyat 1:0c589850480e 115 int8_t *totaTrace = intToBytes(numberOfBytes / 2);
vithyat 0:977e87915078 116
vithyat 0:977e87915078 117 // EMON HEADER
vithyat 0:977e87915078 118 b[0] = 69;
vithyat 0:977e87915078 119 b[1] = 77;
vithyat 0:977e87915078 120 b[2] = 79;
vithyat 0:977e87915078 121 b[3] = 78;
vithyat 0:977e87915078 122
vithyat 0:977e87915078 123 // NUMBER OF BYTES
vithyat 0:977e87915078 124 b[4] = totalBytes[0];
vithyat 0:977e87915078 125 b[5] = totalBytes[1];
vithyat 0:977e87915078 126 b[6] = totalBytes[2];
vithyat 0:977e87915078 127 b[7] = totalBytes[3];
vithyat 1:0c589850480e 128
vithyat 1:0c589850480e 129 // ERROR
vithyat 1:0c589850480e 130 b[8] = 0;
vithyat 1:0c589850480e 131 b[9] = 0;
vithyat 1:0c589850480e 132 b[10] = 0;
vithyat 1:0c589850480e 133 b[11] = 0;
vithyat 0:977e87915078 134
vithyat 0:977e87915078 135 // SKIP BYTES
vithyat 0:977e87915078 136 b[12] = 0;
vithyat 0:977e87915078 137 b[13] = 0;
vithyat 0:977e87915078 138 b[14] = 0;
vithyat 0:977e87915078 139 b[15] = 0;
vithyat 0:977e87915078 140
vithyat 0:977e87915078 141 // SUCCESS COMMAND
vithyat 0:977e87915078 142 b[16] = successBytes[0];
vithyat 0:977e87915078 143 b[17] = successBytes[1];
vithyat 0:977e87915078 144 b[18] = successBytes[2];
vithyat 0:977e87915078 145 b[19] = successBytes[3];
vithyat 0:977e87915078 146
vithyat 0:977e87915078 147 // RETURN COMMAND
vithyat 0:977e87915078 148 b[20] = returnBytes[0];
vithyat 0:977e87915078 149 b[21] = returnBytes[1];
vithyat 0:977e87915078 150 b[22] = returnBytes[2];
vithyat 0:977e87915078 151 b[23] = returnBytes[3];
vithyat 0:977e87915078 152
vithyat 1:0c589850480e 153 // SKIP BYTES
vithyat 1:0c589850480e 154 b[24] = 0;
vithyat 1:0c589850480e 155 b[25] = 0;
vithyat 1:0c589850480e 156 b[26] = 0;
vithyat 1:0c589850480e 157 b[27] = 0;
vithyat 1:0c589850480e 158
vithyat 1:0c589850480e 159 // TOTAL TRACE
vithyat 1:0c589850480e 160 b[28] = totaTrace[0];
vithyat 1:0c589850480e 161 b[29] = totaTrace[1];
vithyat 1:0c589850480e 162 b[30] = totaTrace[2];
vithyat 1:0c589850480e 163 b[31] = totaTrace[3];
vithyat 1:0c589850480e 164
vithyat 1:0c589850480e 165
vithyat 1:0c589850480e 166 free(totalBytes);
vithyat 1:0c589850480e 167 free(successBytes);
vithyat 1:0c589850480e 168 free(returnBytes);
vithyat 1:0c589850480e 169 free(totaTrace);
vithyat 1:0c589850480e 170
vithyat 1:0c589850480e 171
vithyat 0:977e87915078 172 return b;
vithyat 0:977e87915078 173 }
vithyat 0:977e87915078 174
vithyat 0:977e87915078 175
vithyat 0:977e87915078 176 void startEmonThread(void const *args)
vithyat 0:977e87915078 177 {
vithyat 0:977e87915078 178
vithyat 0:977e87915078 179 printf("The target IP address is '%s'\r\n", net->get_ip_address());
vithyat 0:977e87915078 180
vithyat 0:977e87915078 181 TCPServer srv;
vithyat 0:977e87915078 182 TCPSocket clt_sock;
vithyat 0:977e87915078 183 SocketAddress clt_addr;
vithyat 0:977e87915078 184
vithyat 0:977e87915078 185 /* Open the server on ethernet stack */
vithyat 0:977e87915078 186 srv.open(net);
vithyat 0:977e87915078 187
vithyat 0:977e87915078 188 /* Bind the HTTP port (TCP 80) to the server */
vithyat 0:977e87915078 189 srv.bind(net->get_ip_address(), 7001);
vithyat 0:977e87915078 190
vithyat 0:977e87915078 191 long traceTrack = 0;
vithyat 0:977e87915078 192
vithyat 0:977e87915078 193
vithyat 0:977e87915078 194 //srv.set_blocking(false);
vithyat 0:977e87915078 195 while (true) {
vithyat 0:977e87915078 196 /* Can handle 5 simultaneous connections */
vithyat 0:977e87915078 197 int err= srv.listen(1);
vithyat 0:977e87915078 198 printf("server listening error : %d\r\n",err);
vithyat 0:977e87915078 199
vithyat 0:977e87915078 200 while(1) {
vithyat 0:977e87915078 201
vithyat 0:977e87915078 202 printf("waiting for client connection\r\n");
vithyat 0:977e87915078 203 err = srv.accept(&clt_sock, &clt_addr);
vithyat 0:977e87915078 204 if(err == 0) {
vithyat 0:977e87915078 205 printf("client connected :%s:%d\r\n", clt_addr.get_ip_address(), clt_addr.get_port());
vithyat 0:977e87915078 206 int MAX_LEN = 80;
vithyat 0:977e87915078 207 int8_t bytes[MAX_LEN];
vithyat 0:977e87915078 208 int32_t rawDataLen = 2048;
vithyat 0:977e87915078 209 int16_t *rawData = (int16_t*)calloc(rawDataLen, sizeof(int16_t));
vithyat 0:977e87915078 210 int16_t MAX_TRANSMIT_DATA = 500;
vithyat 0:977e87915078 211 int16_t data[MAX_TRANSMIT_DATA];
vithyat 0:977e87915078 212 traceTrack = 0;
vithyat 0:977e87915078 213 while(1) {
vithyat 0:977e87915078 214
vithyat 0:977e87915078 215 ////////////////
vithyat 0:977e87915078 216 // int len = read(sockfd, bytes, sizeof(bytes));
vithyat 0:977e87915078 217 int len = clt_sock.recv(bytes, MAX_LEN);
vithyat 0:977e87915078 218
vithyat 0:977e87915078 219 if (len < 1) {
vithyat 0:977e87915078 220 printf("Connection is closed....\n");
vithyat 0:977e87915078 221 break;
vithyat 0:977e87915078 222 }
vithyat 0:977e87915078 223
vithyat 0:977e87915078 224 int commandType = 0;
vithyat 0:977e87915078 225 int commandLength = 0;
vithyat 0:977e87915078 226
vithyat 0:977e87915078 227 int8_t *sendBytes = NULL;
vithyat 0:977e87915078 228
vithyat 0:977e87915078 229 if (len < 0) {
vithyat 0:977e87915078 230 return;
vithyat 0:977e87915078 231 }
vithyat 0:977e87915078 232 if (len == 8) {
vithyat 0:977e87915078 233 commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]);
vithyat 0:977e87915078 234 } else if (len == 12) {
vithyat 0:977e87915078 235 commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]);
vithyat 0:977e87915078 236 commandLength = bytesToInt(bytes[4], bytes[5], bytes[6], bytes[7]);
vithyat 0:977e87915078 237 if (commandType == PFP_REGISTER_DIGITIZER) {
vithyat 0:977e87915078 238
vithyat 0:977e87915078 239 deviceData.digitizer = bytesToInt(bytes[8], bytes[9], bytes[10],
vithyat 0:977e87915078 240 bytes[11]);
vithyat 0:977e87915078 241
vithyat 0:977e87915078 242 } else if (commandType == PFP_CLK_FREQ) {
vithyat 0:977e87915078 243 deviceData.sampleRate = bytesToInt(bytes[8], bytes[9],
vithyat 0:977e87915078 244 bytes[10], bytes[11]);
vithyat 0:977e87915078 245 } else if (commandType == PFP_ADC_GET_RAW) {
vithyat 0:977e87915078 246 deviceData.channel = bytesToInt(bytes[8], bytes[9], bytes[10],
vithyat 0:977e87915078 247 bytes[11]);
vithyat 0:977e87915078 248 }
vithyat 0:977e87915078 249
vithyat 1:0c589850480e 250 } else {
vithyat 0:977e87915078 251 commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]);
vithyat 0:977e87915078 252 commandLength = bytesToInt(bytes[4], bytes[5], bytes[6], bytes[7]);
vithyat 0:977e87915078 253 }
vithyat 0:977e87915078 254
vithyat 0:977e87915078 255 // Got command form client. Send back header
vithyat 0:977e87915078 256 if (commandType == PFP_ADC_INIT) {
vithyat 0:977e87915078 257 sendBytes = pfp_emon_create_ack_for_client(commandType, 0);
vithyat 1:0c589850480e 258
vithyat 1:0c589850480e 259 if (sendBytes != NULL) {
vithyat 1:0c589850480e 260 clt_sock.send(sendBytes,64);
vithyat 1:0c589850480e 261 wait(0.05);
vithyat 1:0c589850480e 262 }
vithyat 0:977e87915078 263 } else if (commandType == PFP_REGISTER_DIGITIZER) {
vithyat 0:977e87915078 264 sendBytes = pfp_emon_create_ack_for_client(commandType, 0);
vithyat 1:0c589850480e 265
vithyat 1:0c589850480e 266 if (sendBytes != NULL) {
vithyat 1:0c589850480e 267 clt_sock.send(sendBytes,64);
vithyat 1:0c589850480e 268 wait(0.05);
vithyat 1:0c589850480e 269 }
vithyat 0:977e87915078 270 } else if (commandType == PFP_TRIG_CONFIG) {
vithyat 1:0c589850480e 271
vithyat 1:0c589850480e 272 if ((commandLength > 12) && (commandLength < 1000)) {
vithyat 1:0c589850480e 273 deviceData.channel = bytesToInt(bytes[8], bytes[9], bytes[10],
vithyat 1:0c589850480e 274 bytes[11]);
vithyat 1:0c589850480e 275 deviceData.traceLength = bytesToInt(bytes[12], bytes[13],
vithyat 1:0c589850480e 276 bytes[14], bytes[15]);
vithyat 1:0c589850480e 277
vithyat 1:0c589850480e 278 deviceData.trigMode = bytesToInt(bytes[16], bytes[17],
vithyat 1:0c589850480e 279 bytes[18], bytes[19]);
vithyat 1:0c589850480e 280 deviceData.trigSource = bytesToInt(bytes[20], bytes[21],
vithyat 1:0c589850480e 281 bytes[22], bytes[23]);
vithyat 1:0c589850480e 282
vithyat 1:0c589850480e 283 deviceData.trigLevel = bytesToFloat(bytes[24], bytes[25],
vithyat 1:0c589850480e 284 bytes[26], bytes[27]);
vithyat 1:0c589850480e 285 deviceData.trigHyst = bytesToFloat(bytes[28], bytes[29],
vithyat 1:0c589850480e 286 bytes[30], bytes[31]);
vithyat 1:0c589850480e 287
vithyat 1:0c589850480e 288 deviceData.trigPercentage = bytesToInt(bytes[32], bytes[33],
vithyat 1:0c589850480e 289 bytes[34], bytes[35]);
vithyat 1:0c589850480e 290 deviceData.gain = bytesToInt(bytes[36], bytes[37], bytes[38],
vithyat 1:0c589850480e 291 bytes[39]);
vithyat 1:0c589850480e 292
vithyat 1:0c589850480e 293 printf("trigSource is %i\n", deviceData.trigSource);
vithyat 1:0c589850480e 294 printf("channel is %i\n", deviceData.channel);
vithyat 1:0c589850480e 295 printf("trigLevel is %f\n", deviceData.trigLevel);
vithyat 1:0c589850480e 296 printf("traceLength is %i\n", deviceData.traceLength);
vithyat 1:0c589850480e 297 printf("sample rate is %i\n", deviceData.sampleRate);
vithyat 1:0c589850480e 298 printf("trigHyst is %i\n", deviceData.trigHyst);
vithyat 1:0c589850480e 299
vithyat 1:0c589850480e 300 printf("trigPercentage is %i\n", deviceData.trigPercentage);
vithyat 1:0c589850480e 301 printf("gain is %i\n", deviceData.gain);
vithyat 1:0c589850480e 302
vithyat 1:0c589850480e 303 sendBytes = pfp_emon_create_ack_for_client(commandType,
vithyat 1:0c589850480e 304 deviceData.traceLength * 2);
vithyat 1:0c589850480e 305
vithyat 1:0c589850480e 306 if (sendBytes != NULL) {
vithyat 1:0c589850480e 307 clt_sock.send(sendBytes,64);
vithyat 1:0c589850480e 308 wait(0.05);
vithyat 1:0c589850480e 309 }
vithyat 1:0c589850480e 310 }
vithyat 1:0c589850480e 311
vithyat 1:0c589850480e 312
vithyat 0:977e87915078 313 } else if (commandType == PFP_CLK_FREQ) {
vithyat 0:977e87915078 314 sendBytes = pfp_emon_create_ack_for_client(commandType, 0);
vithyat 1:0c589850480e 315 if (sendBytes != NULL) {
vithyat 1:0c589850480e 316 clt_sock.send(sendBytes,64);
vithyat 1:0c589850480e 317 wait(0.05);
vithyat 1:0c589850480e 318 }
vithyat 0:977e87915078 319 } else if (commandType == PFP_ADC_GET_RAW) {
vithyat 1:0c589850480e 320
vithyat 1:0c589850480e 321 sendBytes = pfp_emon_create_ack_for_client(PFP_TRIG_RECEIVED,
vithyat 1:0c589850480e 322 deviceData.traceLength * 2);
vithyat 1:0c589850480e 323
vithyat 1:0c589850480e 324 if (sendBytes != NULL) {
vithyat 1:0c589850480e 325 clt_sock.send(sendBytes,64);
vithyat 1:0c589850480e 326 wait(0.05);
vithyat 1:0c589850480e 327 }
vithyat 1:0c589850480e 328
vithyat 1:0c589850480e 329 wait(0.05);
vithyat 1:0c589850480e 330
vithyat 0:977e87915078 331 sendBytes = pfp_emon_create_ack_for_client(commandType,
vithyat 0:977e87915078 332 deviceData.traceLength * 2);
vithyat 1:0c589850480e 333 if (sendBytes != NULL) {
vithyat 1:0c589850480e 334 clt_sock.send(sendBytes,64);
vithyat 1:0c589850480e 335 wait(0.05);
vithyat 1:0c589850480e 336 }
vithyat 0:977e87915078 337
vithyat 0:977e87915078 338 wait(0.05);
vithyat 0:977e87915078 339
vithyat 0:977e87915078 340 if (deviceData.traceLength != rawDataLen) {
vithyat 0:977e87915078 341 printf("Data size change to %i===============>\n",rawDataLen);
vithyat 0:977e87915078 342 free(rawData);
vithyat 0:977e87915078 343 rawDataLen = deviceData.traceLength;
vithyat 0:977e87915078 344 rawData = (int16_t*)calloc(rawDataLen, sizeof(int16_t));
vithyat 0:977e87915078 345 }
vithyat 0:977e87915078 346
vithyat 0:977e87915078 347 // Store raw data
vithyat 0:977e87915078 348 printf("Populate sensor data to %i===============>\n",rawDataLen);
vithyat 1:0c589850480e 349 // for (int i = 0; i < rawDataLen; i++) {
vithyat 1:0c589850480e 350 // rawData[i] = ain.read_u16();
vithyat 1:0c589850480e 351 // }
vithyat 1:0c589850480e 352
vithyat 1:0c589850480e 353 float max = -32768;
vithyat 1:0c589850480e 354 uint16_t val=0;
vithyat 1:0c589850480e 355
vithyat 1:0c589850480e 356 // find max
vithyat 0:977e87915078 357 for (int i = 0; i < rawDataLen; i++) {
vithyat 1:0c589850480e 358 val = (ain.read_u16()-32768);
vithyat 1:0c589850480e 359 rawData[i] =val;
vithyat 1:0c589850480e 360 if(val>max){
vithyat 1:0c589850480e 361 max = val;
vithyat 1:0c589850480e 362 }
vithyat 0:977e87915078 363 }
vithyat 1:0c589850480e 364
vithyat 1:0c589850480e 365 float scaling = 32762/abs(max);
vithyat 1:0c589850480e 366 printf("scaling value %f===============>\n",scaling);
vithyat 1:0c589850480e 367 for (int i = 0; i < rawDataLen; i++) {
vithyat 1:0c589850480e 368 rawData[i] =(int16_t)(rawData[i]*scaling);
vithyat 1:0c589850480e 369 }
vithyat 1:0c589850480e 370
vithyat 1:0c589850480e 371
vithyat 1:0c589850480e 372 ///////////////////////////////////////////////////////////
vithyat 1:0c589850480e 373
vithyat 1:0c589850480e 374
vithyat 0:977e87915078 375
vithyat 0:977e87915078 376 int num = rawDataLen/MAX_TRANSMIT_DATA;
vithyat 0:977e87915078 377 int startIndex = 0;
vithyat 0:977e87915078 378 for(int k =0; k<num; k++) {
vithyat 0:977e87915078 379 startIndex = k*MAX_TRANSMIT_DATA;
vithyat 0:977e87915078 380 for(int i=0; i<MAX_TRANSMIT_DATA; i++) {
vithyat 0:977e87915078 381 data[i] = rawData[i + startIndex];
vithyat 0:977e87915078 382 }
vithyat 0:977e87915078 383 clt_sock.send(data,MAX_TRANSMIT_DATA*sizeof(int16_t));
vithyat 0:977e87915078 384 //printf("Sending batch %i of %i\n",k,num);
vithyat 0:977e87915078 385 wait(0.04);
vithyat 0:977e87915078 386 }
vithyat 0:977e87915078 387
vithyat 0:977e87915078 388 int leftOver = rawDataLen - num*MAX_TRANSMIT_DATA;
vithyat 0:977e87915078 389 //printf("LeftOver is %i\n",leftOver);
vithyat 0:977e87915078 390
vithyat 0:977e87915078 391 if(leftOver>0) {
vithyat 0:977e87915078 392 startIndex = num*MAX_TRANSMIT_DATA;
vithyat 0:977e87915078 393
vithyat 0:977e87915078 394 for(int j=startIndex; j<rawDataLen; j++) {
vithyat 0:977e87915078 395 int i = j-startIndex;
vithyat 0:977e87915078 396 data[i] = rawData[j];
vithyat 0:977e87915078 397 }
vithyat 0:977e87915078 398 clt_sock.send(data,leftOver * sizeof(int16_t));
vithyat 0:977e87915078 399 //printf("Sending left over bytes %i\n",leftOver);
vithyat 0:977e87915078 400 wait(0.04);
vithyat 0:977e87915078 401 }
vithyat 0:977e87915078 402 traceTrack++;
vithyat 1:0c589850480e 403 if(traceTrack>100000000) {
vithyat 0:977e87915078 404 traceTrack = 0;
vithyat 0:977e87915078 405 }
vithyat 0:977e87915078 406 printf("<================== Trace Count is %ld ===============>\n",traceTrack);
vithyat 0:977e87915078 407 }
vithyat 0:977e87915078 408 }
vithyat 0:977e87915078 409
vithyat 0:977e87915078 410 free(rawData);
vithyat 0:977e87915078 411 }
vithyat 0:977e87915078 412 }
vithyat 0:977e87915078 413 }
vithyat 0:977e87915078 414 }
vithyat 1:0c589850480e 415
vithyat 1:0c589850480e 416 ///////////////////////////////////////////////////////////////////////////////////////
vithyat 1:0c589850480e 417 ///
vithyat 1:0c589850480e 418 /// PFP Main code end
vithyat 1:0c589850480e 419 ///
vithyat 1:0c589850480e 420 //////////////////////////////////////////////////////////////////////////////////////
vithyat 0:977e87915078 421
vithyat 0:977e87915078 422 int main(void)
vithyat 0:977e87915078 423 {
vithyat 0:977e87915078 424 printf("Connecting to the network using the default network interface...\n");
vithyat 0:977e87915078 425 net = NetworkInterface::get_default_instance();
vithyat 0:977e87915078 426
vithyat 0:977e87915078 427 nsapi_error_t net_status = NSAPI_ERROR_NO_CONNECTION;
vithyat 0:977e87915078 428 while ((net_status = net->connect()) != NSAPI_ERROR_OK) {
vithyat 0:977e87915078 429 printf("Unable to connect to network (%d). Retrying...\n", net_status);
vithyat 0:977e87915078 430 }
vithyat 0:977e87915078 431
vithyat 0:977e87915078 432 Thread thread(startEmonThread);
vithyat 0:977e87915078 433
vithyat 0:977e87915078 434 while (true) {
vithyat 0:977e87915078 435 wait(0.5);
vithyat 0:977e87915078 436 }
vithyat 0:977e87915078 437 }
vithyat 0:977e87915078 438
vithyat 0:977e87915078 439 #endif /* MBED_TEST_MODE */