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@0:977e87915078, 2019-08-28 (annotated)
- Committer:
- vithyat
- Date:
- Wed Aug 28 19:24:56 2019 +0000
- Revision:
- 0:977e87915078
- Child:
- 1:0c589850480e
init
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 | 0:977e87915078 | 27 | uint8_t PFP_REGISTER_DIGITIZER = 87; |
vithyat | 0:977e87915078 | 28 | uint8_t PFP_CLK_FREQ = 11; |
vithyat | 0:977e87915078 | 29 | uint8_t PFP_ADC_GET_RAW = 3; |
vithyat | 0:977e87915078 | 30 | uint8_t PFP_ADC_INIT = 0; |
vithyat | 0:977e87915078 | 31 | uint8_t PFP_TRIG_CONFIG = 26; |
vithyat | 0:977e87915078 | 32 | |
vithyat | 0:977e87915078 | 33 | |
vithyat | 0:977e87915078 | 34 | /////////////////////////////////////////////////////////////////////////////////////// |
vithyat | 0:977e87915078 | 35 | struct DeviceData { |
vithyat | 0:977e87915078 | 36 | int channel; |
vithyat | 0:977e87915078 | 37 | |
vithyat | 0:977e87915078 | 38 | int numberOfTraces; |
vithyat | 0:977e87915078 | 39 | int traceLength; |
vithyat | 0:977e87915078 | 40 | |
vithyat | 0:977e87915078 | 41 | int sampleRate; |
vithyat | 0:977e87915078 | 42 | int digitizer; |
vithyat | 0:977e87915078 | 43 | |
vithyat | 0:977e87915078 | 44 | int trigMode; |
vithyat | 0:977e87915078 | 45 | int trigSource; |
vithyat | 0:977e87915078 | 46 | |
vithyat | 0:977e87915078 | 47 | float trigLevel; |
vithyat | 0:977e87915078 | 48 | float trigHyst; |
vithyat | 0:977e87915078 | 49 | |
vithyat | 0:977e87915078 | 50 | int trigPercentage; |
vithyat | 0:977e87915078 | 51 | int gain; |
vithyat | 0:977e87915078 | 52 | }; |
vithyat | 0:977e87915078 | 53 | |
vithyat | 0:977e87915078 | 54 | struct DeviceData deviceData; |
vithyat | 0:977e87915078 | 55 | |
vithyat | 0:977e87915078 | 56 | int bytesToInt(int8_t b0, int8_t b1, int8_t b2, int8_t b3) |
vithyat | 0:977e87915078 | 57 | { |
vithyat | 0:977e87915078 | 58 | int value = (b3 << 24) & 0xff000000 |
vithyat | 0:977e87915078 | 59 | | (b2 << 16) & 0x00ff0000 |
vithyat | 0:977e87915078 | 60 | | (b1 << 8) & 0x0000ff00 |
vithyat | 0:977e87915078 | 61 | | (b0 << 0) & 0x000000ff; |
vithyat | 0:977e87915078 | 62 | return value; |
vithyat | 0:977e87915078 | 63 | } |
vithyat | 0:977e87915078 | 64 | |
vithyat | 0:977e87915078 | 65 | float bytesToFloat(int8_t b0, int8_t b1, int8_t b2, int8_t b3) |
vithyat | 0:977e87915078 | 66 | { |
vithyat | 0:977e87915078 | 67 | |
vithyat | 0:977e87915078 | 68 | float val = 0; |
vithyat | 0:977e87915078 | 69 | unsigned long result = 0; |
vithyat | 0:977e87915078 | 70 | result |= ((unsigned long) (b0) << 0x18); |
vithyat | 0:977e87915078 | 71 | result |= ((unsigned long) (b1) << 0x10); |
vithyat | 0:977e87915078 | 72 | result |= ((unsigned long) (b2) << 0x08); |
vithyat | 0:977e87915078 | 73 | result |= ((unsigned long) (b3)); |
vithyat | 0:977e87915078 | 74 | memcpy(&val, &result, 4); |
vithyat | 0:977e87915078 | 75 | |
vithyat | 0:977e87915078 | 76 | return val; |
vithyat | 0:977e87915078 | 77 | } |
vithyat | 0:977e87915078 | 78 | |
vithyat | 0:977e87915078 | 79 | int8_t * intToBytes(int value) |
vithyat | 0:977e87915078 | 80 | { |
vithyat | 0:977e87915078 | 81 | static int8_t b[4]; |
vithyat | 0:977e87915078 | 82 | b[0] = ((int8_t) (value >> 0)); |
vithyat | 0:977e87915078 | 83 | b[1] = ((int8_t) (value >> 8)); |
vithyat | 0:977e87915078 | 84 | b[2] = ((int8_t) (value >> 16)); |
vithyat | 0:977e87915078 | 85 | b[3] = ((int8_t) (value >> 24)); |
vithyat | 0:977e87915078 | 86 | return b; |
vithyat | 0:977e87915078 | 87 | } |
vithyat | 0:977e87915078 | 88 | |
vithyat | 0:977e87915078 | 89 | int8_t * longToBytes(long value) |
vithyat | 0:977e87915078 | 90 | { |
vithyat | 0:977e87915078 | 91 | static int8_t b[8]; |
vithyat | 0:977e87915078 | 92 | b[0] = (int8_t) ((value >> 0) & 0xFF); |
vithyat | 0:977e87915078 | 93 | b[1] = (int8_t) ((value >> 8) & 0xFF); |
vithyat | 0:977e87915078 | 94 | b[2] = (int8_t) ((value >> 16) & 0xFF); |
vithyat | 0:977e87915078 | 95 | b[3] = (int8_t) ((value >> 24) & 0xFF); |
vithyat | 0:977e87915078 | 96 | b[4] = (int8_t) ((value >> 32) & 0xFF); |
vithyat | 0:977e87915078 | 97 | b[5] = (int8_t) ((value >> 40) & 0xFF); |
vithyat | 0:977e87915078 | 98 | b[6] = (int8_t) ((value >> 48) & 0xFF); |
vithyat | 0:977e87915078 | 99 | b[7] = (int8_t) ((value >> 56) & 0xFF); |
vithyat | 0:977e87915078 | 100 | return b; |
vithyat | 0:977e87915078 | 101 | } |
vithyat | 0:977e87915078 | 102 | |
vithyat | 0:977e87915078 | 103 | int8_t * pfp_emon_create_ack_for_client(int commandType, long numberOfBytes) |
vithyat | 0:977e87915078 | 104 | { |
vithyat | 0:977e87915078 | 105 | static int8_t b[24]; |
vithyat | 0:977e87915078 | 106 | |
vithyat | 0:977e87915078 | 107 | int8_t *totalBytes = longToBytes(numberOfBytes); |
vithyat | 0:977e87915078 | 108 | int8_t *successBytes = intToBytes(3); |
vithyat | 0:977e87915078 | 109 | int8_t *returnBytes = intToBytes(commandType); |
vithyat | 0:977e87915078 | 110 | |
vithyat | 0:977e87915078 | 111 | // EMON HEADER |
vithyat | 0:977e87915078 | 112 | b[0] = 69; |
vithyat | 0:977e87915078 | 113 | b[1] = 77; |
vithyat | 0:977e87915078 | 114 | b[2] = 79; |
vithyat | 0:977e87915078 | 115 | b[3] = 78; |
vithyat | 0:977e87915078 | 116 | |
vithyat | 0:977e87915078 | 117 | // NUMBER OF BYTES |
vithyat | 0:977e87915078 | 118 | b[4] = totalBytes[0]; |
vithyat | 0:977e87915078 | 119 | b[5] = totalBytes[1]; |
vithyat | 0:977e87915078 | 120 | b[6] = totalBytes[2]; |
vithyat | 0:977e87915078 | 121 | b[7] = totalBytes[3]; |
vithyat | 0:977e87915078 | 122 | b[8] = totalBytes[4]; |
vithyat | 0:977e87915078 | 123 | b[9] = totalBytes[5]; |
vithyat | 0:977e87915078 | 124 | b[10] = totalBytes[6]; |
vithyat | 0:977e87915078 | 125 | b[11] = totalBytes[7]; |
vithyat | 0:977e87915078 | 126 | |
vithyat | 0:977e87915078 | 127 | // SKIP BYTES |
vithyat | 0:977e87915078 | 128 | b[12] = 0; |
vithyat | 0:977e87915078 | 129 | b[13] = 0; |
vithyat | 0:977e87915078 | 130 | b[14] = 0; |
vithyat | 0:977e87915078 | 131 | b[15] = 0; |
vithyat | 0:977e87915078 | 132 | |
vithyat | 0:977e87915078 | 133 | // SUCCESS COMMAND |
vithyat | 0:977e87915078 | 134 | b[16] = successBytes[0]; |
vithyat | 0:977e87915078 | 135 | b[17] = successBytes[1]; |
vithyat | 0:977e87915078 | 136 | b[18] = successBytes[2]; |
vithyat | 0:977e87915078 | 137 | b[19] = successBytes[3]; |
vithyat | 0:977e87915078 | 138 | |
vithyat | 0:977e87915078 | 139 | // RETURN COMMAND |
vithyat | 0:977e87915078 | 140 | b[20] = returnBytes[0]; |
vithyat | 0:977e87915078 | 141 | b[21] = returnBytes[1]; |
vithyat | 0:977e87915078 | 142 | b[22] = returnBytes[2]; |
vithyat | 0:977e87915078 | 143 | b[23] = returnBytes[3]; |
vithyat | 0:977e87915078 | 144 | |
vithyat | 0:977e87915078 | 145 | return b; |
vithyat | 0:977e87915078 | 146 | } |
vithyat | 0:977e87915078 | 147 | |
vithyat | 0:977e87915078 | 148 | //////////////////////////////////////////////////////////////////////////////////// |
vithyat | 0:977e87915078 | 149 | |
vithyat | 0:977e87915078 | 150 | void startEmonThread(void const *args) |
vithyat | 0:977e87915078 | 151 | { |
vithyat | 0:977e87915078 | 152 | |
vithyat | 0:977e87915078 | 153 | printf("The target IP address is '%s'\r\n", net->get_ip_address()); |
vithyat | 0:977e87915078 | 154 | |
vithyat | 0:977e87915078 | 155 | TCPServer srv; |
vithyat | 0:977e87915078 | 156 | TCPSocket clt_sock; |
vithyat | 0:977e87915078 | 157 | SocketAddress clt_addr; |
vithyat | 0:977e87915078 | 158 | |
vithyat | 0:977e87915078 | 159 | /* Open the server on ethernet stack */ |
vithyat | 0:977e87915078 | 160 | srv.open(net); |
vithyat | 0:977e87915078 | 161 | |
vithyat | 0:977e87915078 | 162 | /* Bind the HTTP port (TCP 80) to the server */ |
vithyat | 0:977e87915078 | 163 | srv.bind(net->get_ip_address(), 7001); |
vithyat | 0:977e87915078 | 164 | |
vithyat | 0:977e87915078 | 165 | long traceTrack = 0; |
vithyat | 0:977e87915078 | 166 | |
vithyat | 0:977e87915078 | 167 | |
vithyat | 0:977e87915078 | 168 | //srv.set_blocking(false); |
vithyat | 0:977e87915078 | 169 | while (true) { |
vithyat | 0:977e87915078 | 170 | /* Can handle 5 simultaneous connections */ |
vithyat | 0:977e87915078 | 171 | int err= srv.listen(1); |
vithyat | 0:977e87915078 | 172 | printf("server listening error : %d\r\n",err); |
vithyat | 0:977e87915078 | 173 | |
vithyat | 0:977e87915078 | 174 | while(1) { |
vithyat | 0:977e87915078 | 175 | |
vithyat | 0:977e87915078 | 176 | printf("waiting for client connection\r\n"); |
vithyat | 0:977e87915078 | 177 | err = srv.accept(&clt_sock, &clt_addr); |
vithyat | 0:977e87915078 | 178 | if(err == 0) { |
vithyat | 0:977e87915078 | 179 | printf("client connected :%s:%d\r\n", clt_addr.get_ip_address(), clt_addr.get_port()); |
vithyat | 0:977e87915078 | 180 | int MAX_LEN = 80; |
vithyat | 0:977e87915078 | 181 | int8_t bytes[MAX_LEN]; |
vithyat | 0:977e87915078 | 182 | int32_t rawDataLen = 2048; |
vithyat | 0:977e87915078 | 183 | int16_t *rawData = (int16_t*)calloc(rawDataLen, sizeof(int16_t)); |
vithyat | 0:977e87915078 | 184 | int16_t MAX_TRANSMIT_DATA = 500; |
vithyat | 0:977e87915078 | 185 | int16_t data[MAX_TRANSMIT_DATA]; |
vithyat | 0:977e87915078 | 186 | traceTrack = 0; |
vithyat | 0:977e87915078 | 187 | while(1) { |
vithyat | 0:977e87915078 | 188 | |
vithyat | 0:977e87915078 | 189 | //////////////// |
vithyat | 0:977e87915078 | 190 | // int len = read(sockfd, bytes, sizeof(bytes)); |
vithyat | 0:977e87915078 | 191 | int len = clt_sock.recv(bytes, MAX_LEN); |
vithyat | 0:977e87915078 | 192 | |
vithyat | 0:977e87915078 | 193 | if (len < 1) { |
vithyat | 0:977e87915078 | 194 | printf("Connection is closed....\n"); |
vithyat | 0:977e87915078 | 195 | break; |
vithyat | 0:977e87915078 | 196 | } |
vithyat | 0:977e87915078 | 197 | |
vithyat | 0:977e87915078 | 198 | int commandType = 0; |
vithyat | 0:977e87915078 | 199 | int commandLength = 0; |
vithyat | 0:977e87915078 | 200 | |
vithyat | 0:977e87915078 | 201 | int8_t *sendBytes = NULL; |
vithyat | 0:977e87915078 | 202 | |
vithyat | 0:977e87915078 | 203 | if (len < 0) { |
vithyat | 0:977e87915078 | 204 | return; |
vithyat | 0:977e87915078 | 205 | } |
vithyat | 0:977e87915078 | 206 | if (len == 8) { |
vithyat | 0:977e87915078 | 207 | commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]); |
vithyat | 0:977e87915078 | 208 | } else if (len == 12) { |
vithyat | 0:977e87915078 | 209 | commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]); |
vithyat | 0:977e87915078 | 210 | commandLength = bytesToInt(bytes[4], bytes[5], bytes[6], bytes[7]); |
vithyat | 0:977e87915078 | 211 | if (commandType == PFP_REGISTER_DIGITIZER) { |
vithyat | 0:977e87915078 | 212 | |
vithyat | 0:977e87915078 | 213 | deviceData.digitizer = bytesToInt(bytes[8], bytes[9], bytes[10], |
vithyat | 0:977e87915078 | 214 | bytes[11]); |
vithyat | 0:977e87915078 | 215 | |
vithyat | 0:977e87915078 | 216 | } else if (commandType == PFP_CLK_FREQ) { |
vithyat | 0:977e87915078 | 217 | deviceData.sampleRate = bytesToInt(bytes[8], bytes[9], |
vithyat | 0:977e87915078 | 218 | bytes[10], bytes[11]); |
vithyat | 0:977e87915078 | 219 | } else if (commandType == PFP_ADC_GET_RAW) { |
vithyat | 0:977e87915078 | 220 | deviceData.channel = bytesToInt(bytes[8], bytes[9], bytes[10], |
vithyat | 0:977e87915078 | 221 | bytes[11]); |
vithyat | 0:977e87915078 | 222 | } |
vithyat | 0:977e87915078 | 223 | |
vithyat | 0:977e87915078 | 224 | } |
vithyat | 0:977e87915078 | 225 | |
vithyat | 0:977e87915078 | 226 | else if (len == 40) { |
vithyat | 0:977e87915078 | 227 | // Trig Configuration |
vithyat | 0:977e87915078 | 228 | commandType = bytesToInt(bytes[0], bytes[1], bytes[2], bytes[3]); |
vithyat | 0:977e87915078 | 229 | commandLength = bytesToInt(bytes[4], bytes[5], bytes[6], bytes[7]); |
vithyat | 0:977e87915078 | 230 | |
vithyat | 0:977e87915078 | 231 | deviceData.channel = bytesToInt(bytes[8], bytes[9], bytes[10], |
vithyat | 0:977e87915078 | 232 | bytes[11]); |
vithyat | 0:977e87915078 | 233 | deviceData.traceLength = bytesToInt(bytes[12], bytes[13], bytes[14], |
vithyat | 0:977e87915078 | 234 | bytes[15]); |
vithyat | 0:977e87915078 | 235 | |
vithyat | 0:977e87915078 | 236 | deviceData.trigMode = bytesToInt(bytes[16], bytes[17], bytes[18], |
vithyat | 0:977e87915078 | 237 | bytes[19]); |
vithyat | 0:977e87915078 | 238 | deviceData.trigSource = bytesToInt(bytes[20], bytes[21], bytes[22], |
vithyat | 0:977e87915078 | 239 | bytes[23]); |
vithyat | 0:977e87915078 | 240 | |
vithyat | 0:977e87915078 | 241 | deviceData.trigLevel = bytesToFloat(bytes[24], bytes[25], bytes[26], |
vithyat | 0:977e87915078 | 242 | bytes[27]); |
vithyat | 0:977e87915078 | 243 | deviceData.trigHyst = bytesToFloat(bytes[28], bytes[29], bytes[30], |
vithyat | 0:977e87915078 | 244 | bytes[31]); |
vithyat | 0:977e87915078 | 245 | |
vithyat | 0:977e87915078 | 246 | deviceData.trigPercentage = bytesToInt(bytes[32], bytes[33], |
vithyat | 0:977e87915078 | 247 | bytes[34], bytes[35]); |
vithyat | 0:977e87915078 | 248 | deviceData.gain = bytesToInt(bytes[36], bytes[37], bytes[38], |
vithyat | 0:977e87915078 | 249 | bytes[39]); |
vithyat | 0:977e87915078 | 250 | } |
vithyat | 0:977e87915078 | 251 | |
vithyat | 0:977e87915078 | 252 | // Got command form client. Send back header |
vithyat | 0:977e87915078 | 253 | if (commandType == PFP_ADC_INIT) { |
vithyat | 0:977e87915078 | 254 | sendBytes = pfp_emon_create_ack_for_client(commandType, 0); |
vithyat | 0:977e87915078 | 255 | } else if (commandType == PFP_REGISTER_DIGITIZER) { |
vithyat | 0:977e87915078 | 256 | sendBytes = pfp_emon_create_ack_for_client(commandType, 0); |
vithyat | 0:977e87915078 | 257 | } else if (commandType == PFP_TRIG_CONFIG) { |
vithyat | 0:977e87915078 | 258 | sendBytes = pfp_emon_create_ack_for_client(commandType, |
vithyat | 0:977e87915078 | 259 | deviceData.traceLength * 2); |
vithyat | 0:977e87915078 | 260 | } else if (commandType == PFP_CLK_FREQ) { |
vithyat | 0:977e87915078 | 261 | sendBytes = pfp_emon_create_ack_for_client(commandType, 0); |
vithyat | 0:977e87915078 | 262 | } else if (commandType == PFP_ADC_GET_RAW) { |
vithyat | 0:977e87915078 | 263 | sendBytes = pfp_emon_create_ack_for_client(commandType, |
vithyat | 0:977e87915078 | 264 | deviceData.traceLength * 2); |
vithyat | 0:977e87915078 | 265 | } |
vithyat | 0:977e87915078 | 266 | |
vithyat | 0:977e87915078 | 267 | if (sendBytes != NULL) { |
vithyat | 0:977e87915078 | 268 | clt_sock.send(sendBytes,24); |
vithyat | 0:977e87915078 | 269 | wait(0.05); |
vithyat | 0:977e87915078 | 270 | } |
vithyat | 0:977e87915078 | 271 | |
vithyat | 0:977e87915078 | 272 | if (commandType == PFP_ADC_GET_RAW) { |
vithyat | 0:977e87915078 | 273 | if (deviceData.traceLength != rawDataLen) { |
vithyat | 0:977e87915078 | 274 | printf("Data size change to %i===============>\n",rawDataLen); |
vithyat | 0:977e87915078 | 275 | free(rawData); |
vithyat | 0:977e87915078 | 276 | rawDataLen = deviceData.traceLength; |
vithyat | 0:977e87915078 | 277 | rawData = (int16_t*)calloc(rawDataLen, sizeof(int16_t)); |
vithyat | 0:977e87915078 | 278 | } |
vithyat | 0:977e87915078 | 279 | |
vithyat | 0:977e87915078 | 280 | // Store raw data |
vithyat | 0:977e87915078 | 281 | printf("Populate sensor data to %i===============>\n",rawDataLen); |
vithyat | 0:977e87915078 | 282 | for (int i = 0; i < rawDataLen; i++) { |
vithyat | 0:977e87915078 | 283 | rawData[i] = ain.read_u16(); |
vithyat | 0:977e87915078 | 284 | } |
vithyat | 0:977e87915078 | 285 | |
vithyat | 0:977e87915078 | 286 | int num = rawDataLen/MAX_TRANSMIT_DATA; |
vithyat | 0:977e87915078 | 287 | int startIndex = 0; |
vithyat | 0:977e87915078 | 288 | for(int k =0; k<num; k++) { |
vithyat | 0:977e87915078 | 289 | startIndex = k*MAX_TRANSMIT_DATA; |
vithyat | 0:977e87915078 | 290 | for(int i=0; i<MAX_TRANSMIT_DATA; i++) { |
vithyat | 0:977e87915078 | 291 | data[i] = rawData[i + startIndex]; |
vithyat | 0:977e87915078 | 292 | } |
vithyat | 0:977e87915078 | 293 | clt_sock.send(data,MAX_TRANSMIT_DATA*sizeof(int16_t)); |
vithyat | 0:977e87915078 | 294 | //printf("Sending batch %i of %i\n",k,num); |
vithyat | 0:977e87915078 | 295 | wait(0.04); |
vithyat | 0:977e87915078 | 296 | } |
vithyat | 0:977e87915078 | 297 | |
vithyat | 0:977e87915078 | 298 | int leftOver = rawDataLen - num*MAX_TRANSMIT_DATA; |
vithyat | 0:977e87915078 | 299 | //printf("LeftOver is %i\n",leftOver); |
vithyat | 0:977e87915078 | 300 | |
vithyat | 0:977e87915078 | 301 | if(leftOver>0) { |
vithyat | 0:977e87915078 | 302 | startIndex = num*MAX_TRANSMIT_DATA; |
vithyat | 0:977e87915078 | 303 | |
vithyat | 0:977e87915078 | 304 | for(int j=startIndex; j<rawDataLen; j++) { |
vithyat | 0:977e87915078 | 305 | int i = j-startIndex; |
vithyat | 0:977e87915078 | 306 | data[i] = rawData[j]; |
vithyat | 0:977e87915078 | 307 | } |
vithyat | 0:977e87915078 | 308 | clt_sock.send(data,leftOver * sizeof(int16_t)); |
vithyat | 0:977e87915078 | 309 | //printf("Sending left over bytes %i\n",leftOver); |
vithyat | 0:977e87915078 | 310 | wait(0.04); |
vithyat | 0:977e87915078 | 311 | } |
vithyat | 0:977e87915078 | 312 | traceTrack++; |
vithyat | 0:977e87915078 | 313 | if(traceTrack>100000000){ |
vithyat | 0:977e87915078 | 314 | traceTrack = 0; |
vithyat | 0:977e87915078 | 315 | } |
vithyat | 0:977e87915078 | 316 | printf("<================== Trace Count is %ld ===============>\n",traceTrack); |
vithyat | 0:977e87915078 | 317 | } |
vithyat | 0:977e87915078 | 318 | |
vithyat | 0:977e87915078 | 319 | /////////////// |
vithyat | 0:977e87915078 | 320 | } |
vithyat | 0:977e87915078 | 321 | |
vithyat | 0:977e87915078 | 322 | free(rawData); |
vithyat | 0:977e87915078 | 323 | } |
vithyat | 0:977e87915078 | 324 | } |
vithyat | 0:977e87915078 | 325 | } |
vithyat | 0:977e87915078 | 326 | } |
vithyat | 0:977e87915078 | 327 | /////////////////////////////////////////////////////////////////// |
vithyat | 0:977e87915078 | 328 | |
vithyat | 0:977e87915078 | 329 | int main(void) |
vithyat | 0:977e87915078 | 330 | { |
vithyat | 0:977e87915078 | 331 | printf("Connecting to the network using the default network interface...\n"); |
vithyat | 0:977e87915078 | 332 | net = NetworkInterface::get_default_instance(); |
vithyat | 0:977e87915078 | 333 | |
vithyat | 0:977e87915078 | 334 | nsapi_error_t net_status = NSAPI_ERROR_NO_CONNECTION; |
vithyat | 0:977e87915078 | 335 | while ((net_status = net->connect()) != NSAPI_ERROR_OK) { |
vithyat | 0:977e87915078 | 336 | printf("Unable to connect to network (%d). Retrying...\n", net_status); |
vithyat | 0:977e87915078 | 337 | } |
vithyat | 0:977e87915078 | 338 | |
vithyat | 0:977e87915078 | 339 | Thread thread(startEmonThread); |
vithyat | 0:977e87915078 | 340 | |
vithyat | 0:977e87915078 | 341 | while (true) { |
vithyat | 0:977e87915078 | 342 | wait(0.5); |
vithyat | 0:977e87915078 | 343 | } |
vithyat | 0:977e87915078 | 344 | } |
vithyat | 0:977e87915078 | 345 | |
vithyat | 0:977e87915078 | 346 | #endif /* MBED_TEST_MODE */ |