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