Host software for the MAX30001 ECG, PACE, biopotential, bioimpedance, R-to-R peak sensor. Hosted on the MAX32630FTHR.

Dependencies:   SDFileSystem USBDevice max32630fthr

Fork of MAX30001 SYS EvKit by Emre Eken

MAX30001-MAX32630FTHR ECG Evaluation System

The MAX30001 EVKIT SYS-MBED Evaluation System (EV System) is used to evaluates the MAX30001 sensor, which is an ECG (electrocardiogram), biopotential and bioimpedance analog front end solution for wearable applications. The full evaluation system consists of the MAX32630FTHR board, MAX30001 EVKIT sensor board and the evaluation software. The evaluation kit features ECG, PACE, R-to-R (R-peak timing) detection; bioimpedance (BioZ) AFE; and raw data logging.

The MAX30001 EVKIT evaluation system is assembled, tested and contains the necessary circuitry and connections to evaluate the MAX30001 ECG sensor.

When evaluated as an evaluation system, the MAX32630FTHR board provides the necessary logic rails, master clock, SPI, USB-to-Serial interfaces that are needed to evaluate the MAX30001 sensor board. MAX32630FTHR can be used as an independent development platform.

Communication between the PC and the MAX32630FTHR board is facilitated by a Windows 7, Windows 8 and Windows 10 compatible software that provides a simple and intuitive graphical user interface (GUI).

For more information, visit the wiki pages by clicking the wiki tab above and MAX30001EVSYS product page.

C++ source code, library for the MAX30001 ECG drivers are in the links at the bottom of this page. The sample code includes the ability to log data to the SD card of the MAX32630FTHR.

MAX30001 EVKIT Pinout Connections

/media/uploads/EmreE/max30001_sensor_board_connector_pinout.png

Where to Buy

MAX30001EVSYS-Buy

