MAX32620HSP (MAXREFDES100) RPC Example for Graphical User Interface

Dependencies:   USBDevice

Fork of HSP_Release by Jerry Bradshaw

This is an example program for the MAX32620HSP (MAXREFDES100 Health Sensor Platform). It demonstrates all the features of the platform and works with a companion graphical user interface (GUI) to help evaluate/configure/monitor the board. Go to the MAXREFDES100 product page and click on "design resources" to download the companion software. The GUI connects to the board through an RPC interface on a virtual serial port over the USB interface.

The RPC interface provides access to all the features of the board and is available to interface with other development environments such Matlab. This firmware provides realtime data streaming through the RPC interface over USB, and also provides the ability to log the data to flash for untethered battery operation. The data logging settings are configured through the GUI, and the GUI also provides the interface to download logged data.

Details on the RPC interface can be found here: HSP RPC Interface Documentation

Windows

With this program loaded, the MAX32620HSP will appear on your computer as a serial port. On Mac and Linux, this will happen by default. For Windows, you need to install a driver: HSP serial port windows driver

For more details about this platform and how to use it, see the MAXREFDES100 product page.

Committer:
jbradshaw
Date:
Tue Oct 25 15:22:11 2016 +0000
Revision:
0:e4a10ed6eb92
Child:
1:9490836294ea
tewt

Who changed what in which revision?

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