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:
Fri Mar 20 20:15:18 2020 +0000
Revision:
2:990c985a69ae
Parent:
1:0c589850480e
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 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 2:990c985a69ae 25 AnalogIn ain(A0);
vithyat 0:977e87915078 26
vithyat 1:0c589850480e 27 ///////////////////////////////////////////////////////////////////////////////////////
vithyat 1:0c589850480e 28 ///
vithyat 2:990c985a69ae 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 2:990c985a69ae 192 float sleepCore = 0.001;
vithyat 0:977e87915078 193
vithyat 0:977e87915078 194
vithyat 0:977e87915078 195 //srv.set_blocking(false);
vithyat 0:977e87915078 196 while (true) {
vithyat 0:977e87915078 197 /* Can handle 5 simultaneous connections */
vithyat 0:977e87915078 198 int err= srv.listen(1);
vithyat 0:977e87915078 199 printf("server listening error : %d\r\n",err);
vithyat 0:977e87915078 200
vithyat 0:977e87915078 201 while(1) {
vithyat 0:977e87915078 202
vithyat 0:977e87915078 203 printf("waiting for client connection\r\n");
vithyat 0:977e87915078 204 err = srv.accept(&clt_sock, &clt_addr);
vithyat 0:977e87915078 205 if(err == 0) {
vithyat 0:977e87915078 206 printf("client connected :%s:%d\r\n", clt_addr.get_ip_address(), clt_addr.get_port());
vithyat 0:977e87915078 207 int MAX_LEN = 80;
vithyat 0:977e87915078 208 int8_t bytes[MAX_LEN];
vithyat 0:977e87915078 209 int32_t rawDataLen = 2048;
vithyat 0:977e87915078 210 int16_t *rawData = (int16_t*)calloc(rawDataLen, sizeof(int16_t));
vithyat 0:977e87915078 211 int16_t MAX_TRANSMIT_DATA = 500;
vithyat 0:977e87915078 212 int16_t data[MAX_TRANSMIT_DATA];
vithyat 0:977e87915078 213 traceTrack = 0;
vithyat 2:990c985a69ae 214
vithyat 2:990c985a69ae 215 bool debug = false;
vithyat 2:990c985a69ae 216
vithyat 0:977e87915078 217 while(1) {
vithyat 0:977e87915078 218
vithyat 0:977e87915078 219 ////////////////
vithyat 0:977e87915078 220 int len = clt_sock.recv(bytes, MAX_LEN);
vithyat 2:990c985a69ae 221 if(debug) {
vithyat 2:990c985a69ae 222 printf("====================> len = %i <======================\n",len);
vithyat 2:990c985a69ae 223 }
vithyat 0:977e87915078 224
vithyat 0:977e87915078 225 if (len < 1) {
vithyat 0:977e87915078 226 printf("Connection is closed....\n");
vithyat 0:977e87915078 227 break;
vithyat 0:977e87915078 228 }
vithyat 0:977e87915078 229
vithyat 0:977e87915078 230 int commandType = 0;
vithyat 0:977e87915078 231 int commandLength = 0;
vithyat 2:990c985a69ae 232 int indexOffset = 0;
vithyat 0:977e87915078 233
vithyat 0:977e87915078 234 int8_t *sendBytes = NULL;
vithyat 0:977e87915078 235
vithyat 0:977e87915078 236 if (len < 0) {
vithyat 0:977e87915078 237 return;
vithyat 0:977e87915078 238 }
vithyat 0:977e87915078 239 if (len == 8) {
vithyat 0:977e87915078 240 commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]);
vithyat 0:977e87915078 241 } else if (len == 12) {
vithyat 0:977e87915078 242 commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]);
vithyat 0:977e87915078 243 commandLength = bytesToInt(bytes[4], bytes[5], bytes[6], bytes[7]);
vithyat 0:977e87915078 244 if (commandType == PFP_REGISTER_DIGITIZER) {
vithyat 0:977e87915078 245
vithyat 0:977e87915078 246 deviceData.digitizer = bytesToInt(bytes[8], bytes[9], bytes[10],
vithyat 0:977e87915078 247 bytes[11]);
vithyat 0:977e87915078 248
vithyat 2:990c985a69ae 249 // send_PFP_REGISTER_DIGITIZER(clt_sock);
vithyat 2:990c985a69ae 250
vithyat 0:977e87915078 251 } else if (commandType == PFP_CLK_FREQ) {
vithyat 0:977e87915078 252 deviceData.sampleRate = bytesToInt(bytes[8], bytes[9],
vithyat 0:977e87915078 253 bytes[10], bytes[11]);
vithyat 2:990c985a69ae 254 // send_PFP_CLK_FREQ(clt_sock);
vithyat 0:977e87915078 255 } else if (commandType == PFP_ADC_GET_RAW) {
vithyat 0:977e87915078 256 deviceData.channel = bytesToInt(bytes[8], bytes[9], bytes[10],
vithyat 0:977e87915078 257 bytes[11]);
vithyat 0:977e87915078 258 }
vithyat 2:990c985a69ae 259 if(debug) {
vithyat 2:990c985a69ae 260 printf("====================> len 12 commandType= %i <======================\n",commandType);
vithyat 2:990c985a69ae 261 printf("====================> len 12 commandLength= %i <======================\n",commandLength);
vithyat 2:990c985a69ae 262 }
vithyat 0:977e87915078 263
vithyat 1:0c589850480e 264 } else {
vithyat 0:977e87915078 265 commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]);
vithyat 0:977e87915078 266 commandLength = bytesToInt(bytes[4], bytes[5], bytes[6], bytes[7]);
vithyat 2:990c985a69ae 267 if (commandLength == 8) {
vithyat 2:990c985a69ae 268 if ((len == 60) || (len == 72)) {
vithyat 2:990c985a69ae 269 commandType =bytesToInt(bytes[8], bytes[9], bytes[10], bytes[11]);
vithyat 2:990c985a69ae 270 commandLength = bytesToInt(bytes[12], bytes[13], bytes[14], bytes[15]);
vithyat 2:990c985a69ae 271 indexOffset = 8;
vithyat 2:990c985a69ae 272 if(debug) {
vithyat 2:990c985a69ae 273 printf("====================> inside commandType= %i <======================\n",commandType);
vithyat 2:990c985a69ae 274 printf("====================> inside commandLength= %i <======================\n",commandLength);
vithyat 2:990c985a69ae 275 }
vithyat 2:990c985a69ae 276 }
vithyat 2:990c985a69ae 277 } else {
vithyat 2:990c985a69ae 278 if(debug) {
vithyat 2:990c985a69ae 279 printf("====================> outside commandType= %i <======================\n",commandType);
vithyat 2:990c985a69ae 280 printf("====================> outside commandLength= %i <======================\n",commandLength);
vithyat 2:990c985a69ae 281 }
vithyat 2:990c985a69ae 282 }
vithyat 0:977e87915078 283 }
vithyat 0:977e87915078 284
vithyat 0:977e87915078 285 // Got command form client. Send back header
vithyat 0:977e87915078 286 if (commandType == PFP_ADC_INIT) {
vithyat 0:977e87915078 287 sendBytes = pfp_emon_create_ack_for_client(commandType, 0);
vithyat 1:0c589850480e 288
vithyat 1:0c589850480e 289 if (sendBytes != NULL) {
vithyat 1:0c589850480e 290 clt_sock.send(sendBytes,64);
vithyat 2:990c985a69ae 291 wait(sleepCore);
vithyat 1:0c589850480e 292 }
vithyat 2:990c985a69ae 293 }
vithyat 2:990c985a69ae 294
vithyat 2:990c985a69ae 295 if (commandType == PFP_REGISTER_DIGITIZER) {
vithyat 0:977e87915078 296 sendBytes = pfp_emon_create_ack_for_client(commandType, 0);
vithyat 1:0c589850480e 297
vithyat 1:0c589850480e 298 if (sendBytes != NULL) {
vithyat 1:0c589850480e 299 clt_sock.send(sendBytes,64);
vithyat 2:990c985a69ae 300 wait(sleepCore);
vithyat 1:0c589850480e 301 }
vithyat 2:990c985a69ae 302 }
vithyat 2:990c985a69ae 303 if (commandType == PFP_TRIG_CONFIG) {
vithyat 1:0c589850480e 304
vithyat 1:0c589850480e 305 if ((commandLength > 12) && (commandLength < 1000)) {
vithyat 2:990c985a69ae 306
vithyat 2:990c985a69ae 307 deviceData.channel = bytesToInt(bytes[indexOffset+8], bytes[indexOffset+9], bytes[indexOffset+10],
vithyat 2:990c985a69ae 308 bytes[indexOffset+11]);
vithyat 2:990c985a69ae 309 deviceData.traceLength = bytesToInt(bytes[indexOffset+12], bytes[indexOffset+13],
vithyat 2:990c985a69ae 310 bytes[indexOffset+14], bytes[indexOffset+15]);
vithyat 1:0c589850480e 311
vithyat 2:990c985a69ae 312 deviceData.trigMode = bytesToInt(bytes[indexOffset+16], bytes[indexOffset+17],
vithyat 2:990c985a69ae 313 bytes[indexOffset+18], bytes[indexOffset+19]);
vithyat 2:990c985a69ae 314 deviceData.trigSource = bytesToInt(bytes[indexOffset+20], bytes[indexOffset+21],
vithyat 2:990c985a69ae 315 bytes[indexOffset+22], bytes[indexOffset+23]);
vithyat 1:0c589850480e 316
vithyat 2:990c985a69ae 317 deviceData.trigLevel = bytesToFloat(bytes[indexOffset+24], bytes[indexOffset+25],
vithyat 2:990c985a69ae 318 bytes[indexOffset+26], bytes[indexOffset+27]);
vithyat 2:990c985a69ae 319 deviceData.trigHyst = bytesToFloat(bytes[indexOffset+28], bytes[indexOffset+29],
vithyat 2:990c985a69ae 320 bytes[indexOffset+30], bytes[indexOffset+31]);
vithyat 1:0c589850480e 321
vithyat 2:990c985a69ae 322 deviceData.trigPercentage = bytesToInt(bytes[indexOffset+32], bytes[indexOffset+33],
vithyat 2:990c985a69ae 323 bytes[indexOffset+34], bytes[indexOffset+35]);
vithyat 2:990c985a69ae 324 deviceData.gain = bytesToInt(bytes[indexOffset+36], bytes[indexOffset+37], bytes[indexOffset+38],
vithyat 2:990c985a69ae 325 bytes[indexOffset+39]);
vithyat 2:990c985a69ae 326 if(debug) {
vithyat 2:990c985a69ae 327 printf("channel is %i\n", deviceData.channel);
vithyat 2:990c985a69ae 328 printf("traceLength is %i\n", deviceData.traceLength);
vithyat 2:990c985a69ae 329 printf("trigMode is %f\n", deviceData.trigLevel);
vithyat 2:990c985a69ae 330 printf("trigSource is %i\n", deviceData.trigSource);
vithyat 2:990c985a69ae 331 printf("trigLevel is %f\n", deviceData.trigLevel);
vithyat 2:990c985a69ae 332 printf("trigHyst is %f\n", deviceData.trigHyst);
vithyat 2:990c985a69ae 333 printf("trigPercentage is %i\n", deviceData.trigPercentage);
vithyat 2:990c985a69ae 334 printf("gain is %i\n", deviceData.gain);
vithyat 2:990c985a69ae 335 printf("sample rate is %i\n", deviceData.sampleRate);
vithyat 2:990c985a69ae 336 printf("gain is %i\n", deviceData.gain);
vithyat 2:990c985a69ae 337 }
vithyat 1:0c589850480e 338
vithyat 2:990c985a69ae 339 commandType = PFP_TRIG_RECEIVED;
vithyat 1:0c589850480e 340 sendBytes = pfp_emon_create_ack_for_client(commandType,
vithyat 1:0c589850480e 341 deviceData.traceLength * 2);
vithyat 1:0c589850480e 342
vithyat 1:0c589850480e 343 if (sendBytes != NULL) {
vithyat 1:0c589850480e 344 clt_sock.send(sendBytes,64);
vithyat 2:990c985a69ae 345 }
vithyat 2:990c985a69ae 346
vithyat 2:990c985a69ae 347 int numOfInteration = (len - (indexOffset+40))/4;
vithyat 2:990c985a69ae 348
vithyat 2:990c985a69ae 349 for(int i=0; i<numOfInteration; i++) {
vithyat 2:990c985a69ae 350 int index2 = i*4;
vithyat 2:990c985a69ae 351 int b0 = indexOffset+40+index2;
vithyat 2:990c985a69ae 352 int b1 = indexOffset+41+index2;
vithyat 2:990c985a69ae 353 int b2 = indexOffset+42+index2;
vithyat 2:990c985a69ae 354 int b3 = indexOffset+43+index2;
vithyat 2:990c985a69ae 355 int v = bytesToInt(bytes[b0], bytes[b1], bytes[b2],bytes[b3]);
vithyat 2:990c985a69ae 356 if(debug) {
vithyat 2:990c985a69ae 357 printf("Trailing value %i\n", v);
vithyat 2:990c985a69ae 358 }
vithyat 1:0c589850480e 359 }
vithyat 2:990c985a69ae 360
vithyat 2:990c985a69ae 361 if(numOfInteration==6) {
vithyat 2:990c985a69ae 362
vithyat 2:990c985a69ae 363 commandType = bytesToInt(bytes[indexOffset+40], bytes[indexOffset+41], bytes[indexOffset+42],bytes[indexOffset+43]);
vithyat 2:990c985a69ae 364 commandLength = bytesToInt(bytes[indexOffset+44], bytes[indexOffset+45], bytes[indexOffset+46],bytes[indexOffset+47]);
vithyat 2:990c985a69ae 365 int sampleRate = bytesToInt(bytes[indexOffset+48], bytes[indexOffset+49], bytes[indexOffset+50],bytes[indexOffset+51]);
vithyat 2:990c985a69ae 366 deviceData.sampleRate = sampleRate;
vithyat 2:990c985a69ae 367
vithyat 2:990c985a69ae 368 if (commandType == PFP_CLK_FREQ) {
vithyat 2:990c985a69ae 369 sendBytes = pfp_emon_create_ack_for_client(commandType, 0);
vithyat 2:990c985a69ae 370 if (sendBytes != NULL) {
vithyat 2:990c985a69ae 371 clt_sock.send(sendBytes,64);
vithyat 2:990c985a69ae 372 }
vithyat 2:990c985a69ae 373 }
vithyat 2:990c985a69ae 374 wait(sleepCore);
vithyat 2:990c985a69ae 375
vithyat 2:990c985a69ae 376 commandType = bytesToInt(bytes[indexOffset+52], bytes[indexOffset+53], bytes[indexOffset+54],bytes[indexOffset+55]);
vithyat 2:990c985a69ae 377 commandLength = bytesToInt(bytes[indexOffset+56], bytes[indexOffset+57], bytes[indexOffset+58],bytes[indexOffset+59]);
vithyat 2:990c985a69ae 378 // int sampleRate = bytesToInt(bytes[indexOffset+40], bytes[indexOffset+41], bytes[indexOffset+42],bytes[indexOffset+43]);
vithyat 2:990c985a69ae 379 }
vithyat 1:0c589850480e 380
vithyat 1:0c589850480e 381
vithyat 2:990c985a69ae 382 }
vithyat 2:990c985a69ae 383 }
vithyat 2:990c985a69ae 384 if (commandType == PFP_CLK_FREQ) {
vithyat 0:977e87915078 385 sendBytes = pfp_emon_create_ack_for_client(commandType, 0);
vithyat 1:0c589850480e 386 if (sendBytes != NULL) {
vithyat 1:0c589850480e 387 clt_sock.send(sendBytes,64);
vithyat 2:990c985a69ae 388 wait(sleepCore);
vithyat 2:990c985a69ae 389 }
vithyat 2:990c985a69ae 390
vithyat 2:990c985a69ae 391 if(len==24) {
vithyat 2:990c985a69ae 392 commandType = PFP_ADC_GET_RAW;
vithyat 1:0c589850480e 393 }
vithyat 2:990c985a69ae 394
vithyat 2:990c985a69ae 395 }
vithyat 1:0c589850480e 396
vithyat 2:990c985a69ae 397
vithyat 2:990c985a69ae 398 if (commandType == PFP_ADC_GET_RAW) {
vithyat 1:0c589850480e 399 sendBytes = pfp_emon_create_ack_for_client(PFP_TRIG_RECEIVED,
vithyat 1:0c589850480e 400 deviceData.traceLength * 2);
vithyat 1:0c589850480e 401
vithyat 1:0c589850480e 402 if (sendBytes != NULL) {
vithyat 1:0c589850480e 403 clt_sock.send(sendBytes,64);
vithyat 1:0c589850480e 404 }
vithyat 1:0c589850480e 405
vithyat 0:977e87915078 406 sendBytes = pfp_emon_create_ack_for_client(commandType,
vithyat 0:977e87915078 407 deviceData.traceLength * 2);
vithyat 1:0c589850480e 408 if (sendBytes != NULL) {
vithyat 1:0c589850480e 409 clt_sock.send(sendBytes,64);
vithyat 1:0c589850480e 410 }
vithyat 0:977e87915078 411
vithyat 0:977e87915078 412 if (deviceData.traceLength != rawDataLen) {
vithyat 0:977e87915078 413 printf("Data size change to %i===============>\n",rawDataLen);
vithyat 0:977e87915078 414 free(rawData);
vithyat 0:977e87915078 415 rawDataLen = deviceData.traceLength;
vithyat 0:977e87915078 416 rawData = (int16_t*)calloc(rawDataLen, sizeof(int16_t));
vithyat 0:977e87915078 417 }
vithyat 0:977e87915078 418
vithyat 0:977e87915078 419 // Store raw data
vithyat 2:990c985a69ae 420
vithyat 2:990c985a69ae 421 int val=0;
vithyat 2:990c985a69ae 422
vithyat 0:977e87915078 423 for (int i = 0; i < rawDataLen; i++) {
vithyat 2:990c985a69ae 424 val = ain.read_u16() - 32768;
vithyat 2:990c985a69ae 425 if(val>32762) {
vithyat 2:990c985a69ae 426 val = 32762;
vithyat 2:990c985a69ae 427 } else if(val<-32762) {
vithyat 2:990c985a69ae 428 val = -32762;
vithyat 2:990c985a69ae 429 }
vithyat 2:990c985a69ae 430
vithyat 1:0c589850480e 431 rawData[i] =val;
vithyat 0:977e87915078 432 }
vithyat 0:977e87915078 433
vithyat 0:977e87915078 434 int num = rawDataLen/MAX_TRANSMIT_DATA;
vithyat 0:977e87915078 435 int startIndex = 0;
vithyat 0:977e87915078 436 for(int k =0; k<num; k++) {
vithyat 0:977e87915078 437 startIndex = k*MAX_TRANSMIT_DATA;
vithyat 0:977e87915078 438 for(int i=0; i<MAX_TRANSMIT_DATA; i++) {
vithyat 0:977e87915078 439 data[i] = rawData[i + startIndex];
vithyat 0:977e87915078 440 }
vithyat 0:977e87915078 441 clt_sock.send(data,MAX_TRANSMIT_DATA*sizeof(int16_t));
vithyat 2:990c985a69ae 442 wait(sleepCore);
vithyat 0:977e87915078 443 }
vithyat 0:977e87915078 444
vithyat 0:977e87915078 445 int leftOver = rawDataLen - num*MAX_TRANSMIT_DATA;
vithyat 0:977e87915078 446
vithyat 0:977e87915078 447 if(leftOver>0) {
vithyat 0:977e87915078 448 startIndex = num*MAX_TRANSMIT_DATA;
vithyat 0:977e87915078 449
vithyat 0:977e87915078 450 for(int j=startIndex; j<rawDataLen; j++) {
vithyat 0:977e87915078 451 int i = j-startIndex;
vithyat 0:977e87915078 452 data[i] = rawData[j];
vithyat 0:977e87915078 453 }
vithyat 0:977e87915078 454 clt_sock.send(data,leftOver * sizeof(int16_t));
vithyat 0:977e87915078 455 }
vithyat 0:977e87915078 456 traceTrack++;
vithyat 1:0c589850480e 457 if(traceTrack>100000000) {
vithyat 0:977e87915078 458 traceTrack = 0;
vithyat 0:977e87915078 459 }
vithyat 2:990c985a69ae 460 if(debug) {
vithyat 2:990c985a69ae 461 printf("<================== Trace Count is %ld ===============>\n",traceTrack);
vithyat 2:990c985a69ae 462 }
vithyat 0:977e87915078 463 }
vithyat 0:977e87915078 464 }
vithyat 0:977e87915078 465
vithyat 0:977e87915078 466 free(rawData);
vithyat 0:977e87915078 467 }
vithyat 0:977e87915078 468 }
vithyat 0:977e87915078 469 }
vithyat 0:977e87915078 470 }
vithyat 1:0c589850480e 471
vithyat 1:0c589850480e 472 ///////////////////////////////////////////////////////////////////////////////////////
vithyat 1:0c589850480e 473 ///
vithyat 2:990c985a69ae 474 /// PFP Main code end
vithyat 1:0c589850480e 475 ///
vithyat 1:0c589850480e 476 //////////////////////////////////////////////////////////////////////////////////////
vithyat 0:977e87915078 477
vithyat 0:977e87915078 478 int main(void)
vithyat 0:977e87915078 479 {
vithyat 0:977e87915078 480 printf("Connecting to the network using the default network interface...\n");
vithyat 0:977e87915078 481 net = NetworkInterface::get_default_instance();
vithyat 0:977e87915078 482
vithyat 0:977e87915078 483 nsapi_error_t net_status = NSAPI_ERROR_NO_CONNECTION;
vithyat 0:977e87915078 484 while ((net_status = net->connect()) != NSAPI_ERROR_OK) {
vithyat 0:977e87915078 485 printf("Unable to connect to network (%d). Retrying...\n", net_status);
vithyat 0:977e87915078 486 }
vithyat 0:977e87915078 487
vithyat 0:977e87915078 488 Thread thread(startEmonThread);
vithyat 0:977e87915078 489
vithyat 0:977e87915078 490 while (true) {
vithyat 2:990c985a69ae 491 wait(0.001);
vithyat 0:977e87915078 492 }
vithyat 0:977e87915078 493 }
vithyat 0:977e87915078 494
vithyat 0:977e87915078 495 #endif /* MBED_TEST_MODE */