Firmware

Dependencies:   BMI160 ADT7410 Thermistor DS1621 max32630fthr Adafruit_FeatherOLED

Committer:
condato_mbed
Date:
Thu Jul 09 15:56:48 2020 +0000
Revision:
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 "Thermistor.h"
condato_mbed 0:556294574340 12 #include "Adafruit_SSD1306.h"
condato_mbed 0:556294574340 13 #include <BLE.h>
condato_mbed 0:556294574340 14 #include "ble/BLE.h"
condato_mbed 0:556294574340 15 #include "ble/Gap.h"
condato_mbed 0:556294574340 16 #include "SDBlockDevice.h"
condato_mbed 0:556294574340 17 #include "FATFileSystem.h"
condato_mbed 0:556294574340 18 #include <errno.h>
condato_mbed 0:556294574340 19 #include <stdio.h>
condato_mbed 0:556294574340 20 #include <time.h>
condato_mbed 0:556294574340 21 #include <stdint.h>
condato_mbed 0:556294574340 22
condato_mbed 0:556294574340 23 extern char device_id[];
condato_mbed 0:556294574340 24 extern unsigned short int measure_id;
condato_mbed 0:556294574340 25 extern unsigned short int log_id;
condato_mbed 0:556294574340 26
condato_mbed 0:556294574340 27 extern Serial pan1326b;
condato_mbed 0:556294574340 28 extern DigitalOut bt_rst;
condato_mbed 0:556294574340 29
condato_mbed 0:556294574340 30 extern volatile int conn_state;
condato_mbed 0:556294574340 31 extern bool in_BT;
condato_mbed 0:556294574340 32
condato_mbed 0:556294574340 33 extern AnalogIn battery;
condato_mbed 0:556294574340 34
condato_mbed 0:556294574340 35 extern DigitalOut r;
condato_mbed 0:556294574340 36 extern DigitalOut g;
condato_mbed 0:556294574340 37 extern DigitalOut b;
condato_mbed 0:556294574340 38 extern DigitalOut RGBs[];
condato_mbed 0:556294574340 39
condato_mbed 0:556294574340 40 extern MAX32630FTHR pegasus;
condato_mbed 0:556294574340 41
condato_mbed 0:556294574340 42 extern ADT7410 myADT7410;
condato_mbed 0:556294574340 43 //extern Thermistor extruder;
condato_mbed 0:556294574340 44 extern I2C i2cm2;
condato_mbed 0:556294574340 45 extern MAX14690 max14690;
condato_mbed 0:556294574340 46
condato_mbed 0:556294574340 47 extern InterruptIn button;
condato_mbed 0:556294574340 48
condato_mbed 0:556294574340 49 extern FATFileSystem fileSystem;
condato_mbed 0:556294574340 50 extern SDBlockDevice blockDevice;
condato_mbed 0:556294574340 51
condato_mbed 0:556294574340 52 extern I2C i2c;
condato_mbed 0:556294574340 53 extern int sensor_temp;
condato_mbed 0:556294574340 54 extern Adafruit_SSD1306_I2c featherOLED;
condato_mbed 0:556294574340 55
condato_mbed 0:556294574340 56 extern volatile int quit;
condato_mbed 0:556294574340 57 extern volatile int ble_return;
condato_mbed 0:556294574340 58 extern volatile int conn_state;
condato_mbed 0:556294574340 59 extern int counter_ble;
condato_mbed 0:556294574340 60
condato_mbed 0:556294574340 61 extern bool error_status;
condato_mbed 0:556294574340 62 extern bool BT_error;
condato_mbed 0:556294574340 63 extern bool shipping;
condato_mbed 0:556294574340 64 extern bool pause;
condato_mbed 0:556294574340 65 extern bool init_status;
condato_mbed 0:556294574340 66 extern bool after_BT;
condato_mbed 0:556294574340 67 extern bool charge;
condato_mbed 0:556294574340 68
condato_mbed 0:556294574340 69 extern Timeout after_BLE;
condato_mbed 0:556294574340 70 extern Timeout turnoff;
condato_mbed 0:556294574340 71 extern Timeout flipper; //
condato_mbed 0:556294574340 72 extern Timeout advertise_cancel; // Zum abbrechen von BT bei keinem Verbindungsaufbau
condato_mbed 0:556294574340 73 extern Timeout connected_cancel; // Zum abbrechen von BT bei kein Befehlempfang
condato_mbed 0:556294574340 74 extern Ticker mess_timer; // ticker eventuell nur bis 30 Minuten geeignet
condato_mbed 0:556294574340 75 extern Ticker ticker;
condato_mbed 0:556294574340 76 extern time_t now;
condato_mbed 0:556294574340 77 extern time_t raw;
condato_mbed 0:556294574340 78
condato_mbed 0:556294574340 79 extern float buffer_temp;
condato_mbed 0:556294574340 80 extern struct tm current;
condato_mbed 0:556294574340 81 extern struct tm actual;
condato_mbed 0:556294574340 82
condato_mbed 0:556294574340 83 extern struct user_config_struct user_config_para;
condato_mbed 0:556294574340 84 extern struct tm user_config_time;
condato_mbed 0:556294574340 85
condato_mbed 0:556294574340 86 extern Timeout done_rcv;
condato_mbed 0:556294574340 87
condato_mbed 0:556294574340 88 extern int next_state;
condato_mbed 0:556294574340 89
condato_mbed 0:556294574340 90 extern int unsigned long t_diff;
condato_mbed 0:556294574340 91 extern int unsigned long unix_time;
condato_mbed 0:556294574340 92
condato_mbed 0:556294574340 93 extern int default_advertise_time;
condato_mbed 0:556294574340 94 extern int default_connected_time;
condato_mbed 0:556294574340 95
condato_mbed 0:556294574340 96 extern int alert_count;
condato_mbed 0:556294574340 97
condato_mbed 0:556294574340 98 void turnON(){
condato_mbed 0:556294574340 99 max14690.writeReg(MAX14690::REG_PWR_CFG, 0x1D);
condato_mbed 0:556294574340 100 char string[] = "Coldchainlogger turned on";
condato_mbed 0:556294574340 101 write_to_sd_log_single(string);
condato_mbed 0:556294574340 102 }
condato_mbed 0:556294574340 103
condato_mbed 0:556294574340 104 void reboot(){
condato_mbed 0:556294574340 105 char string[] = "Rebooting Coldchainlogger...";
condato_mbed 0:556294574340 106 write_to_sd_log_single(string);
condato_mbed 0:556294574340 107 printf("\n__________________________\n\nRebooting Coldchainlogger\n__________________________\n\n");
condato_mbed 0:556294574340 108 log_id -= 2;
condato_mbed 0:556294574340 109 BT_false();
condato_mbed 0:556294574340 110 wait(0.2);
condato_mbed 0:556294574340 111 NVIC_SystemReset();
condato_mbed 0:556294574340 112 }
condato_mbed 0:556294574340 113
condato_mbed 0:556294574340 114 void set_time(){
condato_mbed 0:556294574340 115 unix_time = 946684800; //946684800: 2000-01-01 00:00:00
condato_mbed 0:556294574340 116 now = time(0);
condato_mbed 0:556294574340 117 time(&now);
condato_mbed 0:556294574340 118 set_time(unix_time);
condato_mbed 0:556294574340 119 }
condato_mbed 0:556294574340 120
condato_mbed 0:556294574340 121 int set_app_time(unsigned long device_time){
condato_mbed 0:556294574340 122 printf("\nDevice time: %ld\n", device_time);
condato_mbed 0:556294574340 123 if(device_time >= 946684800){
condato_mbed 0:556294574340 124 unix_time = device_time;
condato_mbed 0:556294574340 125 now = time(0);
condato_mbed 0:556294574340 126 time(&now);
condato_mbed 0:556294574340 127 set_time(unix_time);
condato_mbed 0:556294574340 128
condato_mbed 0:556294574340 129 tm *current;
condato_mbed 0:556294574340 130 time(&now);
condato_mbed 0:556294574340 131 current = localtime (&now);
condato_mbed 0:556294574340 132 char string[] = "Device time updated";
condato_mbed 0:556294574340 133 write_to_sd_log_single(string);
condato_mbed 0:556294574340 134 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 135 printf("\n__________________________\n\nNew device time applied\n__________________________\n\n");
condato_mbed 0:556294574340 136
condato_mbed 0:556294574340 137 return 1;
condato_mbed 0:556294574340 138 }else{
condato_mbed 0:556294574340 139 printf("\n__________________________\n\nCan not applie new device time\n__________________________\n\n");
condato_mbed 0:556294574340 140
condato_mbed 0:556294574340 141 return -1;
condato_mbed 0:556294574340 142 }
condato_mbed 0:556294574340 143 }
condato_mbed 0:556294574340 144
condato_mbed 0:556294574340 145 void write_to_sd_log_single(char log_string[])
condato_mbed 0:556294574340 146 {
condato_mbed 0:556294574340 147 fileSystem.unmount();
condato_mbed 0:556294574340 148 fflush(stdout);
condato_mbed 0:556294574340 149
condato_mbed 0:556294574340 150 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 151
condato_mbed 0:556294574340 152 char file_name[14] = "/fs/log";
condato_mbed 0:556294574340 153 char file_type[10] = ".csv";
condato_mbed 0:556294574340 154 char buff_file[25];
condato_mbed 0:556294574340 155 sprintf(buff_file, "%s%s", file_name, file_type);
condato_mbed 0:556294574340 156 FILE * f = fopen(buff_file, "a");
condato_mbed 0:556294574340 157
condato_mbed 0:556294574340 158 log_id++;
condato_mbed 0:556294574340 159
condato_mbed 0:556294574340 160 tm *current;
condato_mbed 0:556294574340 161 time(&now);
condato_mbed 0:556294574340 162 current = localtime (&now);
condato_mbed 0:556294574340 163 fprintf(f, "%d;20%02d-%02d-%02d;%02d:%02d:%02d;%s;\r\n", log_id, current->tm_year - 100, current->tm_mon + 1, current->tm_mday, current->tm_hour, current->tm_min, current->tm_sec, log_string);
condato_mbed 0:556294574340 164
condato_mbed 0:556294574340 165 fclose(f);
condato_mbed 0:556294574340 166 fileSystem.unmount();
condato_mbed 0:556294574340 167 }
condato_mbed 0:556294574340 168
condato_mbed 0:556294574340 169 void write_to_sd_messdaten_single(float buffer_temp)
condato_mbed 0:556294574340 170 {
condato_mbed 0:556294574340 171 fileSystem.unmount();
condato_mbed 0:556294574340 172 fflush(stdout);
condato_mbed 0:556294574340 173
condato_mbed 0:556294574340 174
condato_mbed 0:556294574340 175 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 176
condato_mbed 0:556294574340 177 char file_name[14] = "/fs/messdaten";
condato_mbed 0:556294574340 178 char file_type[10] = ".csv";
condato_mbed 0:556294574340 179 char buff_file[25];
condato_mbed 0:556294574340 180 sprintf(buff_file, "%s%s", file_name, file_type);
condato_mbed 0:556294574340 181 FILE * f = fopen(buff_file, "a");
condato_mbed 0:556294574340 182
condato_mbed 0:556294574340 183 int buffer_conv = (int)(100 * buffer_temp);
condato_mbed 0:556294574340 184
condato_mbed 0:556294574340 185 measure_id++;
condato_mbed 0:556294574340 186
condato_mbed 0:556294574340 187 tm *current;
condato_mbed 0:556294574340 188 time(&now);
condato_mbed 0:556294574340 189 current = localtime (&now);
condato_mbed 0:556294574340 190 fprintf(f, "%d;20%02d-%02d-%02d;%02d:%02d:%02d;%d;%4d;\r\n", measure_id, current->tm_year - 100, current->tm_mon + 1, current->tm_mday, current->tm_hour, current->tm_min, current->tm_sec, sensor_temp, buffer_conv);
condato_mbed 0:556294574340 191 /*
condato_mbed 0:556294574340 192 if(sensor_temp == 2){
condato_mbed 0:556294574340 193 sensor_temp = 1;
condato_mbed 0:556294574340 194 }else{
condato_mbed 0:556294574340 195 sensor_temp = 2;
condato_mbed 0:556294574340 196 }
condato_mbed 0:556294574340 197 */
condato_mbed 0:556294574340 198 fclose(f);
condato_mbed 0:556294574340 199 fileSystem.unmount();
condato_mbed 0:556294574340 200 }
condato_mbed 0:556294574340 201
condato_mbed 0:556294574340 202 void get_save_Messpunkt(float temperatur)
condato_mbed 0:556294574340 203 {
condato_mbed 0:556294574340 204 buffer_temp = temperatur;
condato_mbed 0:556294574340 205
condato_mbed 0:556294574340 206 tm *current;
condato_mbed 0:556294574340 207 time(&now);
condato_mbed 0:556294574340 208 current = localtime (&now);
condato_mbed 0:556294574340 209 write_to_sd_messdaten_single(buffer_temp);
condato_mbed 0:556294574340 210
condato_mbed 0:556294574340 211 printf ("Measurement %d saved 20%02d-%02d-%02d %02d:%02d:%02d\r\n", measure_id, current->tm_year - 100, current->tm_mon + 1, current->tm_mday, current->tm_hour, current->tm_min, current->tm_sec);
condato_mbed 0:556294574340 212 }
condato_mbed 0:556294574340 213
condato_mbed 0:556294574340 214 float get_Messwert()
condato_mbed 0:556294574340 215 {
condato_mbed 0:556294574340 216 float temperatur = 0;
condato_mbed 0:556294574340 217 //float temperatur_2 = 0;
condato_mbed 0:556294574340 218 if(myADT7410.getTemp()){
condato_mbed 0:556294574340 219 temperatur = myADT7410.getTemp();
condato_mbed 0:556294574340 220 //temperatur_2 = extruder.get_temperature();
condato_mbed 0:556294574340 221 wait(0.3);
condato_mbed 0:556294574340 222 printf("\nTemperature Sensor mesureued: %.2f C\n", temperatur);
condato_mbed 0:556294574340 223 // printf("Temperature Thermistor mesureued: %.2f C\n\n", temperatur_2);
condato_mbed 0:556294574340 224
condato_mbed 0:556294574340 225 if(user_config_para.alert == 1){
condato_mbed 0:556294574340 226 if(user_config_para.minimum > temperatur){
condato_mbed 0:556294574340 227 char string[] = "ALERT: lower threshold limit below";
condato_mbed 0:556294574340 228 write_to_sd_log_single(string);
condato_mbed 0:556294574340 229
condato_mbed 0:556294574340 230 printf("ALERT: lower threshold limit below (lower limit: %d C)\n", user_config_para.minimum);
condato_mbed 0:556294574340 231 }else if(user_config_para.maximum < temperatur){
condato_mbed 0:556294574340 232 char string[] = "ALERT: upper threshold exceeded";
condato_mbed 0:556294574340 233 write_to_sd_log_single(string);
condato_mbed 0:556294574340 234
condato_mbed 0:556294574340 235 printf("ALERT: upper threshold exceeded (upper limit: %d C)\n", user_config_para.maximum);
condato_mbed 0:556294574340 236 }
condato_mbed 0:556294574340 237 alert_count++;
condato_mbed 0:556294574340 238 }
condato_mbed 0:556294574340 239
condato_mbed 0:556294574340 240 get_save_Messpunkt(temperatur);
condato_mbed 0:556294574340 241 //get_save_Messpunkt(temperatur_2);
condato_mbed 0:556294574340 242
condato_mbed 0:556294574340 243 return temperatur;
condato_mbed 0:556294574340 244 }else{
condato_mbed 0:556294574340 245 char string[] = "Temperature sensor not detected, unable to measure";
condato_mbed 0:556294574340 246 write_to_sd_log_single(string);
condato_mbed 0:556294574340 247 printf("\nTemperature sensor not detected, unable to measure!\n");
condato_mbed 0:556294574340 248
condato_mbed 0:556294574340 249 return -278.0;
condato_mbed 0:556294574340 250 }
condato_mbed 0:556294574340 251 }
condato_mbed 0:556294574340 252
condato_mbed 0:556294574340 253 int create_file_messdaten(){
condato_mbed 0:556294574340 254 fileSystem.unmount();
condato_mbed 0:556294574340 255 fflush(stdout);
condato_mbed 0:556294574340 256
condato_mbed 0:556294574340 257 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 258 if(file_err){
condato_mbed 0:556294574340 259 fileSystem.unmount();
condato_mbed 0:556294574340 260
condato_mbed 0:556294574340 261 char string[] = "SD mount error";
condato_mbed 0:556294574340 262 write_to_sd_log_single(string);
condato_mbed 0:556294574340 263
condato_mbed 0:556294574340 264 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 265
condato_mbed 0:556294574340 266 return -1;
condato_mbed 0:556294574340 267 }else{
condato_mbed 0:556294574340 268
condato_mbed 0:556294574340 269 char file_name[14] = "/fs/messdaten";
condato_mbed 0:556294574340 270 char file_type[10] = ".csv";
condato_mbed 0:556294574340 271 char buff_file[25];
condato_mbed 0:556294574340 272 sprintf(buff_file, "%s%s", file_name, file_type);
condato_mbed 0:556294574340 273 FILE * f = fopen(buff_file, "a");
condato_mbed 0:556294574340 274
condato_mbed 0:556294574340 275 fclose(f);
condato_mbed 0:556294574340 276 fileSystem.unmount();
condato_mbed 0:556294574340 277
condato_mbed 0:556294574340 278 return 1;
condato_mbed 0:556294574340 279 }
condato_mbed 0:556294574340 280 }
condato_mbed 0:556294574340 281
condato_mbed 0:556294574340 282 int create_file_log()
condato_mbed 0:556294574340 283 {
condato_mbed 0:556294574340 284 fileSystem.unmount();
condato_mbed 0:556294574340 285 fflush(stdout);
condato_mbed 0:556294574340 286
condato_mbed 0:556294574340 287 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 288 if(file_err){
condato_mbed 0:556294574340 289 fileSystem.unmount();
condato_mbed 0:556294574340 290
condato_mbed 0:556294574340 291 char string[] = "SD mount error";
condato_mbed 0:556294574340 292 write_to_sd_log_single(string);
condato_mbed 0:556294574340 293
condato_mbed 0:556294574340 294 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 295
condato_mbed 0:556294574340 296 return -1;
condato_mbed 0:556294574340 297 }else{
condato_mbed 0:556294574340 298
condato_mbed 0:556294574340 299 char file_name[14] = "/fs/log";
condato_mbed 0:556294574340 300 char file_type[10] = ".csv";
condato_mbed 0:556294574340 301 char buff_file[25];
condato_mbed 0:556294574340 302 sprintf(buff_file, "%s%s", file_name, file_type);
condato_mbed 0:556294574340 303 FILE * f = fopen(buff_file, "a");
condato_mbed 0:556294574340 304
condato_mbed 0:556294574340 305 fclose(f);
condato_mbed 0:556294574340 306 fileSystem.unmount();
condato_mbed 0:556294574340 307
condato_mbed 0:556294574340 308 return 1;
condato_mbed 0:556294574340 309 }
condato_mbed 0:556294574340 310 }
condato_mbed 0:556294574340 311
condato_mbed 0:556294574340 312 int delete_file_messdaten(){
condato_mbed 0:556294574340 313 fileSystem.unmount();
condato_mbed 0:556294574340 314 fflush(stdout);
condato_mbed 0:556294574340 315
condato_mbed 0:556294574340 316 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 317 if(file_err)
condato_mbed 0:556294574340 318 {
condato_mbed 0:556294574340 319 char string[] = "SD mount error";
condato_mbed 0:556294574340 320 write_to_sd_log_single(string);
condato_mbed 0:556294574340 321
condato_mbed 0:556294574340 322 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 323
condato_mbed 0:556294574340 324 fileSystem.unmount();
condato_mbed 0:556294574340 325
condato_mbed 0:556294574340 326 return -1;
condato_mbed 0:556294574340 327 }else{
condato_mbed 0:556294574340 328 remove("/fs/messdaten.csv");
condato_mbed 0:556294574340 329 wait(0.2);
condato_mbed 0:556294574340 330 fileSystem.unmount();
condato_mbed 0:556294574340 331 fflush(stdout);
condato_mbed 0:556294574340 332
condato_mbed 0:556294574340 333 char string_1[] = "Measuring data file deleted";
condato_mbed 0:556294574340 334 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 335
condato_mbed 0:556294574340 336 if(create_file_messdaten() == 1){
condato_mbed 0:556294574340 337
condato_mbed 0:556294574340 338 char string[] = "New measuring data file created";
condato_mbed 0:556294574340 339 write_to_sd_log_single(string);
condato_mbed 0:556294574340 340
condato_mbed 0:556294574340 341 fileSystem.unmount();
condato_mbed 0:556294574340 342
condato_mbed 0:556294574340 343 measure_id = 0;
condato_mbed 0:556294574340 344
condato_mbed 0:556294574340 345 printf("\n__________________________\n\nMeasuring data deleted\n__________________________\n\n");
condato_mbed 0:556294574340 346 return 1;
condato_mbed 0:556294574340 347 }else{
condato_mbed 0:556294574340 348 fileSystem.unmount();
condato_mbed 0:556294574340 349 printf("\nError while creating new file\n");
condato_mbed 0:556294574340 350 return -1;
condato_mbed 0:556294574340 351 }
condato_mbed 0:556294574340 352 }
condato_mbed 0:556294574340 353 }
condato_mbed 0:556294574340 354
condato_mbed 0:556294574340 355 int delete_file_log(){
condato_mbed 0:556294574340 356 fileSystem.unmount();
condato_mbed 0:556294574340 357 fflush(stdout);
condato_mbed 0:556294574340 358
condato_mbed 0:556294574340 359 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 360 if(file_err)
condato_mbed 0:556294574340 361 {
condato_mbed 0:556294574340 362 char string[] = "SD mount error";
condato_mbed 0:556294574340 363 write_to_sd_log_single(string);
condato_mbed 0:556294574340 364
condato_mbed 0:556294574340 365 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 366
condato_mbed 0:556294574340 367 fileSystem.unmount();
condato_mbed 0:556294574340 368
condato_mbed 0:556294574340 369 return -1;
condato_mbed 0:556294574340 370 }else{
condato_mbed 0:556294574340 371
condato_mbed 0:556294574340 372 remove("/fs/log.csv");
condato_mbed 0:556294574340 373 wait(0.2);
condato_mbed 0:556294574340 374 /*
condato_mbed 0:556294574340 375 char string_1[] = "Log file deleted";
condato_mbed 0:556294574340 376 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 377 */
condato_mbed 0:556294574340 378 if(create_file_log() == 1){
condato_mbed 0:556294574340 379
condato_mbed 0:556294574340 380 log_id = 0;
condato_mbed 0:556294574340 381
condato_mbed 0:556294574340 382 char string[] = "New log data file created";
condato_mbed 0:556294574340 383 write_to_sd_log_single(string);
condato_mbed 0:556294574340 384
condato_mbed 0:556294574340 385 fileSystem.unmount();
condato_mbed 0:556294574340 386
condato_mbed 0:556294574340 387 printf("\n__________________________\n\nLog deleted\n__________________________\n\n");
condato_mbed 0:556294574340 388 return 1;
condato_mbed 0:556294574340 389 }else{
condato_mbed 0:556294574340 390 fileSystem.unmount();
condato_mbed 0:556294574340 391 printf("\nError while creating new file\n");
condato_mbed 0:556294574340 392 return -1;
condato_mbed 0:556294574340 393 }
condato_mbed 0:556294574340 394 }
condato_mbed 0:556294574340 395 }
condato_mbed 0:556294574340 396
condato_mbed 0:556294574340 397 int file_copy(const char *src, const char *dst)
condato_mbed 0:556294574340 398 {
condato_mbed 0:556294574340 399 fileSystem.unmount();
condato_mbed 0:556294574340 400 fflush(stdout);
condato_mbed 0:556294574340 401
condato_mbed 0:556294574340 402 int retval = 0;
condato_mbed 0:556294574340 403 int ch;
condato_mbed 0:556294574340 404
condato_mbed 0:556294574340 405 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 406 if(file_err)
condato_mbed 0:556294574340 407 {
condato_mbed 0:556294574340 408 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 409 fileSystem.unmount();
condato_mbed 0:556294574340 410
condato_mbed 0:556294574340 411 return -1;
condato_mbed 0:556294574340 412 }else{
condato_mbed 0:556294574340 413
condato_mbed 0:556294574340 414 FILE *fpsrc = fopen(src, "r"); // src file
condato_mbed 0:556294574340 415 FILE *fpdst = fopen(dst, "w"); // dest file
condato_mbed 0:556294574340 416
condato_mbed 0:556294574340 417 while (1) { // Copy src to dest
condato_mbed 0:556294574340 418 ch = fgetc(fpsrc); // until src EOF read.
condato_mbed 0:556294574340 419 if (ch == EOF) break;
condato_mbed 0:556294574340 420 fputc(ch, fpdst);
condato_mbed 0:556294574340 421 }
condato_mbed 0:556294574340 422 fclose(fpsrc);
condato_mbed 0:556294574340 423 fclose(fpdst);
condato_mbed 0:556294574340 424
condato_mbed 0:556294574340 425 fpdst = fopen(dst, "r"); // Reopen dest to insure
condato_mbed 0:556294574340 426 if (fpdst == NULL) { // that it was created.
condato_mbed 0:556294574340 427 retval = -1; // Return error.
condato_mbed 0:556294574340 428 } else {
condato_mbed 0:556294574340 429 fclose(fpdst);
condato_mbed 0:556294574340 430 retval = 0; // Return success.
condato_mbed 0:556294574340 431 }
condato_mbed 0:556294574340 432 return retval;
condato_mbed 0:556294574340 433 }
condato_mbed 0:556294574340 434 }
condato_mbed 0:556294574340 435
condato_mbed 0:556294574340 436 int load_user_config()
condato_mbed 0:556294574340 437 {
condato_mbed 0:556294574340 438 printf("\n__________________________\n\nReading the config\n__________________________\n\n");
condato_mbed 0:556294574340 439
condato_mbed 0:556294574340 440 fileSystem.unmount();
condato_mbed 0:556294574340 441 fflush(stdout);
condato_mbed 0:556294574340 442
condato_mbed 0:556294574340 443 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 444 if(file_err)
condato_mbed 0:556294574340 445 {
condato_mbed 0:556294574340 446 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 447 fileSystem.unmount();
condato_mbed 0:556294574340 448
condato_mbed 0:556294574340 449 return -1;
condato_mbed 0:556294574340 450 }else{
condato_mbed 0:556294574340 451
condato_mbed 0:556294574340 452 FILE * conf = fopen ("/fs/user_config.csv", "rb");
condato_mbed 0:556294574340 453 char buffer[700];
condato_mbed 0:556294574340 454 int length;
condato_mbed 0:556294574340 455
condato_mbed 0:556294574340 456 if (conf)
condato_mbed 0:556294574340 457 {
condato_mbed 0:556294574340 458 fseek (conf, 0, SEEK_END);
condato_mbed 0:556294574340 459 length = ftell (conf);
condato_mbed 0:556294574340 460 fseek (conf, 0, SEEK_SET);
condato_mbed 0:556294574340 461
condato_mbed 0:556294574340 462 if (buffer)
condato_mbed 0:556294574340 463 {
condato_mbed 0:556294574340 464 fread (buffer, 1, length, conf);
condato_mbed 0:556294574340 465 }
condato_mbed 0:556294574340 466 fclose(conf);
condato_mbed 0:556294574340 467 fileSystem.unmount();
condato_mbed 0:556294574340 468
condato_mbed 0:556294574340 469 if (buffer)
condato_mbed 0:556294574340 470 {
condato_mbed 0:556294574340 471 char* single_word[100];
condato_mbed 0:556294574340 472 int word_count = 0;
condato_mbed 0:556294574340 473 char delim[] = ";\r\n";
condato_mbed 0:556294574340 474 char *ptr = strtok(buffer, delim);
condato_mbed 0:556294574340 475
condato_mbed 0:556294574340 476 for(int j = 0; j < 100; j++)
condato_mbed 0:556294574340 477 {
condato_mbed 0:556294574340 478 single_word[j] = new char[15];
condato_mbed 0:556294574340 479 }
condato_mbed 0:556294574340 480
condato_mbed 0:556294574340 481 while (ptr != NULL)
condato_mbed 0:556294574340 482 {
condato_mbed 0:556294574340 483 strcpy(single_word[word_count], ptr);
condato_mbed 0:556294574340 484 ptr = strtok(NULL, delim);
condato_mbed 0:556294574340 485 word_count++;
condato_mbed 0:556294574340 486 }
condato_mbed 0:556294574340 487
condato_mbed 0:556294574340 488 const char *params[] = {"interval", "alert", "minimum", "maximum", "wait_mode", "pre_delay", "advertise", "connected"};
condato_mbed 0:556294574340 489 for(int k = 0; k < 100; k++)
condato_mbed 0:556294574340 490 {
condato_mbed 0:556294574340 491 for(int l = 0; l < 8; l++)
condato_mbed 0:556294574340 492 {
condato_mbed 0:556294574340 493 if(strcmp(single_word[k], params[0]) == 0){
condato_mbed 0:556294574340 494 user_config_para.interval = atoi(single_word[k+1]);
condato_mbed 0:556294574340 495 }
condato_mbed 0:556294574340 496 else if(strcmp(single_word[k], params[1]) == 0){
condato_mbed 0:556294574340 497 user_config_para.alert = atoi(single_word[k+1]);
condato_mbed 0:556294574340 498 }
condato_mbed 0:556294574340 499 else if(strcmp(single_word[k], params[2]) == 0){
condato_mbed 0:556294574340 500 user_config_para.minimum = atoi(single_word[k+1]);
condato_mbed 0:556294574340 501 }
condato_mbed 0:556294574340 502 else if(strcmp(single_word[k], params[3]) == 0){
condato_mbed 0:556294574340 503 user_config_para.maximum = atoi(single_word[k+1]);
condato_mbed 0:556294574340 504 }
condato_mbed 0:556294574340 505 else if(strcmp(single_word[k], params[4]) == 0){
condato_mbed 0:556294574340 506 user_config_para.wait_mode = atoi(single_word[k+1]);
condato_mbed 0:556294574340 507 }
condato_mbed 0:556294574340 508 else if(strcmp(single_word[k], params[5]) == 0){
condato_mbed 0:556294574340 509 user_config_para.pre_delay = atoi(single_word[k+1]);
condato_mbed 0:556294574340 510 }
condato_mbed 0:556294574340 511 else if(strcmp(single_word[k], params[6]) == 0){
condato_mbed 0:556294574340 512 user_config_para.advertise = atoi(single_word[k+1]);
condato_mbed 0:556294574340 513 }
condato_mbed 0:556294574340 514 else if(strcmp(single_word[k], params[7]) == 0){
condato_mbed 0:556294574340 515 user_config_para.connected = atoi(single_word[k+1]);
condato_mbed 0:556294574340 516 }
condato_mbed 0:556294574340 517 }
condato_mbed 0:556294574340 518 }
condato_mbed 0:556294574340 519
condato_mbed 0:556294574340 520 //printf("\nID: #%s\n", user_config_para.id);
condato_mbed 0:556294574340 521
condato_mbed 0:556294574340 522 //char idnummer[10];
condato_mbed 0:556294574340 523 //sscanf(idnummer, "%d", &user_config_para.id);
condato_mbed 0:556294574340 524
condato_mbed 0:556294574340 525 printf("\nLogger-ID: #%s\n", device_id);
condato_mbed 0:556294574340 526 if(user_config_para.interval == 1){
condato_mbed 0:556294574340 527 printf("Mesureual interval: %d second\n", user_config_para.interval);
condato_mbed 0:556294574340 528 }else{
condato_mbed 0:556294574340 529 printf("Mesureual interval: %d seconds\n", user_config_para.interval);
condato_mbed 0:556294574340 530 }
condato_mbed 0:556294574340 531 if(user_config_para.alert == 1){
condato_mbed 0:556294574340 532 printf("Alert-function - ON\n");
condato_mbed 0:556294574340 533 printf("Minimum temperature: %d C | Maximum temperature: %d C\n", user_config_para.minimum, user_config_para.maximum);
condato_mbed 0:556294574340 534 }else{
condato_mbed 0:556294574340 535 printf("Alert-function - OFF\n");
condato_mbed 0:556294574340 536 }
condato_mbed 0:556294574340 537 printf("BLE advertise timer: %d seconds\n", user_config_para.advertise);
condato_mbed 0:556294574340 538 printf("BLE when connected timer: %d seconds\n", user_config_para.connected);
condato_mbed 0:556294574340 539
condato_mbed 0:556294574340 540 if(user_config_para.wait_mode == 1){
condato_mbed 0:556294574340 541 printf("Pre-delay - ON: %d seconds\n", user_config_para.pre_delay);
condato_mbed 0:556294574340 542 }else{
condato_mbed 0:556294574340 543 printf("Pre-delay - OFF\n");
condato_mbed 0:556294574340 544 }
condato_mbed 0:556294574340 545 }
condato_mbed 0:556294574340 546 else{
condato_mbed 0:556294574340 547 printf("Buffer empty: %s", buffer);
condato_mbed 0:556294574340 548 }
condato_mbed 0:556294574340 549 return 1;
condato_mbed 0:556294574340 550 }
condato_mbed 0:556294574340 551 else{
condato_mbed 0:556294574340 552 printf("!!! Config file not found, error: %s (%d)\n", strerror(errno), -errno);
condato_mbed 0:556294574340 553 fileSystem.unmount();
condato_mbed 0:556294574340 554 user_config_para.advertise = default_advertise_time;
condato_mbed 0:556294574340 555 user_config_para.connected = default_connected_time;
condato_mbed 0:556294574340 556 return -1;
condato_mbed 0:556294574340 557 }
condato_mbed 0:556294574340 558 }
condato_mbed 0:556294574340 559 }
condato_mbed 0:556294574340 560
condato_mbed 0:556294574340 561 int load_standard_config(){
condato_mbed 0:556294574340 562 fileSystem.unmount();
condato_mbed 0:556294574340 563 fflush(stdout);
condato_mbed 0:556294574340 564
condato_mbed 0:556294574340 565 printf("\n__________________________\n\nReseting config settings \nto default\n__________________________\n\n");
condato_mbed 0:556294574340 566
condato_mbed 0:556294574340 567 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 568
condato_mbed 0:556294574340 569 if(file_err){
condato_mbed 0:556294574340 570 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 571 fileSystem.unmount();
condato_mbed 0:556294574340 572
condato_mbed 0:556294574340 573 return -1;
condato_mbed 0:556294574340 574 }else{
condato_mbed 0:556294574340 575 remove("/fs/user_config.csv");
condato_mbed 0:556294574340 576 wait(0.2);
condato_mbed 0:556294574340 577
condato_mbed 0:556294574340 578 if(file_copy("/fs/standard_config.csv", "/fs/user_config.csv") == 0){
condato_mbed 0:556294574340 579 load_user_config();
condato_mbed 0:556294574340 580
condato_mbed 0:556294574340 581 printf("\n__________________________\n\nConfig settings reseted\n__________________________\n\n");
condato_mbed 0:556294574340 582 char string[] = "Standard user config file created";
condato_mbed 0:556294574340 583 write_to_sd_log_single(string);
condato_mbed 0:556294574340 584 fileSystem.unmount();
condato_mbed 0:556294574340 585
condato_mbed 0:556294574340 586 return 1;
condato_mbed 0:556294574340 587 }else{
condato_mbed 0:556294574340 588 printf("\n__________________________\n\nFailed to reset config file\n__________________________\n\n");
condato_mbed 0:556294574340 589 char string[] = "Failed to copy standard config file";
condato_mbed 0:556294574340 590 write_to_sd_log_single(string);
condato_mbed 0:556294574340 591 fileSystem.unmount();
condato_mbed 0:556294574340 592
condato_mbed 0:556294574340 593 return -1;
condato_mbed 0:556294574340 594 }
condato_mbed 0:556294574340 595 }
condato_mbed 0:556294574340 596 }
condato_mbed 0:556294574340 597
condato_mbed 0:556294574340 598 int read_id()
condato_mbed 0:556294574340 599 {
condato_mbed 0:556294574340 600 fileSystem.unmount();
condato_mbed 0:556294574340 601 fflush(stdout);
condato_mbed 0:556294574340 602
condato_mbed 0:556294574340 603 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 604 if(file_err)
condato_mbed 0:556294574340 605 {
condato_mbed 0:556294574340 606 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 607 fileSystem.unmount();
condato_mbed 0:556294574340 608
condato_mbed 0:556294574340 609 return -1;
condato_mbed 0:556294574340 610 }else{
condato_mbed 0:556294574340 611
condato_mbed 0:556294574340 612 FILE * id = fopen ("/fs/id.csv", "rb");
condato_mbed 0:556294574340 613 char buffer[14];
condato_mbed 0:556294574340 614 int length;
condato_mbed 0:556294574340 615
condato_mbed 0:556294574340 616 if (id)
condato_mbed 0:556294574340 617 {
condato_mbed 0:556294574340 618 fseek (id, 0, SEEK_END);
condato_mbed 0:556294574340 619 length = ftell (id);
condato_mbed 0:556294574340 620 fseek (id, 0, SEEK_SET);
condato_mbed 0:556294574340 621
condato_mbed 0:556294574340 622 if (buffer)
condato_mbed 0:556294574340 623 {
condato_mbed 0:556294574340 624 fread (buffer, 1, length, id);
condato_mbed 0:556294574340 625 }
condato_mbed 0:556294574340 626 fclose(id);
condato_mbed 0:556294574340 627 fileSystem.unmount();
condato_mbed 0:556294574340 628
condato_mbed 0:556294574340 629 if (buffer)
condato_mbed 0:556294574340 630 {
condato_mbed 0:556294574340 631 char* single_word[10];
condato_mbed 0:556294574340 632 int word_count = 0;
condato_mbed 0:556294574340 633 char delim[] = ";\r\n";
condato_mbed 0:556294574340 634 char *ptr = strtok(buffer, delim);
condato_mbed 0:556294574340 635
condato_mbed 0:556294574340 636 for(int j = 0; j < 10; j++)
condato_mbed 0:556294574340 637 {
condato_mbed 0:556294574340 638 single_word[j] = new char[10];
condato_mbed 0:556294574340 639 }
condato_mbed 0:556294574340 640
condato_mbed 0:556294574340 641 while (ptr != NULL)
condato_mbed 0:556294574340 642 {
condato_mbed 0:556294574340 643 strcpy(single_word[word_count], ptr);
condato_mbed 0:556294574340 644 ptr = strtok(NULL, delim);
condato_mbed 0:556294574340 645 word_count++;
condato_mbed 0:556294574340 646 }
condato_mbed 0:556294574340 647
condato_mbed 0:556294574340 648 strcpy(device_id, single_word[1]);
condato_mbed 0:556294574340 649 return 1;
condato_mbed 0:556294574340 650 }
condato_mbed 0:556294574340 651 else{
condato_mbed 0:556294574340 652 printf("Buffer empty: %s", buffer);
condato_mbed 0:556294574340 653 return -1;
condato_mbed 0:556294574340 654 }
condato_mbed 0:556294574340 655 }
condato_mbed 0:556294574340 656 else{
condato_mbed 0:556294574340 657 printf("!!! Config file not found, error: %s (%d)\n", strerror(errno), -errno);
condato_mbed 0:556294574340 658 fileSystem.unmount();
condato_mbed 0:556294574340 659 return -1;
condato_mbed 0:556294574340 660 }
condato_mbed 0:556294574340 661 }
condato_mbed 0:556294574340 662 }
condato_mbed 0:556294574340 663
condato_mbed 0:556294574340 664 int create_user_config(char params[]){
condato_mbed 0:556294574340 665 fileSystem.unmount();
condato_mbed 0:556294574340 666 fflush(stdout);
condato_mbed 0:556294574340 667
condato_mbed 0:556294574340 668 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 669 if(file_err){
condato_mbed 0:556294574340 670 printf("\n__________________________\n\n! No SD-card detected !\n__________________________\n\n");
condato_mbed 0:556294574340 671 fileSystem.unmount();
condato_mbed 0:556294574340 672
condato_mbed 0:556294574340 673 return -1;
condato_mbed 0:556294574340 674 }else{
condato_mbed 0:556294574340 675 remove("/fs/user_config.csv");
condato_mbed 0:556294574340 676 wait(0.2);
condato_mbed 0:556294574340 677 char string[] = "User config file deleted";
condato_mbed 0:556294574340 678 write_to_sd_log_single(string);
condato_mbed 0:556294574340 679 fileSystem.unmount();
condato_mbed 0:556294574340 680
condato_mbed 0:556294574340 681 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 682 char file_name[16] = "/fs/user_config";
condato_mbed 0:556294574340 683 char file_type[10] = ".csv";
condato_mbed 0:556294574340 684 char buff_file[27];
condato_mbed 0:556294574340 685 sprintf(buff_file, "%s%s", file_name, file_type);
condato_mbed 0:556294574340 686 FILE * f = fopen(buff_file, "a");
condato_mbed 0:556294574340 687
condato_mbed 0:556294574340 688 fclose(f);
condato_mbed 0:556294574340 689
condato_mbed 0:556294574340 690 char string_1[] = "User config file created";
condato_mbed 0:556294574340 691 write_to_sd_log_single(string_1);
condato_mbed 0:556294574340 692
condato_mbed 0:556294574340 693 fileSystem.unmount();
condato_mbed 0:556294574340 694
condato_mbed 0:556294574340 695 char *single_word[15];
condato_mbed 0:556294574340 696 int word_count = 0;
condato_mbed 0:556294574340 697 char delim[] = ";\r\n";
condato_mbed 0:556294574340 698 char *ptr = strtok(params, delim);
condato_mbed 0:556294574340 699 for(int j = 0; j < 9; j++)
condato_mbed 0:556294574340 700 {
condato_mbed 0:556294574340 701 single_word[j] = new char[6];
condato_mbed 0:556294574340 702 }
condato_mbed 0:556294574340 703
condato_mbed 0:556294574340 704 while (ptr != NULL)
condato_mbed 0:556294574340 705 {
condato_mbed 0:556294574340 706 strcpy(single_word[word_count], ptr);
condato_mbed 0:556294574340 707 ptr = strtok(NULL, delim);
condato_mbed 0:556294574340 708 word_count++;
condato_mbed 0:556294574340 709 }
condato_mbed 0:556294574340 710 printf("interval;%s;\r\nalert;%s;\r\nminimum;%s;\r\nmaximum;%s;\r\nwait_mode;%s;\r\npre_delay;%s;\r\nadvertise;%s;\r\nconnected;%s;",
condato_mbed 0:556294574340 711 single_word[0], single_word[1], single_word[2], single_word[3], single_word[4], single_word[5], single_word[6], single_word[7]);
condato_mbed 0:556294574340 712
condato_mbed 0:556294574340 713 fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 714 FILE * fp = fopen("/fs/user_config.csv", "w");
condato_mbed 0:556294574340 715
condato_mbed 0:556294574340 716 fprintf(fp, "interval;%s;\r\n", single_word[0]);
condato_mbed 0:556294574340 717 fprintf(fp, "alert;%s;\r\n", single_word[1]);
condato_mbed 0:556294574340 718 fprintf(fp, "minimum;%s;\r\n", single_word[2]);
condato_mbed 0:556294574340 719 fprintf(fp, "maximum;%s;\r\n", single_word[3]);
condato_mbed 0:556294574340 720 fprintf(fp, "wait_mode;%s;\r\n", single_word[4]);
condato_mbed 0:556294574340 721 fprintf(fp, "pre_delay;%s;\r\n", single_word[5]);
condato_mbed 0:556294574340 722 fprintf(fp, "advertise;%s;\r\n", single_word[6]);
condato_mbed 0:556294574340 723 fprintf(fp, "connected;%s;\r\n", single_word[7]);
condato_mbed 0:556294574340 724
condato_mbed 0:556294574340 725 fclose(fp);
condato_mbed 0:556294574340 726 fileSystem.unmount();
condato_mbed 0:556294574340 727
condato_mbed 0:556294574340 728 if(load_user_config() == 1){
condato_mbed 0:556294574340 729 return 1;
condato_mbed 0:556294574340 730 }else{
condato_mbed 0:556294574340 731 printf("\nFaild to read the config!\n");
condato_mbed 0:556294574340 732 return -1;
condato_mbed 0:556294574340 733 }
condato_mbed 0:556294574340 734 }
condato_mbed 0:556294574340 735 }
condato_mbed 0:556294574340 736
condato_mbed 0:556294574340 737 void led_blink(int led, int anzahl, int lang, int pause){
condato_mbed 0:556294574340 738 for(int i = 0; anzahl > i; i++){
condato_mbed 0:556294574340 739 RGBs[led] = 0;
condato_mbed 0:556294574340 740 if(lang == 1){
condato_mbed 0:556294574340 741 wait(1.5);
condato_mbed 0:556294574340 742 }else{
condato_mbed 0:556294574340 743 wait(0.5);
condato_mbed 0:556294574340 744 }
condato_mbed 0:556294574340 745 RGBs[led] = 1;
condato_mbed 0:556294574340 746 wait(0.5);
condato_mbed 0:556294574340 747 }
condato_mbed 0:556294574340 748 if(pause == 1){
condato_mbed 0:556294574340 749 wait(1);
condato_mbed 0:556294574340 750 }
condato_mbed 0:556294574340 751 }
condato_mbed 0:556294574340 752
condato_mbed 0:556294574340 753 void error_handler(int error)
condato_mbed 0:556294574340 754 {
condato_mbed 0:556294574340 755 ticker.detach();
condato_mbed 0:556294574340 756 g = 1;
condato_mbed 0:556294574340 757 wait(1);
condato_mbed 0:556294574340 758
condato_mbed 0:556294574340 759 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 760 if(file_err){
condato_mbed 0:556294574340 761 switch (error) {
condato_mbed 0:556294574340 762 case 10:{ //led_blink(0, 2, 1, 1);
condato_mbed 0:556294574340 763 }
condato_mbed 0:556294574340 764 break;
condato_mbed 0:556294574340 765 case 11:{ BT_error = true; //led_blink(0, 1, 1, 1); led_blink(0, 2, 1, 1);
condato_mbed 0:556294574340 766 }
condato_mbed 0:556294574340 767 break;
condato_mbed 0:556294574340 768 case 110:{ //led_blink(0, 2, 1, 1); led_blink(0, 3, 1, 1);
condato_mbed 0:556294574340 769 }
condato_mbed 0:556294574340 770 break;
condato_mbed 0:556294574340 771 case 111:{ BT_error = true; //led_blink(0, 1, 1, 1); led_blink(0, 2, 1, 1); led_blink(0, 3, 1, 1);
condato_mbed 0:556294574340 772 }
condato_mbed 0:556294574340 773 break;
condato_mbed 0:556294574340 774 }
condato_mbed 0:556294574340 775 fileSystem.unmount();
condato_mbed 0:556294574340 776 }else{
condato_mbed 0:556294574340 777 tm *current;
condato_mbed 0:556294574340 778 time(&now);
condato_mbed 0:556294574340 779 current = localtime (&now);
condato_mbed 0:556294574340 780
condato_mbed 0:556294574340 781 switch (error) {
condato_mbed 0:556294574340 782 case 0:{ char string[] = "Initializing succesfull"; write_to_sd_log_single(string); led_blink(1, 1, 0, 0);
condato_mbed 0:556294574340 783 }
condato_mbed 0:556294574340 784 break;
condato_mbed 0:556294574340 785 case 1:{ char string[] = "Initializing failed: Bluetooth not detected"; write_to_sd_log_single(string); BT_error = true; //led_blink(0, 1, 1, 1);
condato_mbed 0:556294574340 786 }
condato_mbed 0:556294574340 787 break;
condato_mbed 0:556294574340 788 case 100:{ char string[] = "Initializing failed: Temperature sensor not detected"; write_to_sd_log_single(string); //led_blink(0, 3, 1, 1);
condato_mbed 0:556294574340 789 }
condato_mbed 0:556294574340 790 break;
condato_mbed 0:556294574340 791 case 101:{ char string[] = "Initializing failed: Temperature sensor and bluetooth not detected"; write_to_sd_log_single(string); BT_error = true; //led_blink(0, 1, 1, 1); led_blink(0, 3, 1, 1);
condato_mbed 0:556294574340 792 }
condato_mbed 0:556294574340 793 break;
condato_mbed 0:556294574340 794 }
condato_mbed 0:556294574340 795 fileSystem.unmount();
condato_mbed 0:556294574340 796 }
condato_mbed 0:556294574340 797 r = 1;
condato_mbed 0:556294574340 798 g = 1;
condato_mbed 0:556294574340 799 b = 1;
condato_mbed 0:556294574340 800 wait(0.5);
condato_mbed 0:556294574340 801 }
condato_mbed 0:556294574340 802
condato_mbed 0:556294574340 803 int check_devices()
condato_mbed 0:556294574340 804 {
condato_mbed 0:556294574340 805 printf("\nDevices check...\n\n");
condato_mbed 0:556294574340 806
condato_mbed 0:556294574340 807 int bl = 1;
condato_mbed 0:556294574340 808 int sd = 10;
condato_mbed 0:556294574340 809 int temp = 100;
condato_mbed 0:556294574340 810
condato_mbed 0:556294574340 811 //myADT7410.setConfig(ONE_SPS_MODE); // reduce sample rate to save power
condato_mbed 0:556294574340 812 //printf("Config: 0x%x\n", myADT7410.getConfig());
condato_mbed 0:556294574340 813 /*
condato_mbed 0:556294574340 814 int count = 0;
condato_mbed 0:556294574340 815 for (int address = 0; address < 255; address += 2) { // check only for device's read address
condato_mbed 0:556294574340 816 if (!i2c.write(address, NULL, 0)) { // 0 returned is ok
condato_mbed 0:556294574340 817 printf("I2C address 0x%02X\n", address);
condato_mbed 0:556294574340 818 count++;
condato_mbed 0:556294574340 819 }
condato_mbed 0:556294574340 820 }
condato_mbed 0:556294574340 821 printf("%d devices found\n\n\n", count);
condato_mbed 0:556294574340 822 wait_ms(20);
condato_mbed 0:556294574340 823 */
condato_mbed 0:556294574340 824
condato_mbed 0:556294574340 825 //BLE check
condato_mbed 0:556294574340 826 bt_rst = 1;
condato_mbed 0:556294574340 827 bt_rst = 0;
condato_mbed 0:556294574340 828 wait(0.5);
condato_mbed 0:556294574340 829 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
condato_mbed 0:556294574340 830 ble.init(bleInitComplete);
condato_mbed 0:556294574340 831 if(ble.hasInitialized() == true){
condato_mbed 0:556294574340 832 bl = 0;
condato_mbed 0:556294574340 833 BT_error = false;
condato_mbed 0:556294574340 834 printf("\nBLE detected\n");
condato_mbed 0:556294574340 835 printMacAddress();
condato_mbed 0:556294574340 836 }else{
condato_mbed 0:556294574340 837 BT_error = true;
condato_mbed 0:556294574340 838 printf("\nBLE not detected!\n");
condato_mbed 0:556294574340 839 }
condato_mbed 0:556294574340 840
condato_mbed 0:556294574340 841 //SD check
condato_mbed 0:556294574340 842 int file_err = fileSystem.mount(&blockDevice);
condato_mbed 0:556294574340 843 if(file_err)
condato_mbed 0:556294574340 844 {
condato_mbed 0:556294574340 845 printf("\nSD-card not detected\n");
condato_mbed 0:556294574340 846 BT_error = true;
condato_mbed 0:556294574340 847 }
condato_mbed 0:556294574340 848 else {
condato_mbed 0:556294574340 849 sd = 0;
condato_mbed 0:556294574340 850 create_file_log();
condato_mbed 0:556294574340 851 create_file_messdaten();
condato_mbed 0:556294574340 852 printf("\nSD-card detected\n");
condato_mbed 0:556294574340 853
condato_mbed 0:556294574340 854 fileSystem.unmount();
condato_mbed 0:556294574340 855
condato_mbed 0:556294574340 856 messdaten_count();
condato_mbed 0:556294574340 857 printf("Measuremnts count: %d\n", measure_id);
condato_mbed 0:556294574340 858 log_count();
condato_mbed 0:556294574340 859 printf("Logs count: %d\n", log_id);
condato_mbed 0:556294574340 860 }
condato_mbed 0:556294574340 861 fileSystem.unmount();
condato_mbed 0:556294574340 862
condato_mbed 0:556294574340 863 //Temp sensor check
condato_mbed 0:556294574340 864 myADT7410.setConfig(ONE_SPS_MODE);
condato_mbed 0:556294574340 865 if(myADT7410.getConfig() == 0x40){
condato_mbed 0:556294574340 866 temp = 0;
condato_mbed 0:556294574340 867 printf("\nTemperature sensor detected\n");
condato_mbed 0:556294574340 868 myADT7410.reset();
condato_mbed 0:556294574340 869 myADT7410.setConfig(01);
condato_mbed 0:556294574340 870 }else{
condato_mbed 0:556294574340 871 printf("\nTemperature sensor not detected\n");
condato_mbed 0:556294574340 872 }
condato_mbed 0:556294574340 873
condato_mbed 0:556294574340 874 //Check output
condato_mbed 0:556294574340 875 int devices = temp + sd + bl;
condato_mbed 0:556294574340 876
condato_mbed 0:556294574340 877 if(devices != 000){
condato_mbed 0:556294574340 878 printf("\nError in check_devices(): %03d\n", devices);
condato_mbed 0:556294574340 879
condato_mbed 0:556294574340 880 error_handler(devices);
condato_mbed 0:556294574340 881
condato_mbed 0:556294574340 882 return 0;
condato_mbed 0:556294574340 883 }else{
condato_mbed 0:556294574340 884 printf("\n__________________________\n\nAll devices connected\n__________________________\n\n");
condato_mbed 0:556294574340 885
condato_mbed 0:556294574340 886 return 1;
condato_mbed 0:556294574340 887 }
condato_mbed 0:556294574340 888 }
condato_mbed 0:556294574340 889
condato_mbed 0:556294574340 890 int RTC_check(){
condato_mbed 0:556294574340 891 tm *current;
condato_mbed 0:556294574340 892 time(&now);
condato_mbed 0:556294574340 893 if ( (current = localtime (&now) ) == NULL) {
condato_mbed 0:556294574340 894 printf ("\n\n__________________________\n\n! RTC initialize failed !\n__________________________\n");
condato_mbed 0:556294574340 895 return -1;
condato_mbed 0:556294574340 896 }else{
condato_mbed 0:556294574340 897 set_time();
condato_mbed 0:556294574340 898 printf ("\n\n__________________________\n\nRTC initialized\n__________________________\n");
condato_mbed 0:556294574340 899 return 1;
condato_mbed 0:556294574340 900 }
condato_mbed 0:556294574340 901 }
condato_mbed 0:556294574340 902
condato_mbed 0:556294574340 903 void max14690_init(){
condato_mbed 0:556294574340 904 max14690.resetToDefaults();
condato_mbed 0:556294574340 905 max14690.ldo2Millivolts = 3300;
condato_mbed 0:556294574340 906 max14690.ldo3Millivolts = 3300;
condato_mbed 0:556294574340 907 max14690.ldo2Mode = MAX14690::LDO_ENABLED;
condato_mbed 0:556294574340 908 max14690.ldo3Mode = MAX14690::LDO_ENABLED;
condato_mbed 0:556294574340 909 max14690.chgEn = 1;
condato_mbed 0:556294574340 910 //max14690.intEnChgStatus = 0;
condato_mbed 0:556294574340 911 //max14690.iLimCntl = MAX14690::iLimCntl_t::ILIM_1000mA;
condato_mbed 0:556294574340 912 //max14690.batReg = MAX14690::batReg_t::BAT_REG_4350mV;
condato_mbed 0:556294574340 913 max14690.intEnUSBOVP = 1;
condato_mbed 0:556294574340 914 max14690.monCfg = MAX14690::MON_BAT; //Monitoring - Multiplexer auf SYSTEM eingestellt, um Akku-wert auszulesen
condato_mbed 0:556294574340 915 //max14690.monRatio = MAX14690::MON_DIV4;
condato_mbed 0:556294574340 916 //max14690.ldo3Mode = MAX14690::SW_EN_MPC1_DSC;
condato_mbed 0:556294574340 917 if (max14690.init() == MAX14690_ERROR) {
condato_mbed 0:556294574340 918 printf("Error initializing MAX14690");
condato_mbed 0:556294574340 919 }
condato_mbed 0:556294574340 920 }
condato_mbed 0:556294574340 921
condato_mbed 0:556294574340 922 void initCallback(void){
condato_mbed 0:556294574340 923 g = !g;
condato_mbed 0:556294574340 924 }
condato_mbed 0:556294574340 925
condato_mbed 0:556294574340 926 void init(){
condato_mbed 0:556294574340 927 r = 1;
condato_mbed 0:556294574340 928 g = 1;
condato_mbed 0:556294574340 929 b = 1;
condato_mbed 0:556294574340 930
condato_mbed 0:556294574340 931 printf("\n\n__________________________\n\nStarting Coldchainlogger\n__________________________\n\n");
condato_mbed 0:556294574340 932 ticker.attach(initCallback, 0.5);
condato_mbed 0:556294574340 933
condato_mbed 0:556294574340 934 printf("Initializing MAX32630FTHR\n\n");
condato_mbed 0:556294574340 935 pegasus.init(MAX32630FTHR::VIO_3V3);
condato_mbed 0:556294574340 936
condato_mbed 0:556294574340 937 printf("Initializing MAX14690N\n");
condato_mbed 0:556294574340 938 max14690_init();
condato_mbed 0:556294574340 939
condato_mbed 0:556294574340 940 if(RTC_check() == 1){
condato_mbed 0:556294574340 941 if(check_devices() == 1 & read_id() == 1 & load_user_config() == 1){
condato_mbed 0:556294574340 942 printf("\n__________________________\n\nInitializing succesfull\n__________________________\n\n");
condato_mbed 0:556294574340 943 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
condato_mbed 0:556294574340 944 ticker.detach();
condato_mbed 0:556294574340 945 g = 1;
condato_mbed 0:556294574340 946 init_status = true;
condato_mbed 0:556294574340 947 error_status = false;
condato_mbed 0:556294574340 948 error_handler(000);
condato_mbed 0:556294574340 949 }else{
condato_mbed 0:556294574340 950 printf("\n__________________________\n\nInitializing failed\n__________________________\n\n");
condato_mbed 0:556294574340 951 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
condato_mbed 0:556294574340 952 next_state = 0;
condato_mbed 0:556294574340 953 init_status = false;
condato_mbed 0:556294574340 954 error_status = true;
condato_mbed 0:556294574340 955 ticker.detach();
condato_mbed 0:556294574340 956 g = 1;
condato_mbed 0:556294574340 957 led_blink(0, 1, 1, 1);
condato_mbed 0:556294574340 958 }
condato_mbed 0:556294574340 959 }else{
condato_mbed 0:556294574340 960 printf("\n__________________________\n\nRTC failure\n__________________________\n\n");
condato_mbed 0:556294574340 961 error_status = true;
condato_mbed 0:556294574340 962 init_status = false;
condato_mbed 0:556294574340 963 next_state = 0;
condato_mbed 0:556294574340 964 ticker.detach();
condato_mbed 0:556294574340 965 g = 1;
condato_mbed 0:556294574340 966 led_blink(0, 1, 1, 1);
condato_mbed 0:556294574340 967 }
condato_mbed 0:556294574340 968 }