Committer:
Emre.Eken@IST-LT-35101.maxim-ic.internal
Date:
Thu Apr 05 10:53:26 2018 +0300
Revision:
0:8e4630a71eb1
mbed os 5.8.1 compatible

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1 /*******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 3 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 4 * Permission is hereby granted, free of charge, to any person obtaining a
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 5 * copy of this software and associated documentation files (the "Software"),
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 6 * to deal in the Software without restriction, including without limitation
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 8 * and/or sell copies of the Software, and to permit persons to whom the
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 9 * Software is furnished to do so, subject to the following conditions:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 10 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 11 * The above copyright notice and this permission notice shall be included
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 12 * in all copies or substantial portions of the Software.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 13 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 20 * OTHER DEALINGS IN THE SOFTWARE.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 21 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 22 * Except as contained in this notice, the name of Maxim Integrated
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 24 * Products, Inc. Branding Policy.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 25 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 26 * The mere transfer of this software does not imply any licenses
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 27 * of trade secrets, proprietary technology, copyrights, patents,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 28 * trademarks, maskwork rights, or any other form of intellectual
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 30 * ownership rights.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 31 *******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 32 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 33 #include "mbed.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 34 #include "USBSerial.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 35 #include "RpcFifo.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 36 #include "RpcServer.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 37 #include "StringInOut.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 38 #include "Peripherals.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 39
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 40 /// a running index that keeps track of where an incoming string has been
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 41 /// buffered to
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 42 static int lineBuffer_index = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 43 /// a flag that keeps track of the state of accumulating a string
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 44 static int getLine_State = GETLINE_WAITING;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 45
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 46 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 47 * @brief Place incoming USB characters into a fifo
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 48 * @param data_IN buffer of characters
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 49 * @param len length of data
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 50 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 51 int fifoIncomingChars(uint8_t data_IN[], unsigned int len) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 52 int i;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 53 for (i = 0; i < len; i++) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 54 fifo_put8(GetUSBIncomingFifo(), data_IN[i]);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 55 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 56 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 57 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 58
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 59 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 60 * @brief Check the USB incoming fifo to see if there is data to be read
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 61 * @return 1 if there is data to be read, 0 if data is not available
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 62 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 63 int isReadReady(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 64 if (fifo_empty(GetUSBIncomingFifo()) == 0)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 65 return 1;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 66 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 67 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 68
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 69 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 70 * @brief Clear the incoming USB read fifo
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 71 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 72 void clearOutReadFifo(void) { fifo_clear(GetUSBIncomingFifo()); }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 73
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 74 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 75 * @brief Block until a character can be read from the USB
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 76 * @return the character read
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 77 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 78 char getch(void) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 79 uint8_t ch;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 80 // block until char is ready
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 81 while (isReadReady() == 0) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 82 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 83 // read a char from buffer
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 84 fifo_get8(GetUSBIncomingFifo(), &ch);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 85 return ch;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 86 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 87
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 88 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 89 * @brief Place incoming USB characters into a fifo
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 90 * @param lineBuffer buffer to place the incoming characters
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 91 * @param bufferLength length of buffer
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 92 * @return GETLINE_WAITING if still waiting for a CRLF, GETLINE_DONE
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 93 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 94 int getLine(char *lineBuffer, int bufferLength) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 95 uint8_t ch;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 96
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 97 USBSerial *serial = Peripherals::usbSerial();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 98 if (getLine_State == GETLINE_DONE) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 99 getLine_State = GETLINE_WAITING;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 100 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 101 if (serial->available() != 0) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 102 ch = serial->_getc();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 103 if (ch != 0x0A && ch != 0x0D) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 104 lineBuffer[lineBuffer_index++] = ch;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 105 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 106 if (ch == 0x0D) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 107 lineBuffer[lineBuffer_index++] = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 108 lineBuffer_index = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 109 getLine_State = GETLINE_DONE;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 110 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 111 if (lineBuffer_index > bufferLength) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 112 lineBuffer[bufferLength - 1] = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 113 getLine_State = GETLINE_DONE;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 114 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 115 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 116 return getLine_State;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 117 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 118
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 119 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 120 * @brief Block until a fixed number of characters has been accumulated from the
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 121 * incoming USB
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 122 * @param lineBuffer buffer to place the incoming characters
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 123 * @param maxLength length of buffer
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 124 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 125 void getStringFixedLength(uint8_t *lineBuffer, int maxLength) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 126 uint8_t ch;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 127 int index = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 128 // block until maxLength is captured
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 129 while (1) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 130 ch = getch();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 131 lineBuffer[index++] = ch;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 132 if (index == maxLength)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 133 return;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 134 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 135 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 136
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 137 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 138 * @brief Output a string out the USB serial port
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 139 * @param str output this str the USB channel
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 140 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 141 int putStr(const char *str) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 142 Peripherals::usbSerial()->printf("%s", str); // fflush(stdout);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 143 // uint8_t *ptr;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 144 // uint8_t buffer[256];
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 145 // int index = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 146 /* int length;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 147 ptr = (uint8_t *)str;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 148 length = strlen(str);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 149
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 150 Peripherals::usbSerial()->writeBlock(ptr,length); */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 151 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 152 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 153
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 154 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 155 * @brief Outut an array of bytes out the USB serial port
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 156 * @param data buffer to output
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 157 * @param length length of buffer
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 158 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 159 int putBytes(uint8_t *data, uint32_t length) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 160 int sendThis = 64;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 161 int sent = 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 162 int thisLeft;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 163 uint8_t *ptr = data;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 164 if (length < 64)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 165 sendThis = length;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 166 do {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 167 Peripherals::usbSerial()->writeBlock(ptr, sendThis);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 168 sent += sendThis;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 169 ptr += sendThis;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 170 thisLeft = length - sent;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 171 sendThis = 64;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 172 if (thisLeft < 64)
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 173 sendThis = thisLeft;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 174 } while (sent != length);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 175 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 176 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 177
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 178 /**
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 179 * @brief Outut 256 byte blocks out the USB serial using writeBlock bulk
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 180 * transfers
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 181 * @param data buffer of blocks to output
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 182 * @param length length of 256-byte blocks
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 183 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 184 int putBytes256Block(uint8_t *data, int numberBlocks) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 185 int i;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 186 uint8_t *ptr;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 187 ptr = data;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 188 const int BLOCK_SIZE = 32;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 189 const int FLASH_PAGE_SIZE = 256;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 190 for (i = 0; i < numberBlocks * (FLASH_PAGE_SIZE / BLOCK_SIZE); i++) {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 191 Peripherals::usbSerial()->writeBlock(ptr, BLOCK_SIZE);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 192 ptr += BLOCK_SIZE;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 193 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 194 return 0;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 195 }
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 196