Firmware

Dependencies:   BMI160 ADT7410 Thermistor DS1621 max32630fthr Adafruit_FeatherOLED

Committer:
condato_mbed
Date:
Thu Jul 09 16:04:25 2020 +0000
Revision:
2:b802b30cc7d2
Parent:
0:556294574340
coldchainlogger

Who changed what in which revision?

UserRevisionLine numberNew contents of line
condato_mbed 0:556294574340 1 #include "functions.h"
condato_mbed 0:556294574340 2 #include "ble_functions.h"
condato_mbed 0:556294574340 3 #include "RawSerial.h"
condato_mbed 0:556294574340 4 #include <InterruptIn.h>
condato_mbed 0:556294574340 5 #include <InterruptManager.h>
condato_mbed 0:556294574340 6 #include "bmi160.h"
condato_mbed 0:556294574340 7 #include "max32630fthr.h"
condato_mbed 0:556294574340 8 #include "max3263x.h"
condato_mbed 0:556294574340 9 #include "MAX14690.h"
condato_mbed 0:556294574340 10 #include "ADT7410.h"
condato_mbed 0:556294574340 11 #include "Adafruit_SSD1306.h"
condato_mbed 0:556294574340 12 #include <BLE.h>
condato_mbed 0:556294574340 13 #include "ble/BLE.h"
condato_mbed 0:556294574340 14 #include "ble/Gap.h"
condato_mbed 0:556294574340 15 #include "ble/services/BatteryService.h"
condato_mbed 0:556294574340 16 #include "ble/blecommon.h"
condato_mbed 0:556294574340 17 #include "UUID.h"
condato_mbed 0:556294574340 18 #include "ble/gap/AdvertisingDataTypes.h"
condato_mbed 0:556294574340 19 #include "ble/gap/Types.h"
condato_mbed 0:556294574340 20 #include "SDBlockDevice.h"
condato_mbed 0:556294574340 21 #include "FATFileSystem.h"
condato_mbed 0:556294574340 22 #include <errno.h>
condato_mbed 0:556294574340 23 #include <stdio.h>
condato_mbed 0:556294574340 24 #include <time.h>
condato_mbed 0:556294574340 25 #include <stdint.h>
condato_mbed 0:556294574340 26
condato_mbed 0:556294574340 27 extern char device_id[];
condato_mbed 0:556294574340 28 extern unsigned short int measure_id;
condato_mbed 0:556294574340 29 extern unsigned short int log_id;
condato_mbed 0:556294574340 30
condato_mbed 0:556294574340 31 extern Serial pan1326b;
condato_mbed 0:556294574340 32 extern DigitalOut bt_rst;
condato_mbed 0:556294574340 33
condato_mbed 0:556294574340 34 extern volatile int conn_state;
condato_mbed 0:556294574340 35 extern bool in_BT;
condato_mbed 0:556294574340 36
condato_mbed 0:556294574340 37 extern AnalogIn battery;
condato_mbed 0:556294574340 38
condato_mbed 0:556294574340 39 extern DigitalOut r;
condato_mbed 0:556294574340 40 extern DigitalOut g;
condato_mbed 0:556294574340 41 extern DigitalOut b;
condato_mbed 0:556294574340 42 extern DigitalOut RGBs[];
condato_mbed 0:556294574340 43
condato_mbed 0:556294574340 44 extern MAX32630FTHR pegasus;
condato_mbed 0:556294574340 45
condato_mbed 0:556294574340 46 extern ADT7410 myADT7410;
condato_mbed 0:556294574340 47 extern I2C i2cm2;
condato_mbed 0:556294574340 48 extern MAX14690 max14690;
condato_mbed 0:556294574340 49
condato_mbed 0:556294574340 50 extern InterruptIn button;
condato_mbed 0:556294574340 51
condato_mbed 0:556294574340 52 extern FATFileSystem fileSystem;
condato_mbed 0:556294574340 53 extern SDBlockDevice blockDevice;
condato_mbed 0:556294574340 54
condato_mbed 0:556294574340 55 extern I2C i2c;
condato_mbed 0:556294574340 56 extern int sensor_temp;
condato_mbed 0:556294574340 57 extern Adafruit_SSD1306_I2c featherOLED;
condato_mbed 0:556294574340 58
condato_mbed 0:556294574340 59 extern volatile int quit;
condato_mbed 0:556294574340 60 extern volatile int ble_return;
condato_mbed 0:556294574340 61 extern volatile int conn_state;
condato_mbed 0:556294574340 62 extern int counter_ble;
condato_mbed 0:556294574340 63
condato_mbed 0:556294574340 64 extern bool error_status;
condato_mbed 0:556294574340 65 extern bool BT_error;
condato_mbed 0:556294574340 66 extern bool shipping;
condato_mbed 0:556294574340 67 extern bool pause;
condato_mbed 0:556294574340 68 extern bool init_status;
condato_mbed 0:556294574340 69 extern bool after_BT;
condato_mbed 0:556294574340 70 extern bool charge;
condato_mbed 0:556294574340 71
condato_mbed 0:556294574340 72 extern Timeout after_BLE;
condato_mbed 0:556294574340 73 extern Timeout turnoff;
condato_mbed 0:556294574340 74 extern Timeout flipper;
condato_mbed 0:556294574340 75 extern Timeout advertise_cancel;
condato_mbed 0:556294574340 76 extern Timeout connected_cancel;
condato_mbed 0:556294574340 77 extern Ticker mess_timer;
condato_mbed 0:556294574340 78 extern Ticker ticker;
condato_mbed 0:556294574340 79 extern time_t now;
condato_mbed 0:556294574340 80 extern time_t raw;
condato_mbed 0:556294574340 81
condato_mbed 0:556294574340 82 extern float buffer_temp;
condato_mbed 0:556294574340 83 extern struct tm current;
condato_mbed 0:556294574340 84 extern struct tm actual;
condato_mbed 0:556294574340 85
condato_mbed 0:556294574340 86 extern struct user_config_struct user_config_para;
condato_mbed 0:556294574340 87 extern struct tm user_config_time;
condato_mbed 0:556294574340 88
condato_mbed 0:556294574340 89 extern Timeout done_rcv;
condato_mbed 0:556294574340 90
condato_mbed 0:556294574340 91 extern int next_state;
condato_mbed 0:556294574340 92
condato_mbed 0:556294574340 93 extern int unsigned long t_diff;
condato_mbed 0:556294574340 94 extern int unsigned long unix_time;
condato_mbed 0:556294574340 95
condato_mbed 0:556294574340 96 extern int default_advertise_time;
condato_mbed 0:556294574340 97 extern int default_connected_time;
condato_mbed 0:556294574340 98
condato_mbed 0:556294574340 99 extern int alert_count;
condato_mbed 0:556294574340 100
condato_mbed 0:556294574340 101 int ble_buff_line = 0;
condato_mbed 0:556294574340 102 char ble_buff[1024][64];
condato_mbed 0:556294574340 103
condato_mbed 0:556294574340 104 char response = '0';
condato_mbed 0:556294574340 105 char messungen[7];
condato_mbed 0:556294574340 106 int messwerte[5000];
condato_mbed 0:556294574340 107 char logs_array[7];
condato_mbed 0:556294574340 108 char seconds[12];
condato_mbed 0:556294574340 109 float min_temp = 0;
condato_mbed 0:556294574340 110 float max_temp = 0;
condato_mbed 0:556294574340 111 float avr_temp = 0;
condato_mbed 0:556294574340 112 unsigned short counter_m = 0;
condato_mbed 0:556294574340 113 unsigned short counter_l = 0;
condato_mbed 0:556294574340 114 int sendLedCounter = 0;
condato_mbed 0:556294574340 115
condato_mbed 0:556294574340 116 //const static char* SERVICE_UUID = "32372fb9-5f73-4c32-a17b-25e17f52a99a";
condato_mbed 0:556294574340 117 static uint8_t service_data[16];
condato_mbed 0:556294574340 118
condato_mbed 0:556294574340 119 //const static char* CHARACTERISTIC_UUID = "1d6ba3db-d405-4034-96fc-78942ef7075f";
condato_mbed 0:556294574340 120
condato_mbed 0:556294574340 121 uint16_t customServiceUUID = 0xA000;
condato_mbed 0:556294574340 122 uint16_t readCharUUID = 0xA001;
condato_mbed 0:556294574340 123 uint16_t writeCharUUID = 0xA002;
condato_mbed 0:556294574340 124 uint16_t battService = 0x180F;
condato_mbed 0:556294574340 125
condato_mbed 0:556294574340 126 const static char DEVICE_NAME[] = "Cold Chain Logger";
condato_mbed 0:556294574340 127
condato_mbed 0:556294574340 128 static const uint16_t uuid16_list[] = {0xFFFF};
condato_mbed 0:556294574340 129 //static const uint8_t advData[26];
condato_mbed 0:556294574340 130
condato_mbed 0:556294574340 131 //UUID service_uuid = UUID(SERVICE_UUID);
condato_mbed 0:556294574340 132 //UUID characteristic_uuid = UUID(CHARACTERISTIC_UUID);
condato_mbed 0:556294574340 133
condato_mbed 0:556294574340 134 //Gap::ConnectionParams_t fast;
condato_mbed 0:556294574340 135
condato_mbed 0:556294574340 136 // Set Up custom Charatiristics
condato_mbed 0:556294574340 137 static uint8_t readValue[360];
condato_mbed 0:556294574340 138 //ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readValue)> readChar(readCharUUID, readValue);
condato_mbed 0:556294574340 139 ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readValue)> readChar(readCharUUID, readValue, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY ,NULL,0);
condato_mbed 0:556294574340 140
condato_mbed 0:556294574340 141 static uint8_t writeValue[20];
condato_mbed 0:556294574340 142 //WriteOnlyArrayGattCharacteristic<uint8_t, sizeof(writeValue)> writeChar(writeCharUUID, writeValue);
condato_mbed 0:556294574340 143 WriteOnlyArrayGattCharacteristic<uint8_t, sizeof(writeValue)> writeChar(writeCharUUID, writeValue, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE ,NULL,0);
condato_mbed 0:556294574340 144
condato_mbed 0:556294574340 145 // Set up custom service
condato_mbed 0:556294574340 146 GattCharacteristic *characteristics[] = {&readChar, &writeChar};
condato_mbed 0:556294574340 147 GattService customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
condato_mbed 0:556294574340 148
condato_mbed 0:556294574340 149 //Battery service
condato_mbed 0:556294574340 150 uint8_t batteryLevel = 50;
condato_mbed 0:556294574340 151 static BatteryService* batteryServicePtr;
condato_mbed 0:556294574340 152
condato_mbed 0:556294574340 153 void periodicCallback(void)
condato_mbed 0:556294574340 154 {
condato_mbed 0:556294574340 155 b = !b;
condato_mbed 0:556294574340 156 }
condato_mbed 0:556294574340 157
condato_mbed 0:556294574340 158 void writeLedCallback(void)
condato_mbed 0:556294574340 159 {
condato_mbed 0:556294574340 160 b = !b;
condato_mbed 0:556294574340 161 ticker.detach();
condato_mbed 0:556294574340 162 }
condato_mbed 0:556294574340 163
condato_mbed 0:556294574340 164 void sendLedCallback(void)
condato_mbed 0:556294574340 165 {
condato_mbed 0:556294574340 166 b = !b;
condato_mbed 0:556294574340 167 if(sendLedCounter == 2){
condato_mbed 0:556294574340 168 ticker.detach();
condato_mbed 0:556294574340 169 sendLedCounter = 0;
condato_mbed 0:556294574340 170 }else{
condato_mbed 0:556294574340 171 sendLedCounter++;
condato_mbed 0:556294574340 172 }
condato_mbed 0:556294574340 173 }
condato_mbed 0:556294574340 174
condato_mbed 0:556294574340 175 void clear_buffer(){
condato_mbed 0:556294574340 176 if(response != 's'){
condato_mbed 0:556294574340 177 counter_m = 0;
condato_mbed 0:556294574340 178 }else if(response != 'l'){
condato_mbed 0:556294574340 179 counter_l = 0;
condato_mbed 0:556294574340 180 }
condato_mbed 0:556294574340 181 ble_buff_line = 0;
condato_mbed 0:556294574340 182 memset(&ble_buff[0][0], 0, sizeof(ble_buff));
condato_mbed 0:556294574340 183 memset(&readValue[0], 0, sizeof(readValue));
condato_mbed 0:556294574340 184 memset(&writeValue[0], 0, sizeof(writeValue));
condato_mbed 0:556294574340 185 }
condato_mbed 0:556294574340 186
condato_mbed 0:556294574340 187 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *)
condato_mbed 0:556294574340 188 {
condato_mbed 0:556294574340 189 printf("\nDisconnection callback\n");
condato_mbed 0:556294574340 190 clear_buffer();
condato_mbed 0:556294574340 191 connected_cancel.detach();
condato_mbed 0:556294574340 192 ticker.attach(periodicCallback, 0.5);
condato_mbed 0:556294574340 193 advertise_cancel.attach(&BT_false, user_config_para.advertise);
condato_mbed 0:556294574340 194 char string[] = "Bluetooth disconnected";
condato_mbed 0:556294574340 195 write_to_sd_log_single(string);
condato_mbed 0:556294574340 196 conn_state = 0;
condato_mbed 0:556294574340 197 counter_m = 0;
condato_mbed 0:556294574340 198 counter_l = 0;
condato_mbed 0:556294574340 199 BLE::Instance(BLE::DEFAULT_INSTANCE).startAdvertising();
condato_mbed 0:556294574340 200 printf("\nAdvertising\n");
condato_mbed 0:556294574340 201 }
condato_mbed 0:556294574340 202
condato_mbed 0:556294574340 203 void updateSensorValue() {
condato_mbed 0:556294574340 204 float batteryProcent = (100 / 0.271) * (battery.read() - 0.704);
condato_mbed 0:556294574340 205 if(batteryProcent > 97){
condato_mbed 0:556294574340 206 batteryProcent = 100;
condato_mbed 0:556294574340 207 }
condato_mbed 0:556294574340 208 batteryLevel = batteryProcent;
condato_mbed 0:556294574340 209 batteryServicePtr->updateBatteryLevel(batteryProcent);
condato_mbed 0:556294574340 210 }
condato_mbed 0:556294574340 211
condato_mbed 0:556294574340 212 void printMacAddress()
condato_mbed 0:556294574340 213 {
condato_mbed 0:556294574340 214 Gap::AddressType_t addr_type;
condato_mbed 0:556294574340 215 Gap::Address_t address;
condato_mbed 0:556294574340 216 BLE::Instance().gap().getAddress(&addr_type, address);
condato_mbed 0:556294574340 217 printf("Device MAC address: ");
condato_mbed 0:556294574340 218 for (int i = 5; i >= 1; i--){
condato_mbed 0:556294574340 219 printf("%02x:", address[i]);
condato_mbed 0:556294574340 220 }
condato_mbed 0:556294574340 221 printf("%02x\r\n", address[0]);
condato_mbed 0:556294574340 222 }
condato_mbed 0:556294574340 223
condato_mbed 0:556294574340 224 void writeCharCallback(const GattWriteCallbackParams *params)
condato_mbed 0:556294574340 225 {
condato_mbed 0:556294574340 226 printf("\nData received\n");
condato_mbed 0:556294574340 227 //b = 1;
condato_mbed 0:556294574340 228 //ticker.attach(writeLedCallback, 0.5);
condato_mbed 0:556294574340 229 memset(&readValue[0], 0, sizeof(readValue));
condato_mbed 0:556294574340 230 memset(&writeValue[0], 0, sizeof(writeValue));
condato_mbed 0:556294574340 231 BLE::Instance(BLE::DEFAULT_INSTANCE).gattServer().write(readChar.getValueHandle(), params->data, params->len);
condato_mbed 0:556294574340 232 for(int i = 0; i < 15; i++){
condato_mbed 0:556294574340 233 ble_buff[0][i + ble_buff_line] = readValue[i];
condato_mbed 0:556294574340 234 }
condato_mbed 0:556294574340 235 printf("\n%s received (ble_buff)", ble_buff[0]);
condato_mbed 0:556294574340 236 ble_buff_line = ble_buff_line + 15;
condato_mbed 0:556294574340 237 if(readValue[0] > 0x60 && readValue[0] < 0x7a){
condato_mbed 0:556294574340 238 response = readValue[0];
condato_mbed 0:556294574340 239 }else if(response != 's' && response != 'l' && response != 'e' && response != 't'){
condato_mbed 0:556294574340 240 clear_buffer();
condato_mbed 0:556294574340 241 }
condato_mbed 0:556294574340 242 printf("\nresponse: %c\n", response);
condato_mbed 0:556294574340 243 }
condato_mbed 0:556294574340 244
condato_mbed 0:556294574340 245 void disconnect(){
condato_mbed 0:556294574340 246 Gap::DisconnectionReason_t res=Gap::LOCAL_HOST_TERMINATED_CONNECTION;
condato_mbed 0:556294574340 247 BLE::Instance(BLE::DEFAULT_INSTANCE).gap().disconnect(res);
condato_mbed 0:556294574340 248 }
condato_mbed 0:556294574340 249
condato_mbed 0:556294574340 250 void whenConnected(const Gap::ConnectionCallbackParams_t *)
condato_mbed 0:556294574340 251 {
condato_mbed 0:556294574340 252 printf("\nConnected\n");
condato_mbed 0:556294574340 253 advertise_cancel.detach();
condato_mbed 0:556294574340 254 ticker.detach();
condato_mbed 0:556294574340 255 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 256 conn_state = 1;
condato_mbed 0:556294574340 257 if(error_status == true){
condato_mbed 0:556294574340 258 r = 1;
condato_mbed 0:556294574340 259 }
condato_mbed 0:556294574340 260 b = 0;
condato_mbed 0:556294574340 261 response = '0';
condato_mbed 0:556294574340 262 char string[] = "Bluetooth connected";
condato_mbed 0:556294574340 263 write_to_sd_log_single(string);
condato_mbed 0:556294574340 264 }
condato_mbed 0:556294574340 265
condato_mbed 0:556294574340 266 void onDataSent(unsigned count)
condato_mbed 0:556294574340 267 {
condato_mbed 0:556294574340 268 printf("%c", ble_buff[ble_buff_line][count]);
condato_mbed 0:556294574340 269 readValue[count] = ble_buff[ble_buff_line][count];
condato_mbed 0:556294574340 270 }
condato_mbed 0:556294574340 271
condato_mbed 0:556294574340 272 void after_BL(){
condato_mbed 0:556294574340 273 after_BT = false;
condato_mbed 0:556294574340 274 after_BLE.detach();
condato_mbed 0:556294574340 275 }
condato_mbed 0:556294574340 276
condato_mbed 0:556294574340 277 void BT_false()
condato_mbed 0:556294574340 278 {
condato_mbed 0:556294574340 279 BLE &ble = BLE::Instance();
condato_mbed 0:556294574340 280 in_BT = false;
condato_mbed 0:556294574340 281 b = 1;
condato_mbed 0:556294574340 282 conn_state = 0;
condato_mbed 0:556294574340 283 quit = 0;
condato_mbed 0:556294574340 284 clear_buffer();
condato_mbed 0:556294574340 285 ticker.detach();
condato_mbed 0:556294574340 286 advertise_cancel.detach();
condato_mbed 0:556294574340 287 connected_cancel.detach();
condato_mbed 0:556294574340 288 disconnect();
condato_mbed 0:556294574340 289 wait(0.5);
condato_mbed 0:556294574340 290 if(error_status == true){
condato_mbed 0:556294574340 291 r = 0;
condato_mbed 0:556294574340 292 }
condato_mbed 0:556294574340 293 if(shipping == true && pause == false){
condato_mbed 0:556294574340 294 mess_timer.attach(&mess_handler, (float)user_config_para.interval);
condato_mbed 0:556294574340 295 }
condato_mbed 0:556294574340 296 after_BT = true;
condato_mbed 0:556294574340 297 after_BLE.attach(after_BL, 1);
condato_mbed 0:556294574340 298 response = '0';
condato_mbed 0:556294574340 299 }
condato_mbed 0:556294574340 300
condato_mbed 0:556294574340 301 void BT_true()
condato_mbed 0:556294574340 302 {
condato_mbed 0:556294574340 303 in_BT = true;
condato_mbed 0:556294574340 304 next_state = 2;
condato_mbed 0:556294574340 305 }
condato_mbed 0:556294574340 306
condato_mbed 0:556294574340 307 void log_count(){
condato_mbed 0:556294574340 308 fileSystem.unmount();
condato_mbed 0:556294574340 309 fflush(stdout);
condato_mbed 0:556294574340 310
condato_mbed 0:556294574340 311 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 312 FILE * log = fopen ("/fs/log.csv", "rb");
condato_mbed 0:556294574340 313
condato_mbed 0:556294574340 314 int ch = 0;
condato_mbed 0:556294574340 315 int lines = 0;
condato_mbed 0:556294574340 316
condato_mbed 0:556294574340 317 while(!feof(log)){
condato_mbed 0:556294574340 318 ch = fgetc(log);
condato_mbed 0:556294574340 319 if(ch == '\n')
condato_mbed 0:556294574340 320 {
condato_mbed 0:556294574340 321 lines++;
condato_mbed 0:556294574340 322 }
condato_mbed 0:556294574340 323 }
condato_mbed 0:556294574340 324
condato_mbed 0:556294574340 325 log_id = lines;
condato_mbed 0:556294574340 326
condato_mbed 0:556294574340 327 fclose(log);
condato_mbed 0:556294574340 328 fileSystem.unmount();
condato_mbed 0:556294574340 329
condato_mbed 0:556294574340 330 sprintf(logs_array,"%d", lines);
condato_mbed 0:556294574340 331 }
condato_mbed 0:556294574340 332
condato_mbed 0:556294574340 333 void messdaten_count(){
condato_mbed 0:556294574340 334 fileSystem.unmount();
condato_mbed 0:556294574340 335 fflush(stdout);
condato_mbed 0:556294574340 336
condato_mbed 0:556294574340 337 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 338 FILE * messdaten = fopen ("/fs/messdaten.csv", "rb");
condato_mbed 0:556294574340 339
condato_mbed 0:556294574340 340 int ch = 0;
condato_mbed 0:556294574340 341 int lines = 0;
condato_mbed 0:556294574340 342
condato_mbed 0:556294574340 343 while(!feof(messdaten)){
condato_mbed 0:556294574340 344 ch = fgetc(messdaten);
condato_mbed 0:556294574340 345 if(ch == '\n')
condato_mbed 0:556294574340 346 {
condato_mbed 0:556294574340 347 lines++;
condato_mbed 0:556294574340 348 }
condato_mbed 0:556294574340 349 }
condato_mbed 0:556294574340 350
condato_mbed 0:556294574340 351 fclose(messdaten);
condato_mbed 0:556294574340 352 fileSystem.unmount();
condato_mbed 0:556294574340 353
condato_mbed 0:556294574340 354 measure_id = lines;
condato_mbed 0:556294574340 355
condato_mbed 0:556294574340 356 sprintf(messungen,"%d", lines);
condato_mbed 0:556294574340 357 }
condato_mbed 0:556294574340 358
condato_mbed 0:556294574340 359 void unixtime_to_char_array(){
condato_mbed 0:556294574340 360 tm *current;
condato_mbed 0:556294574340 361 time(&now);
condato_mbed 0:556294574340 362 current = localtime (&now);
condato_mbed 0:556294574340 363 printf ("\nDate: 20%02d-%02d-%02d %02d:%02d:%02d\r\n", current->tm_year - 100, current->tm_mon + 1, current->tm_mday, current->tm_hour, current->tm_min, current->tm_sec);
condato_mbed 0:556294574340 364
condato_mbed 0:556294574340 365 printf("\nSekunden als Dezimal: %d\n", time(&now));
condato_mbed 0:556294574340 366
condato_mbed 0:556294574340 367 sprintf(seconds,"%d", time(&now));
condato_mbed 0:556294574340 368
condato_mbed 0:556294574340 369 printf("\nSekunden als String: %s\n", seconds);
condato_mbed 0:556294574340 370 }
condato_mbed 0:556294574340 371
condato_mbed 0:556294574340 372 int array_to_int(int z){
condato_mbed 0:556294574340 373 int zahl[z];
condato_mbed 0:556294574340 374
condato_mbed 0:556294574340 375 for(int i = 0; i < z; i++){
condato_mbed 0:556294574340 376 zahl[i] = readValue[i];
condato_mbed 0:556294574340 377 zahl[i] = zahl[i] - 48;
condato_mbed 0:556294574340 378 }
condato_mbed 0:556294574340 379
condato_mbed 0:556294574340 380 unsigned long ganzes = 0;
condato_mbed 0:556294574340 381 unsigned long log = 1;
condato_mbed 0:556294574340 382 int j = z;
condato_mbed 0:556294574340 383 do{
condato_mbed 0:556294574340 384 j--;
condato_mbed 0:556294574340 385 ganzes = ganzes + log * zahl[j];
condato_mbed 0:556294574340 386 log = log * 10;
condato_mbed 0:556294574340 387 }while(j > 0);
condato_mbed 0:556294574340 388
condato_mbed 0:556294574340 389 if((int)ganzes < 0){
condato_mbed 0:556294574340 390 ganzes = 0;
condato_mbed 0:556294574340 391 }
condato_mbed 0:556294574340 392 return ganzes;
condato_mbed 0:556294574340 393 }
condato_mbed 0:556294574340 394
condato_mbed 0:556294574340 395 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
condato_mbed 0:556294574340 396 {
condato_mbed 0:556294574340 397 BLE &ble = params->ble;
condato_mbed 0:556294574340 398 ble_error_t error = params->error;
condato_mbed 0:556294574340 399
condato_mbed 0:556294574340 400 if (error != BLE_ERROR_NONE) {
condato_mbed 0:556294574340 401 return;
condato_mbed 0:556294574340 402 }
condato_mbed 0:556294574340 403
condato_mbed 0:556294574340 404 read_id();
condato_mbed 0:556294574340 405
condato_mbed 0:556294574340 406 /* Setup advertising */
condato_mbed 0:556294574340 407 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT
condato_mbed 0:556294574340 408 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // advertising type
condato_mbed 0:556294574340 409 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name
condato_mbed 0:556294574340 410 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::DEVICE_ID, (uint8_t *)device_id, 5); // add name
condato_mbed 0:556294574340 411 //ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet
condato_mbed 0:556294574340 412 ble.gap().setAdvertisingInterval(100); // 100ms.
condato_mbed 0:556294574340 413
condato_mbed 0:556294574340 414 /* Add custom service */
condato_mbed 0:556294574340 415 ble.gattServer().addService(customService);
condato_mbed 0:556294574340 416
condato_mbed 0:556294574340 417 /* Add battery service */
condato_mbed 0:556294574340 418 batteryServicePtr = new BatteryService(ble, batteryLevel);
condato_mbed 0:556294574340 419
condato_mbed 0:556294574340 420 ble.gap().onDisconnection(disconnectionCallback);
condato_mbed 0:556294574340 421 ble.gap().onConnection(whenConnected);
condato_mbed 0:556294574340 422 ble.gattServer().onDataWritten(writeCharCallback);
condato_mbed 0:556294574340 423 ble.gattServer().onDataSent(onDataSent);
condato_mbed 0:556294574340 424
condato_mbed 0:556294574340 425 /* Start advertising */
condato_mbed 0:556294574340 426 ble.gap().startAdvertising();
condato_mbed 0:556294574340 427 }
condato_mbed 0:556294574340 428
condato_mbed 0:556294574340 429 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
condato_mbed 0:556294574340 430 BLE &ble = BLE::Instance();
condato_mbed 0:556294574340 431 updateSensorValue();
condato_mbed 0:556294574340 432 }
condato_mbed 0:556294574340 433
condato_mbed 0:556294574340 434 void dataSentSend(){
condato_mbed 0:556294574340 435 response = '0';
condato_mbed 0:556294574340 436 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 437 }
condato_mbed 0:556294574340 438
condato_mbed 0:556294574340 439 void dataSent(){
condato_mbed 0:556294574340 440 //wait(1);
condato_mbed 0:556294574340 441 //b = 1;
condato_mbed 0:556294574340 442 //ticker.attach(sendLedCallback, 0.5);
condato_mbed 0:556294574340 443 response = '0';
condato_mbed 0:556294574340 444 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 445 }
condato_mbed 0:556294574340 446
condato_mbed 0:556294574340 447 void swap(int num1, int num2){
condato_mbed 0:556294574340 448 int temp = messwerte[num1];
condato_mbed 0:556294574340 449 messwerte[num1] = messwerte[num2];
condato_mbed 0:556294574340 450 messwerte[num2] = temp;
condato_mbed 0:556294574340 451 }
condato_mbed 0:556294574340 452
condato_mbed 0:556294574340 453 int partition(int left, int right, int pivot){
condato_mbed 0:556294574340 454 int leftPointer = left - 1;
condato_mbed 0:556294574340 455 int rightPointer = right;
condato_mbed 0:556294574340 456
condato_mbed 0:556294574340 457 while(true){
condato_mbed 0:556294574340 458 while(messwerte[++leftPointer] < pivot){
condato_mbed 0:556294574340 459 //do nothing
condato_mbed 0:556294574340 460 }
condato_mbed 0:556294574340 461
condato_mbed 0:556294574340 462 while(rightPointer > 0 && messwerte[--rightPointer] > pivot){
condato_mbed 0:556294574340 463 //do nothing
condato_mbed 0:556294574340 464 }
condato_mbed 0:556294574340 465
condato_mbed 0:556294574340 466 if(leftPointer >= rightPointer){
condato_mbed 0:556294574340 467 break;
condato_mbed 0:556294574340 468 }else{
condato_mbed 0:556294574340 469 swap(leftPointer, rightPointer);
condato_mbed 0:556294574340 470 }
condato_mbed 0:556294574340 471 }
condato_mbed 0:556294574340 472 swap(leftPointer, right);
condato_mbed 0:556294574340 473
condato_mbed 0:556294574340 474 return leftPointer;
condato_mbed 0:556294574340 475 }
condato_mbed 0:556294574340 476
condato_mbed 0:556294574340 477 void quickSort(int left, int right){
condato_mbed 0:556294574340 478 if(right - left <= 0){
condato_mbed 0:556294574340 479 return;
condato_mbed 0:556294574340 480 }else{
condato_mbed 0:556294574340 481 int pivot = messwerte[right];
condato_mbed 0:556294574340 482 int partionPoint = partition(left, right, pivot);
condato_mbed 0:556294574340 483 quickSort(left, partionPoint - 1);
condato_mbed 0:556294574340 484 quickSort(partionPoint + 1, right);
condato_mbed 0:556294574340 485 }
condato_mbed 0:556294574340 486 }
condato_mbed 0:556294574340 487
condato_mbed 0:556294574340 488 void BLE_handler()
condato_mbed 0:556294574340 489 {
condato_mbed 0:556294574340 490 BLE &ble = BLE::Instance();
condato_mbed 0:556294574340 491 b = 0;
condato_mbed 0:556294574340 492 ticker.attach(periodicCallback, 0.5);
condato_mbed 0:556294574340 493 advertise_cancel.attach(&BT_false, user_config_para.advertise);
condato_mbed 0:556294574340 494 clear_buffer();
condato_mbed 0:556294574340 495 next_state = 0;
condato_mbed 0:556294574340 496 printf("\nBLE - ON\n");
condato_mbed 0:556294574340 497 printf("\nAdvertising\n");
condato_mbed 0:556294574340 498
condato_mbed 0:556294574340 499 while( quit )
condato_mbed 0:556294574340 500 {
condato_mbed 0:556294574340 501 ble.waitForEvent();
condato_mbed 0:556294574340 502 ble.onEventsToProcess(scheduleBleEventsProcessing);
condato_mbed 0:556294574340 503
condato_mbed 0:556294574340 504 while ( conn_state ) //Abfrage zum Verbindungsstatus
condato_mbed 0:556294574340 505 {
condato_mbed 0:556294574340 506 ble.waitForEvent();
condato_mbed 0:556294574340 507 ble.onEventsToProcess(scheduleBleEventsProcessing);
condato_mbed 0:556294574340 508
condato_mbed 0:556294574340 509 /*
condato_mbed 0:556294574340 510 if(readValue[0] == NULL){
condato_mbed 0:556294574340 511 ble.onEventsToProcess(scheduleBleEventsProcessing);
condato_mbed 0:556294574340 512 }
condato_mbed 0:556294574340 513 */
condato_mbed 0:556294574340 514
condato_mbed 0:556294574340 515 switch ( response )
condato_mbed 0:556294574340 516 {
condato_mbed 0:556294574340 517 /*
condato_mbed 0:556294574340 518 case 's': // Messwerte übertragen
condato_mbed 0:556294574340 519 {
condato_mbed 0:556294574340 520 connected_cancel.detach();
condato_mbed 0:556294574340 521 clear_buffer();
condato_mbed 0:556294574340 522
condato_mbed 0:556294574340 523 unsigned int length = 0;
condato_mbed 0:556294574340 524
condato_mbed 0:556294574340 525 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 526 while(readValue[0] == NULL || readValue[0] < 0x31|| readValue[0] > 0x39){
condato_mbed 0:556294574340 527 clear_buffer();
condato_mbed 0:556294574340 528 ble.waitForEvent();
condato_mbed 0:556294574340 529 if(conn_state == 0){
condato_mbed 0:556294574340 530 break;
condato_mbed 0:556294574340 531 }
condato_mbed 0:556294574340 532 }
condato_mbed 0:556294574340 533 connected_cancel.detach();
condato_mbed 0:556294574340 534 if(conn_state == 1){
condato_mbed 0:556294574340 535 int a = 0;
condato_mbed 0:556294574340 536 while(readValue[a] != NULL){
condato_mbed 0:556294574340 537 a++;
condato_mbed 0:556294574340 538 }
condato_mbed 0:556294574340 539 int id = array_to_int(a);
condato_mbed 0:556294574340 540 clear_buffer();
condato_mbed 0:556294574340 541
condato_mbed 0:556294574340 542 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 543 FILE * messdaten = fopen ("/fs/messdaten.csv", "rb");
condato_mbed 0:556294574340 544
condato_mbed 0:556294574340 545 fseek (messdaten, 0, SEEK_END);
condato_mbed 0:556294574340 546 length = ftell (messdaten);
condato_mbed 0:556294574340 547 fseek (messdaten, 0, SEEK_SET);
condato_mbed 0:556294574340 548
condato_mbed 0:556294574340 549 if(id > measure_id){
condato_mbed 0:556294574340 550 printf("\nMeasuremnt ID %d doesn't exist!\n", id);
condato_mbed 0:556294574340 551 char string[] = "Call of an inexistent measurement ID";
condato_mbed 0:556294574340 552 write_to_sd_log_single(string);
condato_mbed 0:556294574340 553
condato_mbed 0:556294574340 554 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 555 onDataSent(0);
condato_mbed 0:556294574340 556 }else{
condato_mbed 0:556294574340 557 unsigned long ch = 0;
condato_mbed 0:556294574340 558 unsigned long lines = 0;
condato_mbed 0:556294574340 559 unsigned long i = 0;
condato_mbed 0:556294574340 560 unsigned long j = 1;
condato_mbed 0:556294574340 561 unsigned long c = 0;
condato_mbed 0:556294574340 562
condato_mbed 0:556294574340 563 if(id == 1){
condato_mbed 0:556294574340 564 fseek(messdaten, 0, SEEK_SET);
condato_mbed 0:556294574340 565 }else{
condato_mbed 0:556294574340 566 while((id - 1) != lines){
condato_mbed 0:556294574340 567 ch = fgetc(messdaten);
condato_mbed 0:556294574340 568 if(ch == '\n'){
condato_mbed 0:556294574340 569 lines++;
condato_mbed 0:556294574340 570 }
condato_mbed 0:556294574340 571 i++;
condato_mbed 0:556294574340 572 }
condato_mbed 0:556294574340 573 fseek(messdaten, i, SEEK_SET);
condato_mbed 0:556294574340 574 c = i;
condato_mbed 0:556294574340 575 }
condato_mbed 0:556294574340 576 if(id == measure_id){
condato_mbed 0:556294574340 577 while(fgetc(messdaten) != EOF){
condato_mbed 0:556294574340 578 i++;
condato_mbed 0:556294574340 579 j++;
condato_mbed 0:556294574340 580 }
condato_mbed 0:556294574340 581 }else{
condato_mbed 0:556294574340 582 while(fgetc(messdaten) != '\n'){
condato_mbed 0:556294574340 583 i++;
condato_mbed 0:556294574340 584 j++;
condato_mbed 0:556294574340 585 }
condato_mbed 0:556294574340 586 }
condato_mbed 0:556294574340 587 fseek(messdaten, c, SEEK_SET);
condato_mbed 0:556294574340 588 fread (ble_buff[ble_buff_line], 1, j, messdaten);
condato_mbed 0:556294574340 589
condato_mbed 0:556294574340 590 for(int l = 0; l < j; l++){
condato_mbed 0:556294574340 591 onDataSent(l);
condato_mbed 0:556294574340 592 }
condato_mbed 0:556294574340 593 }
condato_mbed 0:556294574340 594
condato_mbed 0:556294574340 595 fclose(messdaten);
condato_mbed 0:556294574340 596 fileSystem.unmount();
condato_mbed 0:556294574340 597 fflush(stdout);
condato_mbed 0:556294574340 598
condato_mbed 0:556294574340 599 dataSentSend();
condato_mbed 0:556294574340 600 }
condato_mbed 0:556294574340 601 break;
condato_mbed 0:556294574340 602 }
condato_mbed 0:556294574340 603 */
condato_mbed 0:556294574340 604
condato_mbed 0:556294574340 605 case 's': // Messwerte übertragen
condato_mbed 0:556294574340 606 {
condato_mbed 0:556294574340 607 connected_cancel.detach();
condato_mbed 0:556294574340 608 clear_buffer();
condato_mbed 0:556294574340 609
condato_mbed 0:556294574340 610 if(counter_m == 0){
condato_mbed 0:556294574340 611 char string[] = "Command 's' (send measuremnts) received";
condato_mbed 0:556294574340 612 write_to_sd_log_single(string);
condato_mbed 0:556294574340 613 }
condato_mbed 0:556294574340 614
condato_mbed 0:556294574340 615 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 616 while(readValue[0] == NULL || readValue[0] < 0x31|| readValue[0] > 0x39){
condato_mbed 0:556294574340 617 clear_buffer();
condato_mbed 0:556294574340 618 ble.waitForEvent();
condato_mbed 0:556294574340 619 if(conn_state == 0){
condato_mbed 0:556294574340 620 break;
condato_mbed 0:556294574340 621 }
condato_mbed 0:556294574340 622 }
condato_mbed 0:556294574340 623 connected_cancel.detach();
condato_mbed 0:556294574340 624 if(conn_state == 1){
condato_mbed 0:556294574340 625
condato_mbed 0:556294574340 626 if(counter_m == 0){
condato_mbed 0:556294574340 627 char string1[] = "Sending measuremnts...";
condato_mbed 0:556294574340 628 write_to_sd_log_single(string1);
condato_mbed 0:556294574340 629 }
condato_mbed 0:556294574340 630
condato_mbed 0:556294574340 631 int a = 0;
condato_mbed 0:556294574340 632 while(readValue[a] != NULL){
condato_mbed 0:556294574340 633 a++;
condato_mbed 0:556294574340 634 }
condato_mbed 0:556294574340 635 int id = array_to_int(a);
condato_mbed 0:556294574340 636 clear_buffer();
condato_mbed 0:556294574340 637
condato_mbed 0:556294574340 638 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 639 FILE * messdaten = fopen ("/fs/messdaten.csv", "rb");
condato_mbed 0:556294574340 640
condato_mbed 0:556294574340 641 /* Daten senden */
condato_mbed 0:556294574340 642
condato_mbed 0:556294574340 643 if(id > measure_id){
condato_mbed 0:556294574340 644 printf("\nMeasuremnt ID %d doesn't exist!\n", id);
condato_mbed 0:556294574340 645 char string[] = "Call of an inexistent measurement ID";
condato_mbed 0:556294574340 646 write_to_sd_log_single(string);
condato_mbed 0:556294574340 647
condato_mbed 0:556294574340 648 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 649 onDataSent(0);
condato_mbed 0:556294574340 650 }else{
condato_mbed 0:556294574340 651 unsigned long ch = 0;
condato_mbed 0:556294574340 652 unsigned long lines = 0;
condato_mbed 0:556294574340 653 unsigned long i = 0;
condato_mbed 0:556294574340 654 unsigned long j = 1;
condato_mbed 0:556294574340 655 unsigned long c = 0;
condato_mbed 0:556294574340 656
condato_mbed 0:556294574340 657 if(id == 1){
condato_mbed 0:556294574340 658 fseek(messdaten, 0, SEEK_SET);
condato_mbed 0:556294574340 659 }else{
condato_mbed 0:556294574340 660 while((id - 1) != lines){
condato_mbed 0:556294574340 661 ch = fgetc(messdaten);
condato_mbed 0:556294574340 662 if(ch == '\n'){
condato_mbed 0:556294574340 663 lines++;
condato_mbed 0:556294574340 664 }
condato_mbed 0:556294574340 665 i++;
condato_mbed 0:556294574340 666 }
condato_mbed 0:556294574340 667 fseek(messdaten, i, SEEK_SET);
condato_mbed 0:556294574340 668 c = i;
condato_mbed 0:556294574340 669 }
condato_mbed 0:556294574340 670 if(id == measure_id){
condato_mbed 0:556294574340 671 while(fgetc(messdaten) != EOF){
condato_mbed 0:556294574340 672 i++;
condato_mbed 0:556294574340 673 j++;
condato_mbed 0:556294574340 674 }
condato_mbed 0:556294574340 675 }else{
condato_mbed 0:556294574340 676 int y = 0;
condato_mbed 0:556294574340 677 while(y < 10){
condato_mbed 0:556294574340 678 i++;
condato_mbed 0:556294574340 679 j++;
condato_mbed 0:556294574340 680 ch = fgetc(messdaten);
condato_mbed 0:556294574340 681 if(ch == '\n'){
condato_mbed 0:556294574340 682 y++;
condato_mbed 0:556294574340 683 }
condato_mbed 0:556294574340 684 if(ch == EOF){
condato_mbed 0:556294574340 685 break;
condato_mbed 0:556294574340 686 }
condato_mbed 0:556294574340 687 }
condato_mbed 0:556294574340 688 i--;
condato_mbed 0:556294574340 689 j--;
condato_mbed 0:556294574340 690 }
condato_mbed 0:556294574340 691 fseek(messdaten, c, SEEK_SET);
condato_mbed 0:556294574340 692 fread (ble_buff[ble_buff_line], 1, j, messdaten);
condato_mbed 0:556294574340 693
condato_mbed 0:556294574340 694 for(int l = 0; l < j; l++){
condato_mbed 0:556294574340 695 onDataSent(l);
condato_mbed 0:556294574340 696 }
condato_mbed 0:556294574340 697 }
condato_mbed 0:556294574340 698
condato_mbed 0:556294574340 699 fclose(messdaten);
condato_mbed 0:556294574340 700 fileSystem.unmount();
condato_mbed 0:556294574340 701 fflush(stdout);
condato_mbed 0:556294574340 702
condato_mbed 0:556294574340 703 counter_m += 10;
condato_mbed 0:556294574340 704 if(counter_m >= measure_id){
condato_mbed 0:556294574340 705 char string2[] = "Sending measuremnts complete";
condato_mbed 0:556294574340 706 write_to_sd_log_single(string2);
condato_mbed 0:556294574340 707 counter_m = 0;
condato_mbed 0:556294574340 708 dataSent();
condato_mbed 0:556294574340 709 }else{
condato_mbed 0:556294574340 710 dataSentSend();
condato_mbed 0:556294574340 711 }
condato_mbed 0:556294574340 712 }
condato_mbed 0:556294574340 713 break;
condato_mbed 0:556294574340 714 }
condato_mbed 0:556294574340 715
condato_mbed 0:556294574340 716 case 'g': //Config senden
condato_mbed 0:556294574340 717 {
condato_mbed 0:556294574340 718 connected_cancel.detach();
condato_mbed 0:556294574340 719 clear_buffer();
condato_mbed 0:556294574340 720
condato_mbed 0:556294574340 721 char string[] = "Command 'g' (send config settings) received";
condato_mbed 0:556294574340 722 write_to_sd_log_single(string);
condato_mbed 0:556294574340 723
condato_mbed 0:556294574340 724 unsigned int length = 0;
condato_mbed 0:556294574340 725
condato_mbed 0:556294574340 726 char string_1[] = "Sending config..";
condato_mbed 0:556294574340 727 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 728
condato_mbed 0:556294574340 729 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 730 FILE * user_config = fopen ("/fs/user_config.csv", "rb");
condato_mbed 0:556294574340 731
condato_mbed 0:556294574340 732 fseek (user_config, 0, SEEK_END);
condato_mbed 0:556294574340 733 length = ftell (user_config);
condato_mbed 0:556294574340 734 fseek (user_config, 0, SEEK_SET);
condato_mbed 0:556294574340 735
condato_mbed 0:556294574340 736 fread (ble_buff, 1, length, user_config);
condato_mbed 0:556294574340 737
condato_mbed 0:556294574340 738 fclose(user_config);
condato_mbed 0:556294574340 739 fileSystem.unmount();
condato_mbed 0:556294574340 740
condato_mbed 0:556294574340 741 fflush(stdout);
condato_mbed 0:556294574340 742
condato_mbed 0:556294574340 743 for(int i = 0; i < length; i++){
condato_mbed 0:556294574340 744 onDataSent(i);
condato_mbed 0:556294574340 745 }
condato_mbed 0:556294574340 746
condato_mbed 0:556294574340 747 char string_2[] = "Sending config complete";
condato_mbed 0:556294574340 748 write_to_sd_log_single(string_2);
condato_mbed 0:556294574340 749
condato_mbed 0:556294574340 750 dataSent();
condato_mbed 0:556294574340 751
condato_mbed 0:556294574340 752 break;
condato_mbed 0:556294574340 753 }
condato_mbed 0:556294574340 754
condato_mbed 0:556294574340 755 case 'c': // Config auf Werkeinstellungen zurücksetzen
condato_mbed 0:556294574340 756 {
condato_mbed 0:556294574340 757 connected_cancel.detach();
condato_mbed 0:556294574340 758 clear_buffer();
condato_mbed 0:556294574340 759
condato_mbed 0:556294574340 760 char string[] = "Command 'c' (reset config to standard) received";
condato_mbed 0:556294574340 761 write_to_sd_log_single(string);
condato_mbed 0:556294574340 762
condato_mbed 0:556294574340 763 if(load_standard_config() == 1){
condato_mbed 0:556294574340 764 char string[] = "Config reseted to factory settings";
condato_mbed 0:556294574340 765 write_to_sd_log_single(string);
condato_mbed 0:556294574340 766
condato_mbed 0:556294574340 767 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 768 onDataSent(0);
condato_mbed 0:556294574340 769 }else{
condato_mbed 0:556294574340 770 char string[] = "Failed to reset Config to factory settings";
condato_mbed 0:556294574340 771 write_to_sd_log_single(string);
condato_mbed 0:556294574340 772
condato_mbed 0:556294574340 773 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 774 onDataSent(0);
condato_mbed 0:556294574340 775 }
condato_mbed 0:556294574340 776
condato_mbed 0:556294574340 777 dataSent();
condato_mbed 0:556294574340 778
condato_mbed 0:556294574340 779 break;
condato_mbed 0:556294574340 780 }
condato_mbed 0:556294574340 781
condato_mbed 0:556294574340 782 case 'd': // Messwerte löschen
condato_mbed 0:556294574340 783 {
condato_mbed 0:556294574340 784 connected_cancel.detach();
condato_mbed 0:556294574340 785 clear_buffer();
condato_mbed 0:556294574340 786
condato_mbed 0:556294574340 787 char string[] = "Command 'd' (delete measurement data) received";
condato_mbed 0:556294574340 788 write_to_sd_log_single(string);
condato_mbed 0:556294574340 789
condato_mbed 0:556294574340 790 if(delete_file_messdaten() == 1){
condato_mbed 0:556294574340 791 char string_1[] = "Measuerements deleted succesfully";
condato_mbed 0:556294574340 792 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 793
condato_mbed 0:556294574340 794 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 795 onDataSent(0);
condato_mbed 0:556294574340 796 }else{
condato_mbed 0:556294574340 797 char string_1[] = "Measuerements data delete failed";
condato_mbed 0:556294574340 798 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 799
condato_mbed 0:556294574340 800 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 801 onDataSent(0);
condato_mbed 0:556294574340 802 }
condato_mbed 0:556294574340 803
condato_mbed 0:556294574340 804 dataSent();
condato_mbed 0:556294574340 805
condato_mbed 0:556294574340 806 break;
condato_mbed 0:556294574340 807 }
condato_mbed 0:556294574340 808 /*
condato_mbed 0:556294574340 809 case 'l': //Log-Datei übertragen
condato_mbed 0:556294574340 810 {
condato_mbed 0:556294574340 811
condato_mbed 0:556294574340 812 connected_cancel.detach();
condato_mbed 0:556294574340 813 clear_buffer();
condato_mbed 0:556294574340 814
condato_mbed 0:556294574340 815 unsigned int length = 0;
condato_mbed 0:556294574340 816
condato_mbed 0:556294574340 817 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 818 while(readValue[0] == NULL || readValue[0] < 0x31|| readValue[0] > 0x39){
condato_mbed 0:556294574340 819 clear_buffer();
condato_mbed 0:556294574340 820 ble.waitForEvent();
condato_mbed 0:556294574340 821 if(conn_state == 0){
condato_mbed 0:556294574340 822 break;
condato_mbed 0:556294574340 823 }
condato_mbed 0:556294574340 824 }
condato_mbed 0:556294574340 825 connected_cancel.detach();
condato_mbed 0:556294574340 826 if(conn_state == 1){
condato_mbed 0:556294574340 827 int a = 0;
condato_mbed 0:556294574340 828 while(readValue[a] != NULL){
condato_mbed 0:556294574340 829 a++;
condato_mbed 0:556294574340 830 }
condato_mbed 0:556294574340 831 int id = array_to_int(a);
condato_mbed 0:556294574340 832 clear_buffer();
condato_mbed 0:556294574340 833
condato_mbed 0:556294574340 834 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 835 FILE * log = fopen ("/fs/log.csv", "rb");
condato_mbed 0:556294574340 836
condato_mbed 0:556294574340 837 fseek (log, 0, SEEK_END);
condato_mbed 0:556294574340 838 length = ftell (log);
condato_mbed 0:556294574340 839 fseek (log, 0, SEEK_SET);
condato_mbed 0:556294574340 840
condato_mbed 0:556294574340 841
condato_mbed 0:556294574340 842
condato_mbed 0:556294574340 843 if(id > log_id){
condato_mbed 0:556294574340 844 printf("\nLog ID %d doesn't exist!\n", id);
condato_mbed 0:556294574340 845 char string[] = "Call of an inexistent log ID";
condato_mbed 0:556294574340 846 write_to_sd_log_single(string);
condato_mbed 0:556294574340 847
condato_mbed 0:556294574340 848 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 849 onDataSent(0);
condato_mbed 0:556294574340 850 }else{
condato_mbed 0:556294574340 851 unsigned long ch = 0;
condato_mbed 0:556294574340 852 unsigned long lines = 0;
condato_mbed 0:556294574340 853 unsigned long i = 0;
condato_mbed 0:556294574340 854 unsigned long j = 1;
condato_mbed 0:556294574340 855 unsigned long c = 0;
condato_mbed 0:556294574340 856
condato_mbed 0:556294574340 857 if(id == 1){
condato_mbed 0:556294574340 858 fseek(log, 0, SEEK_SET);
condato_mbed 0:556294574340 859 }else{
condato_mbed 0:556294574340 860 while((id - 1) != lines){
condato_mbed 0:556294574340 861 ch = fgetc(log);
condato_mbed 0:556294574340 862 if(ch == '\n'){
condato_mbed 0:556294574340 863 lines++;
condato_mbed 0:556294574340 864 }
condato_mbed 0:556294574340 865 i++;
condato_mbed 0:556294574340 866 }
condato_mbed 0:556294574340 867 fseek(log, i, SEEK_SET);
condato_mbed 0:556294574340 868 c = i;
condato_mbed 0:556294574340 869 }
condato_mbed 0:556294574340 870 if(id == log_id){
condato_mbed 0:556294574340 871 while(fgetc(log) != EOF){
condato_mbed 0:556294574340 872 i++;
condato_mbed 0:556294574340 873 j++;
condato_mbed 0:556294574340 874 }
condato_mbed 0:556294574340 875 }else{
condato_mbed 0:556294574340 876 while(fgetc(log) != '\n'){
condato_mbed 0:556294574340 877 i++;
condato_mbed 0:556294574340 878 j++;
condato_mbed 0:556294574340 879 }
condato_mbed 0:556294574340 880 }
condato_mbed 0:556294574340 881 fseek(log, c, SEEK_SET);
condato_mbed 0:556294574340 882 fread (ble_buff[ble_buff_line], 1, j, log);
condato_mbed 0:556294574340 883
condato_mbed 0:556294574340 884 for(int l = 0; l < j; l++){
condato_mbed 0:556294574340 885 onDataSent(l);
condato_mbed 0:556294574340 886 }
condato_mbed 0:556294574340 887 }
condato_mbed 0:556294574340 888
condato_mbed 0:556294574340 889 fclose(log);
condato_mbed 0:556294574340 890 fileSystem.unmount();
condato_mbed 0:556294574340 891 fflush(stdout);
condato_mbed 0:556294574340 892
condato_mbed 0:556294574340 893 dataSentSend();
condato_mbed 0:556294574340 894 }
condato_mbed 0:556294574340 895 break;
condato_mbed 0:556294574340 896 }
condato_mbed 0:556294574340 897 */
condato_mbed 0:556294574340 898
condato_mbed 0:556294574340 899 case 'l': //Log-Datei übertragen
condato_mbed 0:556294574340 900 {
condato_mbed 0:556294574340 901 connected_cancel.detach();
condato_mbed 0:556294574340 902 clear_buffer();
condato_mbed 0:556294574340 903
condato_mbed 0:556294574340 904 if(counter_l == 0){
condato_mbed 0:556294574340 905 char string[] = "Command 'l' (send logs) received";
condato_mbed 0:556294574340 906 write_to_sd_log_single(string);
condato_mbed 0:556294574340 907 }
condato_mbed 0:556294574340 908
condato_mbed 0:556294574340 909 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 910 while(readValue[0] == NULL || readValue[0] < 0x31|| readValue[0] > 0x39){
condato_mbed 0:556294574340 911 clear_buffer();
condato_mbed 0:556294574340 912 ble.waitForEvent();
condato_mbed 0:556294574340 913 if(conn_state == 0){
condato_mbed 0:556294574340 914 break;
condato_mbed 0:556294574340 915 }
condato_mbed 0:556294574340 916 }
condato_mbed 0:556294574340 917 connected_cancel.detach();
condato_mbed 0:556294574340 918 if(conn_state == 1){
condato_mbed 0:556294574340 919
condato_mbed 0:556294574340 920 if(counter_l == 0){
condato_mbed 0:556294574340 921 char string1[] = "Sending logs...";
condato_mbed 0:556294574340 922 write_to_sd_log_single(string1);
condato_mbed 0:556294574340 923 }
condato_mbed 0:556294574340 924
condato_mbed 0:556294574340 925 int a = 0;
condato_mbed 0:556294574340 926 while(readValue[a] != NULL){
condato_mbed 0:556294574340 927 a++;
condato_mbed 0:556294574340 928 }
condato_mbed 0:556294574340 929 int id = array_to_int(a);
condato_mbed 0:556294574340 930 clear_buffer();
condato_mbed 0:556294574340 931
condato_mbed 0:556294574340 932 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 933 FILE * log = fopen ("/fs/log.csv", "rb");
condato_mbed 0:556294574340 934
condato_mbed 0:556294574340 935 /* Daten senden */
condato_mbed 0:556294574340 936
condato_mbed 0:556294574340 937 if(id > log_id){
condato_mbed 0:556294574340 938 printf("\nLog ID %d doesn't exist!\n", id);
condato_mbed 0:556294574340 939 char string[] = "Call of an inexistent log ID";
condato_mbed 0:556294574340 940 write_to_sd_log_single(string);
condato_mbed 0:556294574340 941
condato_mbed 0:556294574340 942 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 943 onDataSent(0);
condato_mbed 0:556294574340 944 }else{
condato_mbed 0:556294574340 945 unsigned long ch = 0;
condato_mbed 0:556294574340 946 unsigned long lines = 0;
condato_mbed 0:556294574340 947 unsigned long i = 0;
condato_mbed 0:556294574340 948 unsigned long j = 1;
condato_mbed 0:556294574340 949 unsigned long c = 0;
condato_mbed 0:556294574340 950
condato_mbed 0:556294574340 951 if(id == 1){
condato_mbed 0:556294574340 952 fseek(log, 0, SEEK_SET);
condato_mbed 0:556294574340 953 }else{
condato_mbed 0:556294574340 954 while((id - 1) != lines){
condato_mbed 0:556294574340 955 ch = fgetc(log);
condato_mbed 0:556294574340 956 if(ch == '\n'){
condato_mbed 0:556294574340 957 lines++;
condato_mbed 0:556294574340 958 }
condato_mbed 0:556294574340 959 i++;
condato_mbed 0:556294574340 960 }
condato_mbed 0:556294574340 961 fseek(log, i, SEEK_SET);
condato_mbed 0:556294574340 962 c = i;
condato_mbed 0:556294574340 963 }
condato_mbed 0:556294574340 964 if(id == log_id){
condato_mbed 0:556294574340 965 while(fgetc(log) != EOF){
condato_mbed 0:556294574340 966 i++;
condato_mbed 0:556294574340 967 j++;
condato_mbed 0:556294574340 968 }
condato_mbed 0:556294574340 969 }else{
condato_mbed 0:556294574340 970 int y = 0;
condato_mbed 0:556294574340 971 while(y < 5){
condato_mbed 0:556294574340 972 i++;
condato_mbed 0:556294574340 973 j++;
condato_mbed 0:556294574340 974 ch = fgetc(log);
condato_mbed 0:556294574340 975 if(ch == '\n'){
condato_mbed 0:556294574340 976 y++;
condato_mbed 0:556294574340 977 }
condato_mbed 0:556294574340 978 if(ch == EOF){
condato_mbed 0:556294574340 979 break;
condato_mbed 0:556294574340 980 }
condato_mbed 0:556294574340 981 }
condato_mbed 0:556294574340 982 i--;
condato_mbed 0:556294574340 983 j--;
condato_mbed 0:556294574340 984 }
condato_mbed 0:556294574340 985 fseek(log, c, SEEK_SET);
condato_mbed 0:556294574340 986 fread (ble_buff[ble_buff_line], 1, j, log);
condato_mbed 0:556294574340 987
condato_mbed 0:556294574340 988 for(int l = 0; l < j; l++){
condato_mbed 0:556294574340 989 onDataSent(l);
condato_mbed 0:556294574340 990 }
condato_mbed 0:556294574340 991 }
condato_mbed 0:556294574340 992
condato_mbed 0:556294574340 993 fclose(log);
condato_mbed 0:556294574340 994 fileSystem.unmount();
condato_mbed 0:556294574340 995 fflush(stdout);
condato_mbed 0:556294574340 996
condato_mbed 0:556294574340 997 counter_l += 5;
condato_mbed 0:556294574340 998 if(counter_l >= measure_id){
condato_mbed 0:556294574340 999 char string2[] = "Sending logs complete";
condato_mbed 0:556294574340 1000 write_to_sd_log_single(string2);
condato_mbed 0:556294574340 1001 counter_l = 0;
condato_mbed 0:556294574340 1002 dataSent();
condato_mbed 0:556294574340 1003 }else{
condato_mbed 0:556294574340 1004 dataSentSend();
condato_mbed 0:556294574340 1005 }
condato_mbed 0:556294574340 1006 }
condato_mbed 0:556294574340 1007 break;
condato_mbed 0:556294574340 1008 }
condato_mbed 0:556294574340 1009
condato_mbed 0:556294574340 1010 case 'r': // Log Datei löschen
condato_mbed 0:556294574340 1011 {
condato_mbed 0:556294574340 1012 connected_cancel.detach();
condato_mbed 0:556294574340 1013 clear_buffer();
condato_mbed 0:556294574340 1014
condato_mbed 0:556294574340 1015 char string[] = "Command 'r' (delete log file) received";
condato_mbed 0:556294574340 1016 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1017
condato_mbed 0:556294574340 1018 if(delete_file_log() == 1){
condato_mbed 0:556294574340 1019 char string_1[] = "Log file deleted";
condato_mbed 0:556294574340 1020 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1021
condato_mbed 0:556294574340 1022 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 1023 onDataSent(0);
condato_mbed 0:556294574340 1024 }else{
condato_mbed 0:556294574340 1025 char string_1[] = "Log file delete failed";
condato_mbed 0:556294574340 1026 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1027
condato_mbed 0:556294574340 1028 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1029 onDataSent(0);
condato_mbed 0:556294574340 1030 }
condato_mbed 0:556294574340 1031
condato_mbed 0:556294574340 1032 dataSent();
condato_mbed 0:556294574340 1033
condato_mbed 0:556294574340 1034 break;
condato_mbed 0:556294574340 1035 }
condato_mbed 0:556294574340 1036
condato_mbed 0:556294574340 1037 case 'n': //Reset
condato_mbed 0:556294574340 1038 {
condato_mbed 0:556294574340 1039 connected_cancel.detach();
condato_mbed 0:556294574340 1040 clear_buffer();
condato_mbed 0:556294574340 1041
condato_mbed 0:556294574340 1042 char string[] = "Command 'n' (reboot) received";
condato_mbed 0:556294574340 1043 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1044 BT_false();
condato_mbed 0:556294574340 1045 wait(0.5);
condato_mbed 0:556294574340 1046 reboot();
condato_mbed 0:556294574340 1047 break;
condato_mbed 0:556294574340 1048 }
condato_mbed 0:556294574340 1049
condato_mbed 0:556294574340 1050 case 'w': // Werkeinstellungen
condato_mbed 0:556294574340 1051 {
condato_mbed 0:556294574340 1052 connected_cancel.detach();
condato_mbed 0:556294574340 1053 clear_buffer();
condato_mbed 0:556294574340 1054
condato_mbed 0:556294574340 1055 char string[] = "Command 'w' (reset to factory settings) received";
condato_mbed 0:556294574340 1056 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1057
condato_mbed 0:556294574340 1058 if(delete_file_messdaten() && load_standard_config() && delete_file_log() == 1){
condato_mbed 0:556294574340 1059 char string_1[] = "System reseted to factory settings";
condato_mbed 0:556294574340 1060 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1061
condato_mbed 0:556294574340 1062 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 1063 onDataSent(0);
condato_mbed 0:556294574340 1064
condato_mbed 0:556294574340 1065 printf("\n__________________________\n\nColdchainlogger reseted \nto factory settings\n__________________________\n\n");
condato_mbed 0:556294574340 1066 }else{
condato_mbed 0:556294574340 1067 char string_1[] = "System reset to factory settings failed";
condato_mbed 0:556294574340 1068 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1069
condato_mbed 0:556294574340 1070 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1071 onDataSent(0);
condato_mbed 0:556294574340 1072 }
condato_mbed 0:556294574340 1073
condato_mbed 0:556294574340 1074 dataSent();
condato_mbed 0:556294574340 1075
condato_mbed 0:556294574340 1076 break;
condato_mbed 0:556294574340 1077 }
condato_mbed 0:556294574340 1078
condato_mbed 0:556294574340 1079 case 'a': // Datenaufnahme pausieren / stoppen
condato_mbed 0:556294574340 1080 {
condato_mbed 0:556294574340 1081 connected_cancel.detach();
condato_mbed 0:556294574340 1082 clear_buffer();
condato_mbed 0:556294574340 1083
condato_mbed 0:556294574340 1084 char string[] = "Command 'a' (pause / stop measurement) received";
condato_mbed 0:556294574340 1085 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1086
condato_mbed 0:556294574340 1087 mess_timer.detach();
condato_mbed 0:556294574340 1088 next_state = 0;
condato_mbed 0:556294574340 1089
condato_mbed 0:556294574340 1090 if(pause == true){
condato_mbed 0:556294574340 1091 char string_1[] = "Measurement stopped";
condato_mbed 0:556294574340 1092 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1093 printf("\nMeasurement stopped\n");
condato_mbed 0:556294574340 1094 shipping = false;
condato_mbed 0:556294574340 1095
condato_mbed 0:556294574340 1096 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1097 onDataSent(0);
condato_mbed 0:556294574340 1098 }else{
condato_mbed 0:556294574340 1099 pause = true;
condato_mbed 0:556294574340 1100 char string_1[] = "Measurement paused";
condato_mbed 0:556294574340 1101 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1102 printf("\nMeasurement puased\n");
condato_mbed 0:556294574340 1103
condato_mbed 0:556294574340 1104 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 1105 onDataSent(0);
condato_mbed 0:556294574340 1106 }
condato_mbed 0:556294574340 1107
condato_mbed 0:556294574340 1108 mess_timer.detach();
condato_mbed 0:556294574340 1109
condato_mbed 0:556294574340 1110 dataSent();
condato_mbed 0:556294574340 1111
condato_mbed 0:556294574340 1112 break;
condato_mbed 0:556294574340 1113 }
condato_mbed 0:556294574340 1114
condato_mbed 0:556294574340 1115 case 'f': // Datenaufnahme starten / fortsetzen
condato_mbed 0:556294574340 1116 {
condato_mbed 0:556294574340 1117 connected_cancel.detach();
condato_mbed 0:556294574340 1118 clear_buffer();
condato_mbed 0:556294574340 1119
condato_mbed 0:556294574340 1120 char string[] = "Command 'f' (start / continue measurement) received";
condato_mbed 0:556294574340 1121 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1122
condato_mbed 0:556294574340 1123 if(shipping == false){
condato_mbed 0:556294574340 1124 char string_1[] = "Measurement started";
condato_mbed 0:556294574340 1125 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1126 shipping = true;
condato_mbed 0:556294574340 1127 pause = false;
condato_mbed 0:556294574340 1128
condato_mbed 0:556294574340 1129 if(user_config_para.wait_mode == 1){
condato_mbed 0:556294574340 1130 next_state = 3;
condato_mbed 0:556294574340 1131 }else{
condato_mbed 0:556294574340 1132 next_state = 1;
condato_mbed 0:556294574340 1133 }
condato_mbed 0:556294574340 1134 printf("\nMeasurement started\n");
condato_mbed 0:556294574340 1135
condato_mbed 0:556294574340 1136 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 1137 onDataSent(0);
condato_mbed 0:556294574340 1138 }else{
condato_mbed 0:556294574340 1139 next_state = 1;
condato_mbed 0:556294574340 1140 char string_1[] = "Measurement continued";
condato_mbed 0:556294574340 1141 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1142 printf("\nMeasurement continued\n");
condato_mbed 0:556294574340 1143 pause = false;
condato_mbed 0:556294574340 1144
condato_mbed 0:556294574340 1145 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1146 onDataSent(0);
condato_mbed 0:556294574340 1147 }
condato_mbed 0:556294574340 1148
condato_mbed 0:556294574340 1149 dataSent();
condato_mbed 0:556294574340 1150
condato_mbed 0:556294574340 1151 break;
condato_mbed 0:556294574340 1152 }
condato_mbed 0:556294574340 1153
condato_mbed 0:556294574340 1154 case 'e': //Config erhalten
condato_mbed 0:556294574340 1155 {
condato_mbed 0:556294574340 1156 connected_cancel.detach();
condato_mbed 0:556294574340 1157 clear_buffer();
condato_mbed 0:556294574340 1158
condato_mbed 0:556294574340 1159 char string[] = "Command 'e' (receive and overwrite config) received";
condato_mbed 0:556294574340 1160 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1161
condato_mbed 0:556294574340 1162 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 1163 printf("\nReady to receive new config settings\n");
condato_mbed 0:556294574340 1164
condato_mbed 0:556294574340 1165 while(readValue[0] == NULL){
condato_mbed 0:556294574340 1166 ble.waitForEvent();
condato_mbed 0:556294574340 1167 if(conn_state == 0){
condato_mbed 0:556294574340 1168 break;
condato_mbed 0:556294574340 1169 }
condato_mbed 0:556294574340 1170 }
condato_mbed 0:556294574340 1171 memset(&readValue[0], 0, sizeof(readValue));
condato_mbed 0:556294574340 1172 memset(&writeValue[0], 0, sizeof(writeValue));
condato_mbed 0:556294574340 1173 while(readValue[0] == NULL){
condato_mbed 0:556294574340 1174 ble.waitForEvent();
condato_mbed 0:556294574340 1175 if(conn_state == 0){
condato_mbed 0:556294574340 1176 break;
condato_mbed 0:556294574340 1177 }
condato_mbed 0:556294574340 1178 }
condato_mbed 0:556294574340 1179 connected_cancel.detach();
condato_mbed 0:556294574340 1180 if(conn_state == 1){
condato_mbed 0:556294574340 1181 char params[50];
condato_mbed 0:556294574340 1182 printf("\n%s\n", ble_buff[0]);
condato_mbed 0:556294574340 1183 strcpy(params, ble_buff[0]);
condato_mbed 0:556294574340 1184
condato_mbed 0:556294574340 1185 if(create_user_config(params) == 1){
condato_mbed 0:556294574340 1186 clear_buffer();
condato_mbed 0:556294574340 1187
condato_mbed 0:556294574340 1188 char string_1[] = "User config changed";
condato_mbed 0:556294574340 1189 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1190 printf("\n__________________________\n\nUser config changed\n__________________________\n\n");
condato_mbed 0:556294574340 1191
condato_mbed 0:556294574340 1192 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 1193 onDataSent(0);
condato_mbed 0:556294574340 1194 }else{
condato_mbed 0:556294574340 1195 clear_buffer();
condato_mbed 0:556294574340 1196
condato_mbed 0:556294574340 1197 char string_1[] = "Changing user config failed";
condato_mbed 0:556294574340 1198 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1199 printf("\n__________________________\n\n!!! Error, can't changing user config !!!\n__________________________\n\n");
condato_mbed 0:556294574340 1200
condato_mbed 0:556294574340 1201 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1202 onDataSent(0);
condato_mbed 0:556294574340 1203 }
condato_mbed 0:556294574340 1204
condato_mbed 0:556294574340 1205 dataSent();
condato_mbed 0:556294574340 1206 }
condato_mbed 0:556294574340 1207 break;
condato_mbed 0:556294574340 1208 }
condato_mbed 0:556294574340 1209
condato_mbed 0:556294574340 1210 case 'x': // Verbindung beenden
condato_mbed 0:556294574340 1211 {
condato_mbed 0:556294574340 1212 connected_cancel.detach();
condato_mbed 0:556294574340 1213 clear_buffer();
condato_mbed 0:556294574340 1214
condato_mbed 0:556294574340 1215 char string[] = "Command 'x' (shut down bluetooth) received";
condato_mbed 0:556294574340 1216 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1217
condato_mbed 0:556294574340 1218 BT_false();
condato_mbed 0:556294574340 1219 char string_1[] = "Bluetooth shuted down";
condato_mbed 0:556294574340 1220 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1221 printf("\n\nBluetooth shuted down\n\n");
condato_mbed 0:556294574340 1222
condato_mbed 0:556294574340 1223 dataSentSend();
condato_mbed 0:556294574340 1224 clear_buffer();
condato_mbed 0:556294574340 1225
condato_mbed 0:556294574340 1226 break;
condato_mbed 0:556294574340 1227 }
condato_mbed 0:556294574340 1228
condato_mbed 0:556294574340 1229 case 'b': //Akku-Zustand
condato_mbed 0:556294574340 1230 {
condato_mbed 0:556294574340 1231 connected_cancel.detach();
condato_mbed 0:556294574340 1232 clear_buffer();
condato_mbed 0:556294574340 1233
condato_mbed 0:556294574340 1234 char string[] = "Command 'b' (send battery info) received";
condato_mbed 0:556294574340 1235 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1236
condato_mbed 0:556294574340 1237 updateSensorValue();
condato_mbed 0:556294574340 1238 int battery = (int)batteryLevel;
condato_mbed 0:556294574340 1239 char bat[3];
condato_mbed 0:556294574340 1240 sprintf(bat,"%d", battery);
condato_mbed 0:556294574340 1241 int i = 0;
condato_mbed 0:556294574340 1242 while(bat[i] != NULL){
condato_mbed 0:556294574340 1243 ble_buff[0][i] = bat[i];
condato_mbed 0:556294574340 1244 onDataSent(i);
condato_mbed 0:556294574340 1245 i++;
condato_mbed 0:556294574340 1246 }
condato_mbed 0:556294574340 1247 printf("\nBattery level: %d %%\n", battery);
condato_mbed 0:556294574340 1248
condato_mbed 0:556294574340 1249 dataSent();
condato_mbed 0:556294574340 1250
condato_mbed 0:556294574340 1251 break;
condato_mbed 0:556294574340 1252 }
condato_mbed 0:556294574340 1253
condato_mbed 0:556294574340 1254 case 'm': //Speicher-Belegung
condato_mbed 0:556294574340 1255 {
condato_mbed 0:556294574340 1256 connected_cancel.detach();
condato_mbed 0:556294574340 1257 clear_buffer();
condato_mbed 0:556294574340 1258
condato_mbed 0:556294574340 1259 char string[] = "Command 'm' (send memmory info) received";
condato_mbed 0:556294574340 1260 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1261
condato_mbed 0:556294574340 1262 printf("\nTotal SD memory: %llu Bytes\n", blockDevice.size());
condato_mbed 0:556294574340 1263
condato_mbed 0:556294574340 1264 unsigned long long length = 0;
condato_mbed 0:556294574340 1265
condato_mbed 0:556294574340 1266 //ID Größe
condato_mbed 0:556294574340 1267 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 1268 FILE * id = fopen ("/fs/id.csv", "rb");
condato_mbed 0:556294574340 1269
condato_mbed 0:556294574340 1270 fseek (id, 0, SEEK_END);
condato_mbed 0:556294574340 1271 length = ftell (id);
condato_mbed 0:556294574340 1272 fseek (id, 0, SEEK_SET);
condato_mbed 0:556294574340 1273
condato_mbed 0:556294574340 1274 fclose(id);
condato_mbed 0:556294574340 1275 fileSystem.unmount();
condato_mbed 0:556294574340 1276 fflush(stdout);
condato_mbed 0:556294574340 1277
condato_mbed 0:556294574340 1278 unsigned long long idn = length;
condato_mbed 0:556294574340 1279 length = 0;
condato_mbed 0:556294574340 1280
condato_mbed 0:556294574340 1281 //Log Größe
condato_mbed 0:556294574340 1282 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 1283 FILE * log = fopen ("/fs/log.csv", "rb");
condato_mbed 0:556294574340 1284
condato_mbed 0:556294574340 1285 fseek (log, 0, SEEK_END);
condato_mbed 0:556294574340 1286 length = ftell (log);
condato_mbed 0:556294574340 1287 fseek (log, 0, SEEK_SET);
condato_mbed 0:556294574340 1288
condato_mbed 0:556294574340 1289 fclose(log);
condato_mbed 0:556294574340 1290 fileSystem.unmount();
condato_mbed 0:556294574340 1291 fflush(stdout);
condato_mbed 0:556294574340 1292
condato_mbed 0:556294574340 1293 unsigned long long logs = length;
condato_mbed 0:556294574340 1294 length = 0;
condato_mbed 0:556294574340 1295
condato_mbed 0:556294574340 1296 //Messdaten Größe
condato_mbed 0:556294574340 1297 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 1298 FILE * messdaten = fopen ("/fs/messdaten.csv", "rb");
condato_mbed 0:556294574340 1299
condato_mbed 0:556294574340 1300 fseek (messdaten, 0, SEEK_END);
condato_mbed 0:556294574340 1301 length = ftell (messdaten);
condato_mbed 0:556294574340 1302 fseek (messdaten, 0, SEEK_SET);
condato_mbed 0:556294574340 1303
condato_mbed 0:556294574340 1304 fclose(messdaten);
condato_mbed 0:556294574340 1305 fileSystem.unmount();
condato_mbed 0:556294574340 1306 fflush(stdout);
condato_mbed 0:556294574340 1307
condato_mbed 0:556294574340 1308 unsigned long long mes = length;
condato_mbed 0:556294574340 1309 length = 0;
condato_mbed 0:556294574340 1310
condato_mbed 0:556294574340 1311 //Standard Config Größe
condato_mbed 0:556294574340 1312 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 1313 FILE * stcf = fopen ("/fs/standard_config.csv", "rb");
condato_mbed 0:556294574340 1314
condato_mbed 0:556294574340 1315 fseek (stcf, 0, SEEK_END);
condato_mbed 0:556294574340 1316 length = ftell (stcf);
condato_mbed 0:556294574340 1317 fseek (stcf, 0, SEEK_SET);
condato_mbed 0:556294574340 1318
condato_mbed 0:556294574340 1319 fclose(stcf);
condato_mbed 0:556294574340 1320 fileSystem.unmount();
condato_mbed 0:556294574340 1321 fflush(stdout);
condato_mbed 0:556294574340 1322
condato_mbed 0:556294574340 1323 unsigned long long stcfg = length;
condato_mbed 0:556294574340 1324 length = 0;
condato_mbed 0:556294574340 1325
condato_mbed 0:556294574340 1326 //User Config Größe
condato_mbed 0:556294574340 1327 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 1328 FILE * uscf = fopen ("/fs/user_config.csv", "rb");
condato_mbed 0:556294574340 1329
condato_mbed 0:556294574340 1330 fseek (uscf, 0, SEEK_END);
condato_mbed 0:556294574340 1331 length = ftell (uscf);
condato_mbed 0:556294574340 1332 fseek (uscf, 0, SEEK_SET);
condato_mbed 0:556294574340 1333
condato_mbed 0:556294574340 1334 fclose(uscf);
condato_mbed 0:556294574340 1335 fileSystem.unmount();
condato_mbed 0:556294574340 1336 fflush(stdout);
condato_mbed 0:556294574340 1337
condato_mbed 0:556294574340 1338 unsigned long long uscfg = length;
condato_mbed 0:556294574340 1339 length = 0;
condato_mbed 0:556294574340 1340
condato_mbed 0:556294574340 1341 printf("\nID size: %llu Bytes\n", idn);
condato_mbed 0:556294574340 1342 printf("Logs size: %llu Bytes\n", logs);
condato_mbed 0:556294574340 1343 printf("Standard config size: %llu Bytes\n", stcfg);
condato_mbed 0:556294574340 1344 printf("User config size: %llu Bytes\n\n", uscfg);
condato_mbed 0:556294574340 1345
condato_mbed 0:556294574340 1346 unsigned long long not_measuremnts = idn + logs + stcfg + uscfg;
condato_mbed 0:556294574340 1347 unsigned long long actual_size = blockDevice.size() - not_measuremnts;
condato_mbed 0:556294574340 1348 printf("Available SD memory (100 %%) = total SD memory - configs & id (%llu Bytes) - logs\n", not_measuremnts);
condato_mbed 0:556294574340 1349 printf("Available SD memory (100 %%): %llu Bytes\n\n", actual_size);
condato_mbed 0:556294574340 1350
condato_mbed 0:556294574340 1351 messdaten_count();
condato_mbed 0:556294574340 1352 printf("Measuremnts count: %s\n", messungen);
condato_mbed 0:556294574340 1353 printf("Measurements size: %llu Bytes\n\n", mes);
condato_mbed 0:556294574340 1354
condato_mbed 0:556294574340 1355 double hundert = 100;
condato_mbed 0:556294574340 1356 double occupied = hundert / actual_size * mes;
condato_mbed 0:556294574340 1357 printf("Occupied memory: %f %%\n", occupied);
condato_mbed 0:556294574340 1358
condato_mbed 0:556294574340 1359 double free_mem = 100 - occupied;
condato_mbed 0:556294574340 1360 printf("Available memory: %f %%\n", free_mem);
condato_mbed 0:556294574340 1361
condato_mbed 0:556294574340 1362 char occ[3];
condato_mbed 0:556294574340 1363 char free[3];
condato_mbed 0:556294574340 1364
condato_mbed 0:556294574340 1365 if((int)occupied != 0){
condato_mbed 0:556294574340 1366 occupied = ceil( occupied * 100.0 ) / 100.0;
condato_mbed 0:556294574340 1367 }
condato_mbed 0:556294574340 1368 if((int)free_mem != 0){
condato_mbed 0:556294574340 1369 free_mem = ceil( free_mem * 100.0 ) / 100.0;
condato_mbed 0:556294574340 1370 }
condato_mbed 0:556294574340 1371
condato_mbed 0:556294574340 1372 sprintf(occ,"%d", (int)occupied);
condato_mbed 0:556294574340 1373 sprintf(free,"%d", (int)free_mem);
condato_mbed 0:556294574340 1374
condato_mbed 0:556294574340 1375 printf("OCC: %s\n", occ);
condato_mbed 0:556294574340 1376 printf("FREE: %s\n", free);
condato_mbed 0:556294574340 1377
condato_mbed 0:556294574340 1378 messdaten_count();
condato_mbed 0:556294574340 1379
condato_mbed 0:556294574340 1380 int i = 0;
condato_mbed 0:556294574340 1381 while(i < messungen[i] != NULL){
condato_mbed 0:556294574340 1382 ble_buff[0][i] = messungen[i];
condato_mbed 0:556294574340 1383 onDataSent(i);
condato_mbed 0:556294574340 1384 i++;
condato_mbed 0:556294574340 1385 }
condato_mbed 0:556294574340 1386 ble_buff[0][i] = 0x3B;
condato_mbed 0:556294574340 1387 onDataSent(i);
condato_mbed 0:556294574340 1388 i++;
condato_mbed 0:556294574340 1389 int j = 0;
condato_mbed 0:556294574340 1390 while(j < occ[j] != NULL){
condato_mbed 0:556294574340 1391 ble_buff[0][i] = occ[j];
condato_mbed 0:556294574340 1392 onDataSent(i);
condato_mbed 0:556294574340 1393 i++;
condato_mbed 0:556294574340 1394 j++;
condato_mbed 0:556294574340 1395 }
condato_mbed 0:556294574340 1396 ble_buff[0][i] = 0x3B;
condato_mbed 0:556294574340 1397 onDataSent(i);
condato_mbed 0:556294574340 1398 i++;
condato_mbed 0:556294574340 1399 int c = 0;
condato_mbed 0:556294574340 1400 while(c < free[c] != NULL){
condato_mbed 0:556294574340 1401 ble_buff[0][i] = free[c];
condato_mbed 0:556294574340 1402 onDataSent(i);
condato_mbed 0:556294574340 1403 i++;
condato_mbed 0:556294574340 1404 c++;
condato_mbed 0:556294574340 1405 }
condato_mbed 0:556294574340 1406 ble_buff[0][i] = 0x3B;
condato_mbed 0:556294574340 1407 onDataSent(i);
condato_mbed 0:556294574340 1408 i++;
condato_mbed 0:556294574340 1409 dataSent();
condato_mbed 0:556294574340 1410
condato_mbed 0:556294574340 1411 break;
condato_mbed 0:556294574340 1412 }
condato_mbed 0:556294574340 1413
condato_mbed 0:556294574340 1414 case 'i': //ID auslesen
condato_mbed 0:556294574340 1415 {
condato_mbed 0:556294574340 1416 connected_cancel.detach();
condato_mbed 0:556294574340 1417 clear_buffer();
condato_mbed 0:556294574340 1418
condato_mbed 0:556294574340 1419 char string[] = "Command 'i' (send ID) received";
condato_mbed 0:556294574340 1420 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1421
condato_mbed 0:556294574340 1422 char string_1[] = "Sending device ID...";
condato_mbed 0:556294574340 1423 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1424
condato_mbed 0:556294574340 1425 printf("\nDevice ID: %s\n", device_id);
condato_mbed 0:556294574340 1426
condato_mbed 0:556294574340 1427 int i = 0;
condato_mbed 0:556294574340 1428 while(device_id[i] != NULL){
condato_mbed 0:556294574340 1429 ble_buff[0][i] = device_id[i];
condato_mbed 0:556294574340 1430 onDataSent(i);
condato_mbed 0:556294574340 1431 i++;
condato_mbed 0:556294574340 1432 }
condato_mbed 0:556294574340 1433
condato_mbed 0:556294574340 1434 char string_2[] = "Sending device ID complete";
condato_mbed 0:556294574340 1435 write_to_sd_log_single(string_2);
condato_mbed 0:556294574340 1436
condato_mbed 0:556294574340 1437 dataSent();
condato_mbed 0:556294574340 1438
condato_mbed 0:556294574340 1439 break;
condato_mbed 0:556294574340 1440 }
condato_mbed 0:556294574340 1441
condato_mbed 0:556294574340 1442 case 'z': //Hardware Module abfragen
condato_mbed 0:556294574340 1443 {
condato_mbed 0:556294574340 1444 connected_cancel.detach();
condato_mbed 0:556294574340 1445 clear_buffer();
condato_mbed 0:556294574340 1446
condato_mbed 0:556294574340 1447 char string[] = "Command 'z' (send connected devices) received";
condato_mbed 0:556294574340 1448 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1449
condato_mbed 0:556294574340 1450 char string_1[] = "Sending connected devices...";
condato_mbed 0:556294574340 1451 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1452
condato_mbed 0:556294574340 1453 printf("\nConnected devices: Temperature sensor\n");
condato_mbed 0:556294574340 1454
condato_mbed 0:556294574340 1455 char sensor[4] = {'0', '0', '1'};
condato_mbed 0:556294574340 1456 int i = 0;
condato_mbed 0:556294574340 1457 while(sensor[i] != NULL){
condato_mbed 0:556294574340 1458 ble_buff[0][i] = sensor[i];
condato_mbed 0:556294574340 1459 onDataSent(i);
condato_mbed 0:556294574340 1460 i++;
condato_mbed 0:556294574340 1461 }
condato_mbed 0:556294574340 1462
condato_mbed 0:556294574340 1463 char string_2[] = "Sending connected devices complete";
condato_mbed 0:556294574340 1464 write_to_sd_log_single(string_2);
condato_mbed 0:556294574340 1465
condato_mbed 0:556294574340 1466 dataSent();
condato_mbed 0:556294574340 1467
condato_mbed 0:556294574340 1468 break;
condato_mbed 0:556294574340 1469 }
condato_mbed 0:556294574340 1470
condato_mbed 0:556294574340 1471 case 'v': // Zeit in Unixformat von Datenlogger abfragen
condato_mbed 0:556294574340 1472 {
condato_mbed 0:556294574340 1473 connected_cancel.detach();
condato_mbed 0:556294574340 1474 clear_buffer();
condato_mbed 0:556294574340 1475
condato_mbed 0:556294574340 1476 char string[] = "Command 'v' (send device time) received";
condato_mbed 0:556294574340 1477 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1478
condato_mbed 0:556294574340 1479 unixtime_to_char_array();
condato_mbed 0:556294574340 1480 for(int i = 0; i < sizeof(seconds); i++){
condato_mbed 0:556294574340 1481 ble_buff[0][i] = seconds[i];
condato_mbed 0:556294574340 1482 onDataSent(i);
condato_mbed 0:556294574340 1483 }
condato_mbed 0:556294574340 1484
condato_mbed 0:556294574340 1485 dataSent();
condato_mbed 0:556294574340 1486
condato_mbed 0:556294574340 1487 break;
condato_mbed 0:556294574340 1488 }
condato_mbed 0:556294574340 1489
condato_mbed 0:556294574340 1490 case 't': //Zeit in Unixformat an Datenlogger schicken
condato_mbed 0:556294574340 1491 {
condato_mbed 0:556294574340 1492 connected_cancel.detach();
condato_mbed 0:556294574340 1493 clear_buffer();
condato_mbed 0:556294574340 1494
condato_mbed 0:556294574340 1495 char string[] = "Command 't' (receive and set device time) received";
condato_mbed 0:556294574340 1496 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1497
condato_mbed 0:556294574340 1498 connected_cancel.attach(&disconnect, user_config_para.connected);
condato_mbed 0:556294574340 1499 printf("\nReady to receive new time settings\n");
condato_mbed 0:556294574340 1500 while(readValue[0] == NULL || readValue[0] < 0x31|| readValue[0] > 0x39){
condato_mbed 0:556294574340 1501 clear_buffer();
condato_mbed 0:556294574340 1502 ble.waitForEvent();
condato_mbed 0:556294574340 1503 if(conn_state == 0){
condato_mbed 0:556294574340 1504 break;
condato_mbed 0:556294574340 1505 }
condato_mbed 0:556294574340 1506 }
condato_mbed 0:556294574340 1507 connected_cancel.detach();
condato_mbed 0:556294574340 1508 if(conn_state == 1){
condato_mbed 0:556294574340 1509 int a = 0;
condato_mbed 0:556294574340 1510 while(readValue[a] != NULL){
condato_mbed 0:556294574340 1511 a++;
condato_mbed 0:556294574340 1512 }
condato_mbed 0:556294574340 1513 int new_time = array_to_int(a);
condato_mbed 0:556294574340 1514 clear_buffer();
condato_mbed 0:556294574340 1515
condato_mbed 0:556294574340 1516 if(set_app_time(new_time) == 1){
condato_mbed 0:556294574340 1517 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 1518 onDataSent(0);
condato_mbed 0:556294574340 1519 }else{
condato_mbed 0:556294574340 1520 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1521 onDataSent(0);
condato_mbed 0:556294574340 1522 }
condato_mbed 0:556294574340 1523
condato_mbed 0:556294574340 1524 dataSent();
condato_mbed 0:556294574340 1525 }
condato_mbed 0:556294574340 1526 break;
condato_mbed 0:556294574340 1527 }
condato_mbed 0:556294574340 1528
condato_mbed 0:556294574340 1529 case 'q': //Min- / Max- / Mittelwert schicken
condato_mbed 0:556294574340 1530 {
condato_mbed 0:556294574340 1531 connected_cancel.detach();
condato_mbed 0:556294574340 1532 clear_buffer();
condato_mbed 0:556294574340 1533
condato_mbed 0:556294574340 1534 char string[] = "Command 'q' (send min/max/average) received";
condato_mbed 0:556294574340 1535 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1536
condato_mbed 0:556294574340 1537 connected_cancel.detach();
condato_mbed 0:556294574340 1538 clear_buffer();
condato_mbed 0:556294574340 1539
condato_mbed 0:556294574340 1540 unsigned int length = 0;
condato_mbed 0:556294574340 1541 int a = 0;
condato_mbed 0:556294574340 1542
condato_mbed 0:556294574340 1543 char string_1[] = "Sending min/max/average..";
condato_mbed 0:556294574340 1544 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 1545
condato_mbed 0:556294574340 1546 fileSystem.unmount();
condato_mbed 0:556294574340 1547 fflush(stdout);
condato_mbed 0:556294574340 1548
condato_mbed 0:556294574340 1549 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 1550 FILE * messdaten = fopen ("/fs/messdaten.csv", "rb");
condato_mbed 0:556294574340 1551
condato_mbed 0:556294574340 1552 fseek (messdaten, 0, SEEK_END);
condato_mbed 0:556294574340 1553 length = ftell (messdaten);
condato_mbed 0:556294574340 1554 fseek (messdaten, 0, SEEK_SET);
condato_mbed 0:556294574340 1555
condato_mbed 0:556294574340 1556 /* Daten senden */
condato_mbed 0:556294574340 1557
condato_mbed 0:556294574340 1558 unsigned long ch = 0;
condato_mbed 0:556294574340 1559 unsigned short lines = 0;
condato_mbed 0:556294574340 1560 unsigned long i = 0;
condato_mbed 0:556294574340 1561 unsigned long j = 1;
condato_mbed 0:556294574340 1562 unsigned long c = 0;
condato_mbed 0:556294574340 1563 unsigned long e = 0;
condato_mbed 0:556294574340 1564
condato_mbed 0:556294574340 1565 while(!feof(messdaten)){
condato_mbed 0:556294574340 1566 ch = fgetc(messdaten);
condato_mbed 0:556294574340 1567 if(ch == '\n')
condato_mbed 0:556294574340 1568 {
condato_mbed 0:556294574340 1569 lines++;
condato_mbed 0:556294574340 1570 }
condato_mbed 0:556294574340 1571 }
condato_mbed 0:556294574340 1572
condato_mbed 0:556294574340 1573 printf("\n%d Eintraege\n", lines);
condato_mbed 0:556294574340 1574
condato_mbed 0:556294574340 1575 for(int a = 0; a < lines; a++)
condato_mbed 0:556294574340 1576 {
condato_mbed 0:556294574340 1577 messwerte[a] = *new int[8];
condato_mbed 0:556294574340 1578 }
condato_mbed 0:556294574340 1579
condato_mbed 0:556294574340 1580 char temp[8];
condato_mbed 0:556294574340 1581
condato_mbed 0:556294574340 1582 fseek(messdaten, 0, SEEK_SET);
condato_mbed 0:556294574340 1583 while(!feof(messdaten)){
condato_mbed 0:556294574340 1584 ch = fgetc(messdaten);
condato_mbed 0:556294574340 1585 if(ch == '\n'){
condato_mbed 0:556294574340 1586 fseek(messdaten, i - 7, SEEK_SET);
condato_mbed 0:556294574340 1587 fread (temp, 1, 7, messdaten);
condato_mbed 0:556294574340 1588 messwerte[e] = atoi(temp);
condato_mbed 0:556294574340 1589 memset(&temp[0], 0, sizeof(temp));
condato_mbed 0:556294574340 1590 e++;
condato_mbed 0:556294574340 1591 }else if(ch == EOF){
condato_mbed 0:556294574340 1592 fseek(messdaten, i - 8, SEEK_SET);
condato_mbed 0:556294574340 1593 fread (temp, 1, 8, messdaten);
condato_mbed 0:556294574340 1594 messwerte[e] = atoi(temp);
condato_mbed 0:556294574340 1595 memset(&temp[0], 0, sizeof(temp));
condato_mbed 0:556294574340 1596 }
condato_mbed 0:556294574340 1597 i++;
condato_mbed 0:556294574340 1598 }
condato_mbed 0:556294574340 1599
condato_mbed 0:556294574340 1600 unsigned long summe = 0;
condato_mbed 0:556294574340 1601
condato_mbed 0:556294574340 1602 for(int q = 1; q < e; q++){
condato_mbed 0:556294574340 1603 summe += messwerte[q];
condato_mbed 0:556294574340 1604 }
condato_mbed 0:556294574340 1605 printf("\nSumme: %lu\n", summe);
condato_mbed 0:556294574340 1606
condato_mbed 0:556294574340 1607 double avr = summe / lines;
condato_mbed 0:556294574340 1608
condato_mbed 0:556294574340 1609 fclose(messdaten);
condato_mbed 0:556294574340 1610 fileSystem.unmount();
condato_mbed 0:556294574340 1611 fflush(stdout);
condato_mbed 0:556294574340 1612
condato_mbed 0:556294574340 1613 char string_2[] = "Sending min/max/average complete";
condato_mbed 0:556294574340 1614 write_to_sd_log_single(string_2);
condato_mbed 0:556294574340 1615
condato_mbed 0:556294574340 1616 quickSort(1, lines);
condato_mbed 0:556294574340 1617
condato_mbed 0:556294574340 1618 if((int)avr != 0){
condato_mbed 0:556294574340 1619 avr = ceil( avr * 100.0 ) / 100.0;
condato_mbed 0:556294574340 1620 }
condato_mbed 0:556294574340 1621
condato_mbed 0:556294574340 1622 char min[5];
condato_mbed 0:556294574340 1623 char max[5];
condato_mbed 0:556294574340 1624 char durch[5];
condato_mbed 0:556294574340 1625
condato_mbed 0:556294574340 1626 sprintf(min,"%d", messwerte[1]);
condato_mbed 0:556294574340 1627 sprintf(max,"%d", messwerte[lines]);
condato_mbed 0:556294574340 1628 sprintf(durch,"%d", (int)avr);
condato_mbed 0:556294574340 1629
condato_mbed 0:556294574340 1630 printf("\n%s, %s, %s\n", min, max, durch);
condato_mbed 0:556294574340 1631
condato_mbed 0:556294574340 1632 int k = 0;
condato_mbed 0:556294574340 1633 while(k < min[k] != NULL){
condato_mbed 0:556294574340 1634 ble_buff[0][k] = min[k];
condato_mbed 0:556294574340 1635 onDataSent(k);
condato_mbed 0:556294574340 1636 k++;
condato_mbed 0:556294574340 1637 }
condato_mbed 0:556294574340 1638 ble_buff[0][k] = 0x3B;
condato_mbed 0:556294574340 1639 onDataSent(k);
condato_mbed 0:556294574340 1640 k++;
condato_mbed 0:556294574340 1641 int p = 0;
condato_mbed 0:556294574340 1642 while(p < max[p] != NULL){
condato_mbed 0:556294574340 1643 ble_buff[0][k] = max[p];
condato_mbed 0:556294574340 1644 onDataSent(k);
condato_mbed 0:556294574340 1645 k++;
condato_mbed 0:556294574340 1646 p++;
condato_mbed 0:556294574340 1647 }
condato_mbed 0:556294574340 1648 ble_buff[0][k] = 0x3B;
condato_mbed 0:556294574340 1649 onDataSent(k);
condato_mbed 0:556294574340 1650 k++;
condato_mbed 0:556294574340 1651 int z = 0;
condato_mbed 0:556294574340 1652 while(z < durch[z] != NULL){
condato_mbed 0:556294574340 1653 ble_buff[0][k] = durch[z];
condato_mbed 0:556294574340 1654 onDataSent(k);
condato_mbed 0:556294574340 1655 k++;
condato_mbed 0:556294574340 1656 z++;
condato_mbed 0:556294574340 1657 }
condato_mbed 0:556294574340 1658 ble_buff[0][k] = 0x3B;
condato_mbed 0:556294574340 1659 onDataSent(k);
condato_mbed 0:556294574340 1660 k++;
condato_mbed 0:556294574340 1661
condato_mbed 0:556294574340 1662 dataSent();
condato_mbed 0:556294574340 1663
condato_mbed 0:556294574340 1664 break;
condato_mbed 0:556294574340 1665 }
condato_mbed 0:556294574340 1666
condato_mbed 0:556294574340 1667 case 'j': //Anzahl der Messungen schicken
condato_mbed 0:556294574340 1668 {
condato_mbed 0:556294574340 1669 connected_cancel.detach();
condato_mbed 0:556294574340 1670 clear_buffer();
condato_mbed 0:556294574340 1671
condato_mbed 0:556294574340 1672 char string[] = "Command 'j' (send measurements count) received";
condato_mbed 0:556294574340 1673 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1674
condato_mbed 0:556294574340 1675 //Anzahl der Messdaten
condato_mbed 0:556294574340 1676 messdaten_count();
condato_mbed 0:556294574340 1677 int i = 0;
condato_mbed 0:556294574340 1678 while(messungen[i] != NULL){
condato_mbed 0:556294574340 1679 ble_buff[0][i] = messungen[i];
condato_mbed 0:556294574340 1680 onDataSent(i);
condato_mbed 0:556294574340 1681 i++;
condato_mbed 0:556294574340 1682 }
condato_mbed 0:556294574340 1683 printf("\nMeasurements count: %s\n", messungen);
condato_mbed 0:556294574340 1684
condato_mbed 0:556294574340 1685 dataSent();
condato_mbed 0:556294574340 1686
condato_mbed 0:556294574340 1687 break;
condato_mbed 0:556294574340 1688 }
condato_mbed 0:556294574340 1689
condato_mbed 0:556294574340 1690 case 'h': //Anzahl der Logs schicken
condato_mbed 0:556294574340 1691 {
condato_mbed 0:556294574340 1692 connected_cancel.detach();
condato_mbed 0:556294574340 1693 clear_buffer();
condato_mbed 0:556294574340 1694
condato_mbed 0:556294574340 1695 char string[] = "Command 'h' (send log count) received";
condato_mbed 0:556294574340 1696 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1697
condato_mbed 0:556294574340 1698 //Anzahl der Logs
condato_mbed 0:556294574340 1699 log_count();
condato_mbed 0:556294574340 1700 int i = 0;
condato_mbed 0:556294574340 1701 while(logs_array[i] != NULL){
condato_mbed 0:556294574340 1702 ble_buff[0][i] = logs_array[i];
condato_mbed 0:556294574340 1703 onDataSent(i);
condato_mbed 0:556294574340 1704 i++;
condato_mbed 0:556294574340 1705 }
condato_mbed 0:556294574340 1706 printf("\nLogs count: %s\n", logs_array);
condato_mbed 0:556294574340 1707
condato_mbed 0:556294574340 1708 dataSent();
condato_mbed 0:556294574340 1709
condato_mbed 0:556294574340 1710 break;
condato_mbed 0:556294574340 1711 }
condato_mbed 0:556294574340 1712
condato_mbed 0:556294574340 1713 case 'y': //Alarn AN / AUS - Anzahl der Meldungen
condato_mbed 0:556294574340 1714 {
condato_mbed 0:556294574340 1715 connected_cancel.detach();
condato_mbed 0:556294574340 1716 clear_buffer();
condato_mbed 0:556294574340 1717
condato_mbed 0:556294574340 1718 char string[] = "Command 'y' (Alert function and count) received";
condato_mbed 0:556294574340 1719 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1720
condato_mbed 0:556294574340 1721 if(user_config_para.alert == 1){
condato_mbed 0:556294574340 1722 printf("\nAlert function - ON\n");
condato_mbed 0:556294574340 1723
condato_mbed 0:556294574340 1724 printf("\nNumber of alerts: %d\n", alert_count);
condato_mbed 0:556294574340 1725 char alerts[4];
condato_mbed 0:556294574340 1726 sprintf(alerts, "%d", alert_count);
condato_mbed 0:556294574340 1727 int i = 0;
condato_mbed 0:556294574340 1728 while(alerts[i] != NULL){
condato_mbed 0:556294574340 1729 ble_buff[0][i] = alerts[i];
condato_mbed 0:556294574340 1730 onDataSent(i);
condato_mbed 0:556294574340 1731 i++;
condato_mbed 0:556294574340 1732 }
condato_mbed 0:556294574340 1733 }else{
condato_mbed 0:556294574340 1734 printf("\nAlert function - OFF\n");
condato_mbed 0:556294574340 1735
condato_mbed 0:556294574340 1736 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1737 onDataSent(0);
condato_mbed 0:556294574340 1738 }
condato_mbed 0:556294574340 1739
condato_mbed 0:556294574340 1740 dataSent();
condato_mbed 0:556294574340 1741
condato_mbed 0:556294574340 1742 break;
condato_mbed 0:556294574340 1743 }
condato_mbed 0:556294574340 1744
condato_mbed 0:556294574340 1745 case 'k': //Initialisierungsstatus auslesen
condato_mbed 0:556294574340 1746 {
condato_mbed 0:556294574340 1747 connected_cancel.detach();
condato_mbed 0:556294574340 1748 clear_buffer();
condato_mbed 0:556294574340 1749
condato_mbed 0:556294574340 1750 char string[] = "Command 'b' (send initialize status) received";
condato_mbed 0:556294574340 1751 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1752
condato_mbed 0:556294574340 1753 if(init_status == true){
condato_mbed 0:556294574340 1754 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 1755 onDataSent(0);
condato_mbed 0:556294574340 1756
condato_mbed 0:556294574340 1757 printf("\nInitialaze status: OK\n");
condato_mbed 0:556294574340 1758 }else{
condato_mbed 0:556294574340 1759 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1760 onDataSent(0);
condato_mbed 0:556294574340 1761
condato_mbed 0:556294574340 1762 printf("\nInitialaze status: FAILED\n");
condato_mbed 0:556294574340 1763 }
condato_mbed 0:556294574340 1764
condato_mbed 0:556294574340 1765 dataSent();
condato_mbed 0:556294574340 1766
condato_mbed 0:556294574340 1767 break;
condato_mbed 0:556294574340 1768 }
condato_mbed 0:556294574340 1769
condato_mbed 0:556294574340 1770 case 'p': //Mess-Status auslesen
condato_mbed 0:556294574340 1771 {
condato_mbed 0:556294574340 1772 connected_cancel.detach();
condato_mbed 0:556294574340 1773 clear_buffer();
condato_mbed 0:556294574340 1774
condato_mbed 0:556294574340 1775 char string[] = "Command 'p' (send measurement status) received";
condato_mbed 0:556294574340 1776 write_to_sd_log_single(string);
condato_mbed 0:556294574340 1777
condato_mbed 0:556294574340 1778 if(shipping == true){
condato_mbed 0:556294574340 1779 ble_buff[0][0] = 1;
condato_mbed 0:556294574340 1780 onDataSent(0);
condato_mbed 0:556294574340 1781
condato_mbed 0:556294574340 1782 wait(1);
condato_mbed 0:556294574340 1783 clear_buffer();
condato_mbed 0:556294574340 1784
condato_mbed 0:556294574340 1785 if(pause == false){
condato_mbed 0:556294574340 1786 ble_buff[0][0] = '1';
condato_mbed 0:556294574340 1787 onDataSent(0);
condato_mbed 0:556294574340 1788
condato_mbed 0:556294574340 1789 printf("\nMeasuremt status = Launched\n");
condato_mbed 0:556294574340 1790 }else{
condato_mbed 0:556294574340 1791 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1792 onDataSent(0);
condato_mbed 0:556294574340 1793
condato_mbed 0:556294574340 1794 printf("\nMeasuremt status = Paused\n");
condato_mbed 0:556294574340 1795 }
condato_mbed 0:556294574340 1796
condato_mbed 0:556294574340 1797 }else{
condato_mbed 0:556294574340 1798 ble_buff[0][0] = '0';
condato_mbed 0:556294574340 1799 onDataSent(0);
condato_mbed 0:556294574340 1800
condato_mbed 0:556294574340 1801 printf("\nMeasuremt status = Sttopped\n");
condato_mbed 0:556294574340 1802 }
condato_mbed 0:556294574340 1803
condato_mbed 0:556294574340 1804 dataSent();
condato_mbed 0:556294574340 1805
condato_mbed 0:556294574340 1806 break;
condato_mbed 0:556294574340 1807 }
condato_mbed 0:556294574340 1808
condato_mbed 0:556294574340 1809 default: {
condato_mbed 0:556294574340 1810 //clear_buffer();
condato_mbed 0:556294574340 1811 response = '0';
condato_mbed 0:556294574340 1812 break;
condato_mbed 0:556294574340 1813 }
condato_mbed 0:556294574340 1814 }
condato_mbed 0:556294574340 1815 }
condato_mbed 0:556294574340 1816 }
condato_mbed 0:556294574340 1817 }