20200716 read Status Register each second

Dependencies:   SDFileSystem mbed-os-example-ble-GattServer max32630fthr

Committer:
aureliocarella
Date:
Thu Jul 16 14:59:04 2020 +0000
Revision:
21:51e162c130a9
20200716

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aureliocarella 21:51e162c130a9 1 /*******************************************************************************
aureliocarella 21:51e162c130a9 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
aureliocarella 21:51e162c130a9 3 *
aureliocarella 21:51e162c130a9 4 * Permission is hereby granted, free of charge, to any person obtaining a
aureliocarella 21:51e162c130a9 5 * copy of this software and associated documentation files (the "Software"),
aureliocarella 21:51e162c130a9 6 * to deal in the Software without restriction, including without limitation
aureliocarella 21:51e162c130a9 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
aureliocarella 21:51e162c130a9 8 * and/or sell copies of the Software, and to permit persons to whom the
aureliocarella 21:51e162c130a9 9 * Software is furnished to do so, subject to the following conditions:
aureliocarella 21:51e162c130a9 10 *
aureliocarella 21:51e162c130a9 11 * The above copyright notice and this permission notice shall be included
aureliocarella 21:51e162c130a9 12 * in all copies or substantial portions of the Software.
aureliocarella 21:51e162c130a9 13 *
aureliocarella 21:51e162c130a9 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
aureliocarella 21:51e162c130a9 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
aureliocarella 21:51e162c130a9 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
aureliocarella 21:51e162c130a9 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
aureliocarella 21:51e162c130a9 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
aureliocarella 21:51e162c130a9 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
aureliocarella 21:51e162c130a9 20 * OTHER DEALINGS IN THE SOFTWARE.
aureliocarella 21:51e162c130a9 21 *
aureliocarella 21:51e162c130a9 22 * Except as contained in this notice, the name of Maxim Integrated
aureliocarella 21:51e162c130a9 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
aureliocarella 21:51e162c130a9 24 * Products, Inc. Branding Policy.
aureliocarella 21:51e162c130a9 25 *
aureliocarella 21:51e162c130a9 26 * The mere transfer of this software does not imply any licenses
aureliocarella 21:51e162c130a9 27 * of trade secrets, proprietary technology, copyrights, patents,
aureliocarella 21:51e162c130a9 28 * trademarks, maskwork rights, or any other form of intellectual
aureliocarella 21:51e162c130a9 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
aureliocarella 21:51e162c130a9 30 * ownership rights.
aureliocarella 21:51e162c130a9 31 *******************************************************************************
aureliocarella 21:51e162c130a9 32 */
aureliocarella 21:51e162c130a9 33
aureliocarella 21:51e162c130a9 34 #include <stdio.h>
aureliocarella 21:51e162c130a9 35 #include "StringHelper.h"
aureliocarella 21:51e162c130a9 36 #include "MAX30001.h"
aureliocarella 21:51e162c130a9 37 #include "Streaming.h"
aureliocarella 21:51e162c130a9 38 #include "StringInOut.h"
aureliocarella 21:51e162c130a9 39 #include "MAX30001_helper.h"
aureliocarella 21:51e162c130a9 40 #include "RpcFifo.h"
aureliocarella 21:51e162c130a9 41 #include "RpcServer.h"
aureliocarella 21:51e162c130a9 42 #include "Peripherals.h"
aureliocarella 21:51e162c130a9 43 #include "DataLoggingService.h"
aureliocarella 21:51e162c130a9 44
aureliocarella 21:51e162c130a9 45 int highDataRate = 0;
aureliocarella 21:51e162c130a9 46
aureliocarella 21:51e162c130a9 47 uint32_t max30001_RegRead(MAX30001::MAX30001_REG_map_t addr) {
aureliocarella 21:51e162c130a9 48 uint32_t data;
aureliocarella 21:51e162c130a9 49 Peripherals::max30001()->max30001_reg_read(addr, &data);
aureliocarella 21:51e162c130a9 50 return data;
aureliocarella 21:51e162c130a9 51 }
aureliocarella 21:51e162c130a9 52
aureliocarella 21:51e162c130a9 53 void max30001_RegWrite(MAX30001::MAX30001_REG_map_t addr, uint32_t data) {
aureliocarella 21:51e162c130a9 54 Peripherals::max30001()->max30001_reg_write(addr, data);
aureliocarella 21:51e162c130a9 55 }
aureliocarella 21:51e162c130a9 56
aureliocarella 21:51e162c130a9 57 int MAX30001_WriteReg(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 58 uint32_t args[2];
aureliocarella 21:51e162c130a9 59 uint32_t reply[1];
aureliocarella 21:51e162c130a9 60 uint32_t value;
aureliocarella 21:51e162c130a9 61 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 62
aureliocarella 21:51e162c130a9 63 max30001_RegWrite((MAX30001::MAX30001_REG_map_t)args[0], args[1]);
aureliocarella 21:51e162c130a9 64 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 65 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 66 return 0;
aureliocarella 21:51e162c130a9 67 }
aureliocarella 21:51e162c130a9 68
aureliocarella 21:51e162c130a9 69 int MAX30001_ReadReg(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 70 uint32_t args[1];
aureliocarella 21:51e162c130a9 71 uint32_t reply[1];
aureliocarella 21:51e162c130a9 72 uint32_t value;
aureliocarella 21:51e162c130a9 73 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 74 value = max30001_RegRead((MAX30001::MAX30001_REG_map_t)args[0]);
aureliocarella 21:51e162c130a9 75 reply[0] = value;
aureliocarella 21:51e162c130a9 76 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 77 return 0;
aureliocarella 21:51e162c130a9 78 }
aureliocarella 21:51e162c130a9 79
aureliocarella 21:51e162c130a9 80 int MAX30001_Rbias_FMSTR_Init(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 81 uint32_t args[5];
aureliocarella 21:51e162c130a9 82 uint32_t reply[1];
aureliocarella 21:51e162c130a9 83 uint32_t value;
aureliocarella 21:51e162c130a9 84 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 85
aureliocarella 21:51e162c130a9 86 value = Peripherals::max30001()->max30001_Rbias_FMSTR_Init(args[0], // En_rbias
aureliocarella 21:51e162c130a9 87 args[1], // Rbiasv
aureliocarella 21:51e162c130a9 88 args[2], // Rbiasp
aureliocarella 21:51e162c130a9 89 args[3], // Rbiasn
aureliocarella 21:51e162c130a9 90 args[4]); // Fmstr
aureliocarella 21:51e162c130a9 91
aureliocarella 21:51e162c130a9 92 reply[0] = value;
aureliocarella 21:51e162c130a9 93 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 94 return 0;
aureliocarella 21:51e162c130a9 95 }
aureliocarella 21:51e162c130a9 96
aureliocarella 21:51e162c130a9 97 int MAX30001_CAL_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 98 uint32_t args[6];
aureliocarella 21:51e162c130a9 99 uint32_t reply[1];
aureliocarella 21:51e162c130a9 100 uint32_t value;
aureliocarella 21:51e162c130a9 101 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 102
aureliocarella 21:51e162c130a9 103 // Peripherals::serial()->printf("MAX30001_CAL_InitStart 0 ");
aureliocarella 21:51e162c130a9 104 value = Peripherals::max30001()->max30001_CAL_InitStart(args[0], // En_Vcal
aureliocarella 21:51e162c130a9 105 args[1], // Vmag
aureliocarella 21:51e162c130a9 106 args[2], // Fcal
aureliocarella 21:51e162c130a9 107 args[3], // Thigh
aureliocarella 21:51e162c130a9 108 args[4], // Fifty
aureliocarella 21:51e162c130a9 109 args[5]); // Vmode
aureliocarella 21:51e162c130a9 110
aureliocarella 21:51e162c130a9 111 reply[0] = value;
aureliocarella 21:51e162c130a9 112 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 113 return 0;
aureliocarella 21:51e162c130a9 114 }
aureliocarella 21:51e162c130a9 115
aureliocarella 21:51e162c130a9 116 int MAX30001_ECG_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 117 uint32_t args[11];
aureliocarella 21:51e162c130a9 118 uint32_t reply[1];
aureliocarella 21:51e162c130a9 119 uint32_t value;
aureliocarella 21:51e162c130a9 120 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 121
aureliocarella 21:51e162c130a9 122 // Peripherals::serial()->printf("MAX30001_ECG_InitStart 0 ");
aureliocarella 21:51e162c130a9 123 value = Peripherals::max30001()->max30001_ECG_InitStart(args[0], // En_ecg
aureliocarella 21:51e162c130a9 124 args[1], // Openp
aureliocarella 21:51e162c130a9 125 args[2], // Openn
aureliocarella 21:51e162c130a9 126 args[3], // Pol
aureliocarella 21:51e162c130a9 127 args[4], // Calp_sel
aureliocarella 21:51e162c130a9 128 args[5], // Caln_sel
aureliocarella 21:51e162c130a9 129 args[6], // E_fit
aureliocarella 21:51e162c130a9 130 args[7], // Rate
aureliocarella 21:51e162c130a9 131 args[8], // Gain
aureliocarella 21:51e162c130a9 132 args[9], // Dhpf
aureliocarella 21:51e162c130a9 133 args[10]); // Dlpf
aureliocarella 21:51e162c130a9 134 // Peripherals::serial()->printf("MAX30001_ECG_InitStart 1 ");
aureliocarella 21:51e162c130a9 135 MAX30001_Helper_SetStreamingFlag(eStreaming_ECG, 1);
aureliocarella 21:51e162c130a9 136 reply[0] = value;
aureliocarella 21:51e162c130a9 137 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 138 return 0;
aureliocarella 21:51e162c130a9 139 }
aureliocarella 21:51e162c130a9 140
aureliocarella 21:51e162c130a9 141 int MAX30001_ECGFast_Init(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 142 uint32_t args[3];
aureliocarella 21:51e162c130a9 143 uint32_t reply[1];
aureliocarella 21:51e162c130a9 144 uint32_t value;
aureliocarella 21:51e162c130a9 145 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 146
aureliocarella 21:51e162c130a9 147 value = Peripherals::max30001()->max30001_ECGFast_Init(args[0], // Clr_Fast
aureliocarella 21:51e162c130a9 148 args[1], // Fast
aureliocarella 21:51e162c130a9 149 args[2]); // Fast_Th
aureliocarella 21:51e162c130a9 150
aureliocarella 21:51e162c130a9 151 reply[0] = value;
aureliocarella 21:51e162c130a9 152 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 153 return 0;
aureliocarella 21:51e162c130a9 154 }
aureliocarella 21:51e162c130a9 155
aureliocarella 21:51e162c130a9 156 int MAX30001_PACE_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 157 uint32_t args[9];
aureliocarella 21:51e162c130a9 158 uint32_t reply[1];
aureliocarella 21:51e162c130a9 159 uint32_t value;
aureliocarella 21:51e162c130a9 160 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 161
aureliocarella 21:51e162c130a9 162 value =
aureliocarella 21:51e162c130a9 163 Peripherals::max30001()->max30001_PACE_InitStart(args[0], // En_pace
aureliocarella 21:51e162c130a9 164 args[1], // Clr_pedge
aureliocarella 21:51e162c130a9 165 args[2], // Pol
aureliocarella 21:51e162c130a9 166 args[3], // Gn_diff_off
aureliocarella 21:51e162c130a9 167 args[4], // Gain
aureliocarella 21:51e162c130a9 168 args[5], // Aout_lbw
aureliocarella 21:51e162c130a9 169 args[6], // Aout
aureliocarella 21:51e162c130a9 170 args[7], // Dacp
aureliocarella 21:51e162c130a9 171 args[8]); // Dacn
aureliocarella 21:51e162c130a9 172
aureliocarella 21:51e162c130a9 173 MAX30001_Helper_SetStreamingFlag(eStreaming_PACE, 1);
aureliocarella 21:51e162c130a9 174 reply[0] = value;
aureliocarella 21:51e162c130a9 175 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 176 return 0;
aureliocarella 21:51e162c130a9 177 }
aureliocarella 21:51e162c130a9 178
aureliocarella 21:51e162c130a9 179 int MAX30001_BIOZ_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 180 uint32_t args[18];
aureliocarella 21:51e162c130a9 181 uint32_t reply[1];
aureliocarella 21:51e162c130a9 182 uint32_t value;
aureliocarella 21:51e162c130a9 183 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 184
aureliocarella 21:51e162c130a9 185 value = Peripherals::max30001()->max30001_BIOZ_InitStart(args[0], // En_bioz
aureliocarella 21:51e162c130a9 186 args[1], // Openp
aureliocarella 21:51e162c130a9 187 args[2], // Openn
aureliocarella 21:51e162c130a9 188 args[3], // Calp_sel
aureliocarella 21:51e162c130a9 189 args[4], // Caln_sel
aureliocarella 21:51e162c130a9 190 args[5], // CG_mode
aureliocarella 21:51e162c130a9 191 args[6], // B_fit
aureliocarella 21:51e162c130a9 192 args[7], // Rate
aureliocarella 21:51e162c130a9 193 args[8], // Ahpf
aureliocarella 21:51e162c130a9 194 args[9], // Ext_rbias
aureliocarella 21:51e162c130a9 195 args[10], // Gain
aureliocarella 21:51e162c130a9 196 args[11], // Dhpf
aureliocarella 21:51e162c130a9 197 args[12], // Dlpf
aureliocarella 21:51e162c130a9 198 args[13], // Fcgen
aureliocarella 21:51e162c130a9 199 args[14], // Cgmon
aureliocarella 21:51e162c130a9 200 args[15], // Cgmag
aureliocarella 21:51e162c130a9 201 args[16], // Phoff
aureliocarella 21:51e162c130a9 202 args[17]); //INAPow_mode
aureliocarella 21:51e162c130a9 203
aureliocarella 21:51e162c130a9 204 MAX30001_Helper_SetStreamingFlag(eStreaming_BIOZ, 1);
aureliocarella 21:51e162c130a9 205 reply[0] = value;
aureliocarella 21:51e162c130a9 206 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 207 return 0;
aureliocarella 21:51e162c130a9 208 }
aureliocarella 21:51e162c130a9 209
aureliocarella 21:51e162c130a9 210 int MAX30001_RtoR_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 211 uint32_t args[9];
aureliocarella 21:51e162c130a9 212 uint32_t reply[1];
aureliocarella 21:51e162c130a9 213 uint32_t value;
aureliocarella 21:51e162c130a9 214 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 215
aureliocarella 21:51e162c130a9 216 value = Peripherals::max30001()->max30001_RtoR_InitStart(args[0], // En_rtor
aureliocarella 21:51e162c130a9 217 args[1], // Wndw
aureliocarella 21:51e162c130a9 218 args[2], // Gain
aureliocarella 21:51e162c130a9 219 args[3], // Pavg
aureliocarella 21:51e162c130a9 220 args[4], // Ptsf
aureliocarella 21:51e162c130a9 221 args[5], // Hoff
aureliocarella 21:51e162c130a9 222 args[6], // Ravg
aureliocarella 21:51e162c130a9 223 args[7], // Rhsf
aureliocarella 21:51e162c130a9 224 args[8]); // Clr_rrint
aureliocarella 21:51e162c130a9 225
aureliocarella 21:51e162c130a9 226 MAX30001_Helper_SetStreamingFlag(eStreaming_RtoR, 1);
aureliocarella 21:51e162c130a9 227 reply[0] = value;
aureliocarella 21:51e162c130a9 228 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 229 return 0;
aureliocarella 21:51e162c130a9 230 }
aureliocarella 21:51e162c130a9 231
aureliocarella 21:51e162c130a9 232 int MAX30001_Stop_ECG(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 233 uint32_t reply[1];
aureliocarella 21:51e162c130a9 234 Peripherals::max30001()->max30001_Stop_ECG();
aureliocarella 21:51e162c130a9 235 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 236 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 237 return 0;
aureliocarella 21:51e162c130a9 238 }
aureliocarella 21:51e162c130a9 239 int MAX30001_Stop_PACE(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 240 uint32_t reply[1];
aureliocarella 21:51e162c130a9 241 Peripherals::max30001()->max30001_Stop_PACE();
aureliocarella 21:51e162c130a9 242 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 243 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 244 return 0;
aureliocarella 21:51e162c130a9 245 }
aureliocarella 21:51e162c130a9 246 int MAX30001_Stop_BIOZ(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 247 uint32_t reply[1];
aureliocarella 21:51e162c130a9 248 Peripherals::max30001()->max30001_Stop_BIOZ();
aureliocarella 21:51e162c130a9 249 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 250 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 251 return 0;
aureliocarella 21:51e162c130a9 252 }
aureliocarella 21:51e162c130a9 253 int MAX30001_Stop_RtoR(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 254 uint32_t reply[1];
aureliocarella 21:51e162c130a9 255 Peripherals::max30001()->max30001_Stop_RtoR();
aureliocarella 21:51e162c130a9 256 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 257 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 258 return 0;
aureliocarella 21:51e162c130a9 259 }
aureliocarella 21:51e162c130a9 260 int MAX30001_Stop_Cal(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 261 uint32_t reply[1];
aureliocarella 21:51e162c130a9 262 // max30001_Stop_Cal();
aureliocarella 21:51e162c130a9 263 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 264 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 265 return 0;
aureliocarella 21:51e162c130a9 266 }
aureliocarella 21:51e162c130a9 267
aureliocarella 21:51e162c130a9 268 void max30001_ServiceStreaming() {
aureliocarella 21:51e162c130a9 269 char ch;
aureliocarella 21:51e162c130a9 270 uint32_t val;
aureliocarella 21:51e162c130a9 271 //USBSerial *usbSerial = Peripherals::usbSerial();
aureliocarella 21:51e162c130a9 272
aureliocarella 21:51e162c130a9 273 fifo_clear(GetStreamOutFifo());
aureliocarella 21:51e162c130a9 274
aureliocarella 21:51e162c130a9 275 SetStreaming(TRUE);
aureliocarella 21:51e162c130a9 276 clearOutReadFifo();
aureliocarella 21:51e162c130a9 277 while (IsStreaming() == TRUE) {
aureliocarella 21:51e162c130a9 278
aureliocarella 21:51e162c130a9 279 if (fifo_empty(GetStreamOutFifo()) == 0) {
aureliocarella 21:51e162c130a9 280 fifo_get32(GetStreamOutFifo(), &val);
aureliocarella 21:51e162c130a9 281
aureliocarella 21:51e162c130a9 282 //usbSerial->printf("%02X ", val);
aureliocarella 21:51e162c130a9 283 printf("%02X ", val);
aureliocarella 21:51e162c130a9 284 }
aureliocarella 21:51e162c130a9 285 // if (usbSerial->available()) {
aureliocarella 21:51e162c130a9 286 // ch = usbSerial->_getc();
aureliocarella 21:51e162c130a9 287 if (1) {
aureliocarella 21:51e162c130a9 288 ch = 1;
aureliocarella 21:51e162c130a9 289
aureliocarella 21:51e162c130a9 290 MAX30001_Helper_Stop();
aureliocarella 21:51e162c130a9 291 SetStreaming(FALSE);
aureliocarella 21:51e162c130a9 292 fifo_clear(GetUSBIncomingFifo()); // clear USB serial incoming fifo
aureliocarella 21:51e162c130a9 293 fifo_clear(GetStreamOutFifo());
aureliocarella 21:51e162c130a9 294 }
aureliocarella 21:51e162c130a9 295
aureliocarella 21:51e162c130a9 296 }
aureliocarella 21:51e162c130a9 297 }
aureliocarella 21:51e162c130a9 298
aureliocarella 21:51e162c130a9 299 int MAX30001_Start(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 300 uint32_t reply[1];
aureliocarella 21:51e162c130a9 301 uint32_t all;
aureliocarella 21:51e162c130a9 302 fifo_clear(GetUSBIncomingFifo());
aureliocarella 21:51e162c130a9 303 Peripherals::max30001()->max30001_synch();
aureliocarella 21:51e162c130a9 304 // max30001_ServiceStreaming();
aureliocarella 21:51e162c130a9 305 highDataRate = 0;
aureliocarella 21:51e162c130a9 306 Peripherals::max30001()->max30001_reg_read(MAX30001::STATUS, &all);
aureliocarella 21:51e162c130a9 307 LoggingService_StartLoggingUsb();
aureliocarella 21:51e162c130a9 308
aureliocarella 21:51e162c130a9 309 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 310 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 311 return 0;
aureliocarella 21:51e162c130a9 312 }
aureliocarella 21:51e162c130a9 313
aureliocarella 21:51e162c130a9 314 int MAX30001_Stop(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 315 /* uint32_t args[1];
aureliocarella 21:51e162c130a9 316 uint32_t reply[1];
aureliocarella 21:51e162c130a9 317 uint32_t value;
aureliocarella 21:51e162c130a9 318 //ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 319 max30001_StopTest();
aureliocarella 21:51e162c130a9 320 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 321 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);*/
aureliocarella 21:51e162c130a9 322 return 0;
aureliocarella 21:51e162c130a9 323 }
aureliocarella 21:51e162c130a9 324
aureliocarella 21:51e162c130a9 325 int MAX30001_INT_assignment(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 326 uint32_t args[17];
aureliocarella 21:51e162c130a9 327 uint32_t reply[1];
aureliocarella 21:51e162c130a9 328 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 329 /*
aureliocarella 21:51e162c130a9 330 printf("MAX30001_INT_assignment ");
aureliocarella 21:51e162c130a9 331 printf("%d ",args[0]);
aureliocarella 21:51e162c130a9 332 printf("%d ",args[1]);
aureliocarella 21:51e162c130a9 333 printf("%d ",args[2]);
aureliocarella 21:51e162c130a9 334 printf("%d ",args[3]);
aureliocarella 21:51e162c130a9 335 printf("%d ",args[4]);
aureliocarella 21:51e162c130a9 336 printf("%d ",args[5]);
aureliocarella 21:51e162c130a9 337 printf("%d ",args[6]);
aureliocarella 21:51e162c130a9 338 printf("%d ",args[7]);
aureliocarella 21:51e162c130a9 339 printf("%d ",args[8]);
aureliocarella 21:51e162c130a9 340 printf("%d ",args[9]);
aureliocarella 21:51e162c130a9 341 printf("%d ",args[10]);
aureliocarella 21:51e162c130a9 342 printf("%d ",args[11]);
aureliocarella 21:51e162c130a9 343 printf("%d ",args[12]);
aureliocarella 21:51e162c130a9 344 printf("%d ",args[13]);
aureliocarella 21:51e162c130a9 345 printf("%d ",args[14]);
aureliocarella 21:51e162c130a9 346 printf("%d ",args[15]);
aureliocarella 21:51e162c130a9 347 printf("%d ",args[16]);
aureliocarella 21:51e162c130a9 348 printf("\n");
aureliocarella 21:51e162c130a9 349 fflush(stdout);
aureliocarella 21:51e162c130a9 350 */
aureliocarella 21:51e162c130a9 351
aureliocarella 21:51e162c130a9 352 Peripherals::max30001()->max30001_INT_assignment(
aureliocarella 21:51e162c130a9 353 (MAX30001::max30001_intrpt_Location_t)args[0],
aureliocarella 21:51e162c130a9 354 (MAX30001::max30001_intrpt_Location_t)args[1],
aureliocarella 21:51e162c130a9 355 (MAX30001::max30001_intrpt_Location_t)args[2],
aureliocarella 21:51e162c130a9 356 (MAX30001::max30001_intrpt_Location_t)args[3],
aureliocarella 21:51e162c130a9 357 (MAX30001::max30001_intrpt_Location_t)args[4],
aureliocarella 21:51e162c130a9 358 (MAX30001::max30001_intrpt_Location_t)args[5],
aureliocarella 21:51e162c130a9 359 (MAX30001::max30001_intrpt_Location_t)args[6],
aureliocarella 21:51e162c130a9 360 (MAX30001::max30001_intrpt_Location_t)args[7],
aureliocarella 21:51e162c130a9 361 (MAX30001::max30001_intrpt_Location_t)args[8],
aureliocarella 21:51e162c130a9 362 (MAX30001::max30001_intrpt_Location_t)args[9],
aureliocarella 21:51e162c130a9 363 (MAX30001::max30001_intrpt_Location_t)args[10],
aureliocarella 21:51e162c130a9 364 (MAX30001::max30001_intrpt_Location_t)args[11],
aureliocarella 21:51e162c130a9 365 (MAX30001::max30001_intrpt_Location_t)args[12],
aureliocarella 21:51e162c130a9 366 (MAX30001::max30001_intrpt_Location_t)args[13],
aureliocarella 21:51e162c130a9 367 (MAX30001::max30001_intrpt_Location_t)args[14],
aureliocarella 21:51e162c130a9 368 (MAX30001::max30001_intrpt_type_t)args[15],
aureliocarella 21:51e162c130a9 369 (MAX30001::max30001_intrpt_type_t)args[16]);
aureliocarella 21:51e162c130a9 370 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 371 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 372 return 0;
aureliocarella 21:51e162c130a9 373 }
aureliocarella 21:51e162c130a9 374
aureliocarella 21:51e162c130a9 375 int MAX30001_StartTest(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 376 uint32_t reply[1];
aureliocarella 21:51e162c130a9 377 // ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
aureliocarella 21:51e162c130a9 378
aureliocarella 21:51e162c130a9 379 /*** Set FMSTR over here ****/
aureliocarella 21:51e162c130a9 380
aureliocarella 21:51e162c130a9 381 /*** Set and Start the VCAL input ***/
aureliocarella 21:51e162c130a9 382 /* NOTE VCAL must be set first if VCAL is to be used */
aureliocarella 21:51e162c130a9 383 Peripherals::max30001()->max30001_CAL_InitStart(0b1, 0b1, 0b1, 0b011, 0x7FF, 0b0);
aureliocarella 21:51e162c130a9 384
aureliocarella 21:51e162c130a9 385 /**** ECG Initialization ****/
aureliocarella 21:51e162c130a9 386 Peripherals::max30001()->max30001_ECG_InitStart(0b1, 0b1, 0b1, 0b0, 0b10, 0b11, 31, 0b00, 0b00, 0b0, 0b01);
aureliocarella 21:51e162c130a9 387
aureliocarella 21:51e162c130a9 388 /***** PACE Initialization ***/
aureliocarella 21:51e162c130a9 389 Peripherals::max30001()->max30001_PACE_InitStart(0b1, 0b0, 0b0, 0b1, 0b000, 0b0, 0b00, 0b0, 0b0);
aureliocarella 21:51e162c130a9 390
aureliocarella 21:51e162c130a9 391 /**** BIOZ Initialization ****/
aureliocarella 21:51e162c130a9 392 Peripherals::max30001()->max30001_BIOZ_InitStart(
aureliocarella 21:51e162c130a9 393 0b1, 0b1, 0b1, 0b10, 0b11, 0b00, 7, 0b0, 0b111, 0b0, 0b10, 0b00, 0b00, 0b0001, 0b0, 0b111, 0b0000, 0b0000);
aureliocarella 21:51e162c130a9 394
aureliocarella 21:51e162c130a9 395 /*** Set RtoR registers ***/
aureliocarella 21:51e162c130a9 396 Peripherals::max30001()->max30001_RtoR_InitStart(
aureliocarella 21:51e162c130a9 397 0b1, 0b0011, 0b1111, 0b00, 0b0011, 0b000001, 0b00, 0b000, 0b01);
aureliocarella 21:51e162c130a9 398
aureliocarella 21:51e162c130a9 399 /*** Set Rbias & FMSTR over here ****/
aureliocarella 21:51e162c130a9 400 Peripherals::max30001()->max30001_Rbias_FMSTR_Init(0b01, 0b10, 0b1, 0b1, 0b00);
aureliocarella 21:51e162c130a9 401
aureliocarella 21:51e162c130a9 402 /**** Interrupt Setting ****/
aureliocarella 21:51e162c130a9 403
aureliocarella 21:51e162c130a9 404 /*** Set ECG Lead ON/OFF ***/
aureliocarella 21:51e162c130a9 405 // max30001_ECG_LeadOnOff();
aureliocarella 21:51e162c130a9 406
aureliocarella 21:51e162c130a9 407 /*** Set BIOZ Lead ON/OFF ***/
aureliocarella 21:51e162c130a9 408 // max30001_BIOZ_LeadOnOff(); Does not work yet...
aureliocarella 21:51e162c130a9 409
aureliocarella 21:51e162c130a9 410 /**** Do a Synch ****/
aureliocarella 21:51e162c130a9 411 Peripherals::max30001()->max30001_synch();
aureliocarella 21:51e162c130a9 412
aureliocarella 21:51e162c130a9 413 fifo_clear(GetUSBIncomingFifo());
aureliocarella 21:51e162c130a9 414 max30001_ServiceStreaming();
aureliocarella 21:51e162c130a9 415
aureliocarella 21:51e162c130a9 416 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 417 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 418 return 0;
aureliocarella 21:51e162c130a9 419 }
aureliocarella 21:51e162c130a9 420 /*
aureliocarella 21:51e162c130a9 421 static void StopAll() {
aureliocarella 21:51e162c130a9 422 if (startedEcg == 1) {
aureliocarella 21:51e162c130a9 423 max30001_Stop_ECG();
aureliocarella 21:51e162c130a9 424 }
aureliocarella 21:51e162c130a9 425 if (startedCal == 1) {
aureliocarella 21:51e162c130a9 426 }
aureliocarella 21:51e162c130a9 427 if (startedBioz == 1) {
aureliocarella 21:51e162c130a9 428 max30001_Stop_BIOZ();
aureliocarella 21:51e162c130a9 429 }
aureliocarella 21:51e162c130a9 430 if (startedPace == 1) {
aureliocarella 21:51e162c130a9 431 max30001_Stop_PACE();
aureliocarella 21:51e162c130a9 432 }
aureliocarella 21:51e162c130a9 433 if (startedRtor == 1) {
aureliocarella 21:51e162c130a9 434 max30001_Stop_RtoR();
aureliocarella 21:51e162c130a9 435 }
aureliocarella 21:51e162c130a9 436 startedEcg = 0;
aureliocarella 21:51e162c130a9 437 startedBioz = 0;
aureliocarella 21:51e162c130a9 438 startedCal = 0;
aureliocarella 21:51e162c130a9 439 startedPace = 0;
aureliocarella 21:51e162c130a9 440 startedRtor = 0;
aureliocarella 21:51e162c130a9 441 }
aureliocarella 21:51e162c130a9 442 */
aureliocarella 21:51e162c130a9 443 /*
aureliocarella 21:51e162c130a9 444 // switch to ECG DC Lead ON
aureliocarella 21:51e162c130a9 445 max30001_Enable_LeadON(0b01);
aureliocarella 21:51e162c130a9 446 // switch to BIOZ DC Lead ON
aureliocarella 21:51e162c130a9 447 max30001_Enable_LeadON(0b10);
aureliocarella 21:51e162c130a9 448 */
aureliocarella 21:51e162c130a9 449 int MAX30001_Enable_ECG_LeadON(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 450 uint32_t reply[1];
aureliocarella 21:51e162c130a9 451 // switch to ECG DC Lead ON
aureliocarella 21:51e162c130a9 452 Peripherals::max30001()->max30001_Enable_LeadON(0b01);
aureliocarella 21:51e162c130a9 453 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 454 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 455 return 0;
aureliocarella 21:51e162c130a9 456 }
aureliocarella 21:51e162c130a9 457 int MAX30001_Enable_BIOZ_LeadON(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 458 uint32_t reply[1];
aureliocarella 21:51e162c130a9 459 // switch to BIOZ DC Lead ON
aureliocarella 21:51e162c130a9 460 Peripherals::max30001()->max30001_Enable_LeadON(0b10);
aureliocarella 21:51e162c130a9 461 reply[0] = 0x80;
aureliocarella 21:51e162c130a9 462 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 463 return 0;
aureliocarella 21:51e162c130a9 464 }
aureliocarella 21:51e162c130a9 465 // uint32_t max30001_LeadOn; // This holds the LeadOn data, BIT1 = BIOZ Lead ON, BIT0 = ECG Lead ON
aureliocarella 21:51e162c130a9 466 int MAX30001_Read_LeadON(char argStrs[32][32], char replyStrs[32][32]) {
aureliocarella 21:51e162c130a9 467 uint32_t reply[1];
aureliocarella 21:51e162c130a9 468 // return the max30001_LeadOn var from the MAX30001 driver
aureliocarella 21:51e162c130a9 469 reply[0] = Peripherals::max30001()->max30001_LeadOn;
aureliocarella 21:51e162c130a9 470 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
aureliocarella 21:51e162c130a9 471 return 0;
aureliocarella 21:51e162c130a9 472 }
aureliocarella 21:51e162c130a9 473