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:
Fri Apr 21 12:12:30 2017 -0500
Revision:
1:9490836294ea
Parent:
0:e4a10ed6eb92
Flash device is now fully utilized for datalog of sensor data

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 1:9490836294ea 35 #include "USBSerial.h"
jbradshaw 0:e4a10ed6eb92 36 #include "StringHelper.h"
jbradshaw 0:e4a10ed6eb92 37 #include "MAX30001.h"
jbradshaw 0:e4a10ed6eb92 38 #include "Streaming.h"
jbradshaw 0:e4a10ed6eb92 39 #include "StringInOut.h"
jbradshaw 0:e4a10ed6eb92 40 #include "MAX30001_helper.h"
jbradshaw 0:e4a10ed6eb92 41 #include "RpcFifo.h"
jbradshaw 0:e4a10ed6eb92 42 #include "RpcServer.h"
jbradshaw 0:e4a10ed6eb92 43 #include "Peripherals.h"
jbradshaw 0:e4a10ed6eb92 44 #include "DataLoggingService.h"
jbradshaw 0:e4a10ed6eb92 45
jbradshaw 0:e4a10ed6eb92 46 extern int highDataRate;
jbradshaw 1:9490836294ea 47 extern USBSerial *usbSerialPtr;
jbradshaw 0:e4a10ed6eb92 48
jbradshaw 0:e4a10ed6eb92 49 uint32_t max30001_RegRead(MAX30001::MAX30001_REG_map_t addr) {
jbradshaw 0:e4a10ed6eb92 50 uint32_t data;
jbradshaw 1:9490836294ea 51 Peripherals::max30001()->reg_read(addr, &data);
jbradshaw 0:e4a10ed6eb92 52 return data;
jbradshaw 0:e4a10ed6eb92 53 }
jbradshaw 0:e4a10ed6eb92 54
jbradshaw 1:9490836294ea 55 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 56 void max30001_RegWrite(MAX30001::MAX30001_REG_map_t addr, uint32_t data) {
jbradshaw 1:9490836294ea 57 Peripherals::max30001()->reg_write(addr, data);
jbradshaw 0:e4a10ed6eb92 58 }
jbradshaw 0:e4a10ed6eb92 59
jbradshaw 0:e4a10ed6eb92 60 int MAX30001_WriteReg(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 61 uint32_t args[2];
jbradshaw 0:e4a10ed6eb92 62 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 63 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 64
jbradshaw 0:e4a10ed6eb92 65 max30001_RegWrite((MAX30001::MAX30001_REG_map_t)args[0], args[1]);
jbradshaw 0:e4a10ed6eb92 66 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 67 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 68 return 0;
jbradshaw 0:e4a10ed6eb92 69 }
jbradshaw 0:e4a10ed6eb92 70
jbradshaw 1:9490836294ea 71 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 72 int MAX30001_ReadReg(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 73 uint32_t args[1];
jbradshaw 0:e4a10ed6eb92 74 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 75 uint32_t value;
jbradshaw 0:e4a10ed6eb92 76 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 77 value = max30001_RegRead((MAX30001::MAX30001_REG_map_t)args[0]);
jbradshaw 0:e4a10ed6eb92 78 reply[0] = value;
jbradshaw 0:e4a10ed6eb92 79 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 80 return 0;
jbradshaw 0:e4a10ed6eb92 81 }
jbradshaw 0:e4a10ed6eb92 82
jbradshaw 1:9490836294ea 83 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 84 int MAX30001_Rbias_FMSTR_Init(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 85 uint32_t args[5];
jbradshaw 0:e4a10ed6eb92 86 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 87 uint32_t value;
jbradshaw 0:e4a10ed6eb92 88 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 89
jbradshaw 1:9490836294ea 90 value = Peripherals::max30001()->Rbias_FMSTR_Init(args[0], ///< En_rbias
jbradshaw 1:9490836294ea 91 args[1], ///< Rbiasv
jbradshaw 1:9490836294ea 92 args[2], ///< Rbiasp
jbradshaw 1:9490836294ea 93 args[3], ///< Rbiasn
jbradshaw 1:9490836294ea 94 args[4]); ///< Fmstr
jbradshaw 0:e4a10ed6eb92 95
jbradshaw 0:e4a10ed6eb92 96 reply[0] = value;
jbradshaw 0:e4a10ed6eb92 97 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 98 return 0;
jbradshaw 0:e4a10ed6eb92 99 }
jbradshaw 0:e4a10ed6eb92 100
jbradshaw 1:9490836294ea 101 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 102 int MAX30001_CAL_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 103 uint32_t args[6];
jbradshaw 0:e4a10ed6eb92 104 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 105 uint32_t value;
jbradshaw 0:e4a10ed6eb92 106 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 107
jbradshaw 0:e4a10ed6eb92 108 // Peripherals::serial()->printf("MAX30001_CAL_InitStart 0 ");
jbradshaw 1:9490836294ea 109 value = Peripherals::max30001()->CAL_InitStart(args[0], ///< En_Vcal
jbradshaw 1:9490836294ea 110 args[1], ///< Vmag
jbradshaw 1:9490836294ea 111 args[2], ///< Fcal
jbradshaw 1:9490836294ea 112 args[3], ///< Thigh
jbradshaw 1:9490836294ea 113 args[4], ///< Fifty
jbradshaw 1:9490836294ea 114 args[5]); ///< Vmode
jbradshaw 0:e4a10ed6eb92 115
jbradshaw 0:e4a10ed6eb92 116 reply[0] = value;
jbradshaw 0:e4a10ed6eb92 117 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 118 return 0;
jbradshaw 0:e4a10ed6eb92 119 }
jbradshaw 0:e4a10ed6eb92 120
jbradshaw 1:9490836294ea 121 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 122 int MAX30001_ECG_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 123 uint32_t args[11];
jbradshaw 0:e4a10ed6eb92 124 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 125 uint32_t value;
jbradshaw 0:e4a10ed6eb92 126 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 127
jbradshaw 1:9490836294ea 128 value = Peripherals::max30001()->ECG_InitStart(args[0], ///< En_ecg
jbradshaw 1:9490836294ea 129 args[1], ///< Openp
jbradshaw 1:9490836294ea 130 args[2], ///< Openn
jbradshaw 1:9490836294ea 131 args[3], ///< Pol
jbradshaw 1:9490836294ea 132 args[4], ///< Calp_sel
jbradshaw 1:9490836294ea 133 args[5], ///< Caln_sel
jbradshaw 1:9490836294ea 134 args[6], ///< E_fit
jbradshaw 1:9490836294ea 135 args[7], ///< Rate
jbradshaw 1:9490836294ea 136 args[8], ///< Gain
jbradshaw 1:9490836294ea 137 args[9], ///< Dhpf
jbradshaw 1:9490836294ea 138 args[10]); ///< Dlpf
jbradshaw 1:9490836294ea 139
jbradshaw 0:e4a10ed6eb92 140 MAX30001_Helper_SetStreamingFlag(eStreaming_ECG, 1);
jbradshaw 0:e4a10ed6eb92 141 reply[0] = value;
jbradshaw 0:e4a10ed6eb92 142 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 143 return 0;
jbradshaw 0:e4a10ed6eb92 144 }
jbradshaw 0:e4a10ed6eb92 145
jbradshaw 1:9490836294ea 146 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 147 int MAX30001_ECGFast_Init(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 148 uint32_t args[3];
jbradshaw 0:e4a10ed6eb92 149 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 150 uint32_t value;
jbradshaw 0:e4a10ed6eb92 151 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 152
jbradshaw 1:9490836294ea 153 value = Peripherals::max30001()->ECGFast_Init(args[0], ///< Clr_Fast
jbradshaw 1:9490836294ea 154 args[1], ///< Fast
jbradshaw 1:9490836294ea 155 args[2]); ///< Fast_Th
jbradshaw 0:e4a10ed6eb92 156
jbradshaw 0:e4a10ed6eb92 157 reply[0] = value;
jbradshaw 0:e4a10ed6eb92 158 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 159 return 0;
jbradshaw 0:e4a10ed6eb92 160 }
jbradshaw 0:e4a10ed6eb92 161
jbradshaw 1:9490836294ea 162 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 163 int MAX30001_PACE_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 164 uint32_t args[9];
jbradshaw 0:e4a10ed6eb92 165 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 166 uint32_t value;
jbradshaw 0:e4a10ed6eb92 167 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 168
jbradshaw 1:9490836294ea 169 value = Peripherals::max30001()->PACE_InitStart(args[0], ///< En_pace
jbradshaw 1:9490836294ea 170 args[1], ///< Clr_pedge
jbradshaw 1:9490836294ea 171 args[2], ///< Pol
jbradshaw 1:9490836294ea 172 args[3], ///< Gn_diff_off
jbradshaw 1:9490836294ea 173 args[4], ///< Gain
jbradshaw 1:9490836294ea 174 args[5], ///< Aout_lbw
jbradshaw 1:9490836294ea 175 args[6], ///< Aout
jbradshaw 1:9490836294ea 176 args[7], ///< Dacp
jbradshaw 1:9490836294ea 177 args[8]); ///< Dacn
jbradshaw 1:9490836294ea 178
jbradshaw 0:e4a10ed6eb92 179
jbradshaw 0:e4a10ed6eb92 180 MAX30001_Helper_SetStreamingFlag(eStreaming_PACE, 1);
jbradshaw 0:e4a10ed6eb92 181 reply[0] = value;
jbradshaw 0:e4a10ed6eb92 182 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 183 return 0;
jbradshaw 0:e4a10ed6eb92 184 }
jbradshaw 0:e4a10ed6eb92 185
jbradshaw 1:9490836294ea 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 1:9490836294ea 193 value = Peripherals::max30001()->BIOZ_InitStart(args[0], ///< En_bioz
jbradshaw 1:9490836294ea 194 args[1], ///< Openp
jbradshaw 1:9490836294ea 195 args[2], ///< Openn
jbradshaw 1:9490836294ea 196 args[3], ///< Calp_sel
jbradshaw 1:9490836294ea 197 args[4], ///< Caln_sel
jbradshaw 1:9490836294ea 198 args[5], ///< CG_mode
jbradshaw 1:9490836294ea 199 args[6], ///< B_fit
jbradshaw 1:9490836294ea 200 args[7], ///< Rate
jbradshaw 1:9490836294ea 201 args[8], ///< Ahpf
jbradshaw 1:9490836294ea 202 args[9], ///< Ext_rbias
jbradshaw 1:9490836294ea 203 args[10], ///< Gain
jbradshaw 1:9490836294ea 204 args[11], ///< Dhpf
jbradshaw 1:9490836294ea 205 args[12], ///< Dlpf
jbradshaw 1:9490836294ea 206 args[13], ///< Fcgen
jbradshaw 1:9490836294ea 207 args[14], ///< Cgmon
jbradshaw 1:9490836294ea 208 args[15], ///< Cgmag
jbradshaw 1:9490836294ea 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 1:9490836294ea 217 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 218 int MAX30001_RtoR_InitStart(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 219 uint32_t args[9];
jbradshaw 0:e4a10ed6eb92 220 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 221 uint32_t value;
jbradshaw 0:e4a10ed6eb92 222 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 223
jbradshaw 1:9490836294ea 224 value = Peripherals::max30001()->RtoR_InitStart(args[0], ///< En_rtor
jbradshaw 1:9490836294ea 225 args[1], ///< Wndw
jbradshaw 1:9490836294ea 226 args[2], ///< Gain
jbradshaw 1:9490836294ea 227 args[3], ///< Pavg
jbradshaw 1:9490836294ea 228 args[4], ///< Ptsf
jbradshaw 1:9490836294ea 229 args[5], ///< Hoff
jbradshaw 1:9490836294ea 230 args[6], ///< Ravg
jbradshaw 1:9490836294ea 231 args[7], ///< Rhsf
jbradshaw 1:9490836294ea 232 args[8]); ///< Clr_rrint
jbradshaw 0:e4a10ed6eb92 233
jbradshaw 0:e4a10ed6eb92 234 MAX30001_Helper_SetStreamingFlag(eStreaming_RtoR, 1);
jbradshaw 0:e4a10ed6eb92 235 reply[0] = value;
jbradshaw 0:e4a10ed6eb92 236 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 237 return 0;
jbradshaw 0:e4a10ed6eb92 238 }
jbradshaw 0:e4a10ed6eb92 239
jbradshaw 1:9490836294ea 240 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 241 int MAX30001_Stop_ECG(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 242 uint32_t reply[1];
jbradshaw 1:9490836294ea 243 Peripherals::max30001()->Stop_ECG();
jbradshaw 0:e4a10ed6eb92 244 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 245 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 246 return 0;
jbradshaw 0:e4a10ed6eb92 247 }
jbradshaw 1:9490836294ea 248
jbradshaw 1:9490836294ea 249 //******************************************************************************
jbradshaw 1:9490836294ea 250 int MAX30001_Stop_PACE(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 251 uint32_t reply[1];
jbradshaw 1:9490836294ea 252 Peripherals::max30001()->Stop_PACE();
jbradshaw 0:e4a10ed6eb92 253 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 254 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 255 return 0;
jbradshaw 0:e4a10ed6eb92 256 }
jbradshaw 0:e4a10ed6eb92 257
jbradshaw 1:9490836294ea 258 //******************************************************************************
jbradshaw 1:9490836294ea 259 int MAX30001_Stop_BIOZ(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 1:9490836294ea 260 uint32_t reply[1];
jbradshaw 1:9490836294ea 261 Peripherals::max30001()->Stop_BIOZ();
jbradshaw 1:9490836294ea 262 reply[0] = 0x80;
jbradshaw 1:9490836294ea 263 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 1:9490836294ea 264 return 0;
jbradshaw 1:9490836294ea 265 }
jbradshaw 1:9490836294ea 266
jbradshaw 1:9490836294ea 267 //******************************************************************************
jbradshaw 1:9490836294ea 268 int MAX30001_Stop_RtoR(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 1:9490836294ea 269 uint32_t reply[1];
jbradshaw 1:9490836294ea 270 Peripherals::max30001()->Stop_RtoR();
jbradshaw 1:9490836294ea 271 reply[0] = 0x80;
jbradshaw 1:9490836294ea 272 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 1:9490836294ea 273 return 0;
jbradshaw 1:9490836294ea 274 }
jbradshaw 1:9490836294ea 275
jbradshaw 1:9490836294ea 276 //******************************************************************************
jbradshaw 1:9490836294ea 277 int MAX30001_Stop_Cal(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 1:9490836294ea 278
jbradshaw 1:9490836294ea 279 uint32_t reply[1];
jbradshaw 1:9490836294ea 280
jbradshaw 1:9490836294ea 281 reply[0] = 0x80;
jbradshaw 1:9490836294ea 282 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 1:9490836294ea 283 return 0;
jbradshaw 1:9490836294ea 284 }
jbradshaw 1:9490836294ea 285
jbradshaw 1:9490836294ea 286 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 287 void max30001_ServiceStreaming() {
jbradshaw 1:9490836294ea 288 //char ch;
jbradshaw 0:e4a10ed6eb92 289 uint32_t val;
jbradshaw 0:e4a10ed6eb92 290
jbradshaw 0:e4a10ed6eb92 291 fifo_clear(GetStreamOutFifo());
jbradshaw 0:e4a10ed6eb92 292
jbradshaw 0:e4a10ed6eb92 293 SetStreaming(TRUE);
jbradshaw 0:e4a10ed6eb92 294 clearOutReadFifo();
jbradshaw 0:e4a10ed6eb92 295 while (IsStreaming() == TRUE) {
jbradshaw 0:e4a10ed6eb92 296
jbradshaw 0:e4a10ed6eb92 297 if (fifo_empty(GetStreamOutFifo()) == 0) {
jbradshaw 0:e4a10ed6eb92 298 fifo_get32(GetStreamOutFifo(), &val);
jbradshaw 0:e4a10ed6eb92 299
jbradshaw 1:9490836294ea 300 usbSerialPtr->printf("%02X ", val);
jbradshaw 0:e4a10ed6eb92 301
jbradshaw 0:e4a10ed6eb92 302 }
jbradshaw 1:9490836294ea 303 if (usbSerialPtr->available()) {
jbradshaw 1:9490836294ea 304 usbSerialPtr->_getc();
jbradshaw 0:e4a10ed6eb92 305
jbradshaw 0:e4a10ed6eb92 306 MAX30001_Helper_Stop();
jbradshaw 0:e4a10ed6eb92 307 SetStreaming(FALSE);
jbradshaw 1:9490836294ea 308 fifo_clear(GetUSBIncomingFifo()); ///< clear USB serial incoming fifo
jbradshaw 0:e4a10ed6eb92 309 fifo_clear(GetStreamOutFifo());
jbradshaw 0:e4a10ed6eb92 310 }
jbradshaw 0:e4a10ed6eb92 311
jbradshaw 0:e4a10ed6eb92 312 }
jbradshaw 0:e4a10ed6eb92 313 }
jbradshaw 0:e4a10ed6eb92 314
jbradshaw 1:9490836294ea 315 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 316 int MAX30001_Start(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 317 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 318 uint32_t all;
jbradshaw 0:e4a10ed6eb92 319 fifo_clear(GetUSBIncomingFifo());
jbradshaw 1:9490836294ea 320 Peripherals::max30001()->synch();
jbradshaw 1:9490836294ea 321 ///< max30001_ServiceStreaming();
jbradshaw 0:e4a10ed6eb92 322 highDataRate = 0;
jbradshaw 1:9490836294ea 323 Peripherals::max30001()->reg_read(MAX30001::STATUS, &all);
jbradshaw 0:e4a10ed6eb92 324 LoggingService_StartLoggingUsb();
jbradshaw 0:e4a10ed6eb92 325
jbradshaw 0:e4a10ed6eb92 326 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 327 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 328 return 0;
jbradshaw 0:e4a10ed6eb92 329 }
jbradshaw 0:e4a10ed6eb92 330
jbradshaw 1:9490836294ea 331 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 332 int MAX30001_Stop(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 333 /* uint32_t args[1];
jbradshaw 0:e4a10ed6eb92 334 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 335 uint32_t value;
jbradshaw 0:e4a10ed6eb92 336 //ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 337 max30001_StopTest();
jbradshaw 0:e4a10ed6eb92 338 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 339 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);*/
jbradshaw 0:e4a10ed6eb92 340 return 0;
jbradshaw 0:e4a10ed6eb92 341 }
jbradshaw 0:e4a10ed6eb92 342
jbradshaw 1:9490836294ea 343 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 344 int MAX30001_INT_assignment(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 345 uint32_t args[17];
jbradshaw 0:e4a10ed6eb92 346 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 347 ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 348
jbradshaw 1:9490836294ea 349 Peripherals::max30001()->INT_assignment(
jbradshaw 0:e4a10ed6eb92 350 (MAX30001::max30001_intrpt_Location_t)args[0],
jbradshaw 0:e4a10ed6eb92 351 (MAX30001::max30001_intrpt_Location_t)args[1],
jbradshaw 0:e4a10ed6eb92 352 (MAX30001::max30001_intrpt_Location_t)args[2],
jbradshaw 0:e4a10ed6eb92 353 (MAX30001::max30001_intrpt_Location_t)args[3],
jbradshaw 0:e4a10ed6eb92 354 (MAX30001::max30001_intrpt_Location_t)args[4],
jbradshaw 0:e4a10ed6eb92 355 (MAX30001::max30001_intrpt_Location_t)args[5],
jbradshaw 0:e4a10ed6eb92 356 (MAX30001::max30001_intrpt_Location_t)args[6],
jbradshaw 0:e4a10ed6eb92 357 (MAX30001::max30001_intrpt_Location_t)args[7],
jbradshaw 0:e4a10ed6eb92 358 (MAX30001::max30001_intrpt_Location_t)args[8],
jbradshaw 0:e4a10ed6eb92 359 (MAX30001::max30001_intrpt_Location_t)args[9],
jbradshaw 0:e4a10ed6eb92 360 (MAX30001::max30001_intrpt_Location_t)args[10],
jbradshaw 0:e4a10ed6eb92 361 (MAX30001::max30001_intrpt_Location_t)args[11],
jbradshaw 0:e4a10ed6eb92 362 (MAX30001::max30001_intrpt_Location_t)args[12],
jbradshaw 0:e4a10ed6eb92 363 (MAX30001::max30001_intrpt_Location_t)args[13],
jbradshaw 0:e4a10ed6eb92 364 (MAX30001::max30001_intrpt_Location_t)args[14],
jbradshaw 0:e4a10ed6eb92 365 (MAX30001::max30001_intrpt_type_t)args[15],
jbradshaw 0:e4a10ed6eb92 366 (MAX30001::max30001_intrpt_type_t)args[16]);
jbradshaw 0:e4a10ed6eb92 367 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 368 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 369 return 0;
jbradshaw 0:e4a10ed6eb92 370 }
jbradshaw 0:e4a10ed6eb92 371
jbradshaw 1:9490836294ea 372 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 373 int MAX30001_StartTest(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 374 uint32_t reply[1];
jbradshaw 0:e4a10ed6eb92 375 // ProcessArgs32(argStrs, args, sizeof(args) / sizeof(uint32_t));
jbradshaw 0:e4a10ed6eb92 376
jbradshaw 0:e4a10ed6eb92 377 /*** Set FMSTR over here ****/
jbradshaw 0:e4a10ed6eb92 378
jbradshaw 0:e4a10ed6eb92 379 /*** Set and Start the VCAL input ***/
jbradshaw 0:e4a10ed6eb92 380 /* NOTE VCAL must be set first if VCAL is to be used */
jbradshaw 1:9490836294ea 381 Peripherals::max30001()->CAL_InitStart(0b1, 0b1, 0b1, 0b011, 0x7FF, 0b0);
jbradshaw 0:e4a10ed6eb92 382
jbradshaw 0:e4a10ed6eb92 383 /**** ECG Initialization ****/
jbradshaw 1:9490836294ea 384 Peripherals::max30001()->ECG_InitStart(0b1, 0b1, 0b1, 0b0, 0b10, 0b11, 31, 0b00, 0b00, 0b0, 0b01);
jbradshaw 0:e4a10ed6eb92 385
jbradshaw 0:e4a10ed6eb92 386 /***** PACE Initialization ***/
jbradshaw 1:9490836294ea 387 Peripherals::max30001()->PACE_InitStart(0b1, 0b0, 0b0, 0b1, 0b000, 0b0, 0b00, 0b0, 0b0);
jbradshaw 0:e4a10ed6eb92 388
jbradshaw 0:e4a10ed6eb92 389 /**** BIOZ Initialization ****/
jbradshaw 1:9490836294ea 390 Peripherals::max30001()->BIOZ_InitStart(
jbradshaw 0:e4a10ed6eb92 391 0b1, 0b1, 0b1, 0b10, 0b11, 0b00, 7, 0b0, 0b111, 0b0, 0b10, 0b00, 0b00, 0b0001, 0b0, 0b111, 0b0000);
jbradshaw 0:e4a10ed6eb92 392
jbradshaw 0:e4a10ed6eb92 393 /*** Set RtoR registers ***/
jbradshaw 1:9490836294ea 394 Peripherals::max30001()->RtoR_InitStart(
jbradshaw 0:e4a10ed6eb92 395 0b1, 0b0011, 0b1111, 0b00, 0b0011, 0b000001, 0b00, 0b000, 0b01);
jbradshaw 0:e4a10ed6eb92 396
jbradshaw 0:e4a10ed6eb92 397 /*** Set Rbias & FMSTR over here ****/
jbradshaw 1:9490836294ea 398 Peripherals::max30001()->Rbias_FMSTR_Init(0b01, 0b10, 0b1, 0b1, 0b00);
jbradshaw 0:e4a10ed6eb92 399
jbradshaw 0:e4a10ed6eb92 400 /**** Interrupt Setting ****/
jbradshaw 0:e4a10ed6eb92 401
jbradshaw 0:e4a10ed6eb92 402 /*** Set ECG Lead ON/OFF ***/
jbradshaw 0:e4a10ed6eb92 403 // max30001_ECG_LeadOnOff();
jbradshaw 0:e4a10ed6eb92 404
jbradshaw 0:e4a10ed6eb92 405 /*** Set BIOZ Lead ON/OFF ***/
jbradshaw 0:e4a10ed6eb92 406 // max30001_BIOZ_LeadOnOff(); Does not work yet...
jbradshaw 0:e4a10ed6eb92 407
jbradshaw 0:e4a10ed6eb92 408 /**** Do a Synch ****/
jbradshaw 1:9490836294ea 409 Peripherals::max30001()->synch();
jbradshaw 0:e4a10ed6eb92 410
jbradshaw 0:e4a10ed6eb92 411 fifo_clear(GetUSBIncomingFifo());
jbradshaw 0:e4a10ed6eb92 412 max30001_ServiceStreaming();
jbradshaw 0:e4a10ed6eb92 413
jbradshaw 0:e4a10ed6eb92 414 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 415 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 416 return 0;
jbradshaw 0:e4a10ed6eb92 417 }
jbradshaw 1:9490836294ea 418
jbradshaw 1:9490836294ea 419 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 420 int MAX30001_Enable_ECG_LeadON(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 421 uint32_t reply[1];
jbradshaw 1:9490836294ea 422 ///< switch to ECG DC Lead ON
jbradshaw 1:9490836294ea 423 Peripherals::max30001()->Enable_LeadON(0b01);
jbradshaw 0:e4a10ed6eb92 424 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 425 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 426 return 0;
jbradshaw 0:e4a10ed6eb92 427 }
jbradshaw 1:9490836294ea 428
jbradshaw 1:9490836294ea 429 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 430 int MAX30001_Enable_BIOZ_LeadON(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 431 uint32_t reply[1];
jbradshaw 1:9490836294ea 432 ///< switch to BIOZ DC Lead ON
jbradshaw 1:9490836294ea 433 Peripherals::max30001()->Enable_LeadON(0b10);
jbradshaw 0:e4a10ed6eb92 434 reply[0] = 0x80;
jbradshaw 0:e4a10ed6eb92 435 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 436 return 0;
jbradshaw 0:e4a10ed6eb92 437 }
jbradshaw 1:9490836294ea 438
jbradshaw 1:9490836294ea 439 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 440 int MAX30001_Read_LeadON(char argStrs[32][32], char replyStrs[32][32]) {
jbradshaw 0:e4a10ed6eb92 441 uint32_t reply[1];
jbradshaw 1:9490836294ea 442 ///< return the max30001_LeadOn var from the MAX30001 driver
jbradshaw 0:e4a10ed6eb92 443 reply[0] = Peripherals::max30001()->max30001_LeadOn;
jbradshaw 0:e4a10ed6eb92 444 FormatReply32(reply, sizeof(reply) / sizeof(uint32_t), replyStrs);
jbradshaw 0:e4a10ed6eb92 445 return 0;
jbradshaw 0:e4a10ed6eb92 446 }