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
main.cpp@1:0c589850480e, 2019-11-20 (annotated)
- 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?
User | Revision | Line number | New 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 */ |