Commit 15cff341 authored by Rahix's avatar Rahix
Browse files

Merge 'SpO2 sensor improvements'

See merge request card10/firmware!414
parents c28aed8d 5a7cc7c9
......@@ -13,6 +13,7 @@
#include "pb.h"
#include "pmic.h"
#include "portexpander.h"
#include "max86150.h"
#include "gpio.h"
#include "i2c.h"
......@@ -191,6 +192,8 @@ int hardware_early_init(void)
*/
max86150_mutex_init();
max86150_shut_down();
/* Allow user space to trigger interrupts.
* Used for BLE, not sure if needed. */
SCB->CCR |= SCB_CCR_USERSETMPEND_Msk;
......
......@@ -66,6 +66,8 @@ int epic_max86150_enable_sensor(
ppg_sample_rate = MAX86150_PPG_SAMPLERATE_100;
} else if (config->ppg_sample_rate == 200) {
ppg_sample_rate = MAX86150_PPG_SAMPLERATE_200;
} else if (config->ppg_sample_rate == 400) {
ppg_sample_rate = MAX86150_PPG_SAMPLERATE_400;
} else {
result = -EINVAL;
goto out_free;
......@@ -104,23 +106,16 @@ int epic_max86150_disable_sensor(void)
mutex_lock(&max86150_mutex);
hwlock_acquire(HWLOCK_I2C);
max86150_shut_down();
max86150_sensor_active = false;
struct stream_info *stream = &max86150_stream;
result = stream_deregister(SD_MAX86150, stream);
if (result < 0) {
goto out_free;
}
if (result == 0) {
vQueueDelete(stream->queue);
stream->queue = NULL;
}
// disable max86150 leds
max86150_set_led_red_amplitude(0);
max86150_set_led_ir_amplitude(0);
max86150_sensor_active = false;
result = 0;
out_free:
hwlock_release(HWLOCK_I2C);
mutex_unlock(&max86150_mutex);
return result;
......@@ -140,7 +135,6 @@ static int max86150_handle_sample(struct max86150_sensor_data *data)
LOG_WARN("max86150", "queue full");
}
max86150_stream.was_full = true;
return -EIO;
} else {
max86150_stream.was_full = false;
}
......
......@@ -5,6 +5,7 @@ subdir('./vendor/Bosch/BME680/')
subdir('./vendor/Bosch/BMA400/')
subdir('./vendor/Maxim/MAX77650/')
subdir('./vendor/Maxim/MAX86150/')
subdir('./vendor/Maxim/rd117_mbed/')
subdir('./gfx/')
subdir('./FreeRTOS/')
......
......@@ -57,6 +57,8 @@ SRAM_ADDR = DEFINED(ARM_SRAM_START) ? ARM_SRAM_START : (SDMA_CODE_ADDR + SDMA_CO
/* SRAM_SIZE must be defined */
SRAM_LEN = SRAM_SIZE + SRAM_ORIGIN - SRAM_ADDR;
STACK_SIZE = 0x1000;
/* SPID and SPIX Sections here are maximum possible sizes */
/* If used, they should be adjusted for the external Flash/RAM size */
MEMORY {
......@@ -191,18 +193,11 @@ SECTIONS {
_ebss = ALIGN(., 4);
} > SRAM
/* Setup the stack for Core 1, it will only be used if the user code
* includes a definition of Stack_Size_Core1, which defines the space
* reserved above the main core's stack for core 1's stack */
__StackTop_Core1 = ORIGIN(SRAM) + LENGTH(SRAM);
__StackLimit_Core1 = DEFINED(Stack_Size_Core1) ? __StackTop_Core1 - Stack_Size_Core1 : __StackTop_Core1;
/* Set stack top to end of RAM, and stack limit move down by Stack_Size.
* If core 1 is used, set the stack to the bottom of Core 1's stack region */
__StackTop = DEFINED(Stack_Size_Core1) ? __StackLimit_Core1 : ORIGIN(SRAM) + LENGTH(SRAM);
__StackLimit = __StackTop - Stack_Size;
/* Set stack top to end of RAM, and stack limit move down by Stack_Size. */
__StackTop = ORIGIN(SRAM) + LENGTH(SRAM);
/*__StackLimit = __StackTop - Stack_Size; */
__StackLimit = __StackTop - STACK_SIZE;
.heap (COPY):
{
......
......@@ -34,6 +34,8 @@
*
******************************************************************************/
STACK_SIZE = 0x1000;
/* SPID and SPIX Sections here are maximum possible sizes */
/* If used, they should be adjusted for the external Flash/RAM size */
MEMORY {
......@@ -120,18 +122,11 @@ SECTIONS {
_ebss = ALIGN(., 4);
} > SRAM
/* Setup the stack for Core 1, it will only be used if the user code
* includes a definition of Stack_Size_Core1, which defines the space
* reserved above the main core's stack for core 1's stack */
__StackTop_Core1 = ORIGIN(SRAM) + LENGTH(SRAM);
__StackLimit_Core1 = DEFINED(Stack_Size_Core1) ? __StackTop_Core1 - Stack_Size_Core1 : __StackTop_Core1;
/* Set stack top to end of RAM, and stack limit move down by Stack_Size.
* If core 1 is used, set the stack to the bottom of Core 1's stack region */
__StackTop = DEFINED(Stack_Size_Core1) ? __StackLimit_Core1 : ORIGIN(SRAM) + LENGTH(SRAM);
__StackLimit = __StackTop - Stack_Size;
/* Set stack top to end of RAM, and stack limit move down by Stack_Size. */
__StackTop = ORIGIN(SRAM) + LENGTH(SRAM);
/*__StackLimit = __StackTop - Stack_Size; */
__StackLimit = __StackTop - STACK_SIZE;
.heap (COPY):
{
......
......@@ -34,6 +34,8 @@
*
******************************************************************************/
STACK_SIZE = 0x1000;
/* SPID and SPIX Sections here are maximum possible sizes */
/* If used, they should be adjusted for the external Flash/RAM size */
MEMORY {
......@@ -120,18 +122,11 @@ SECTIONS {
_ebss = ALIGN(., 4);
} > SRAM
/* Setup the stack for Core 1, it will only be used if the user code
* includes a definition of Stack_Size_Core1, which defines the space
* reserved above the main core's stack for core 1's stack */
__StackTop_Core1 = ORIGIN(SRAM) + LENGTH(SRAM);
__StackLimit_Core1 = DEFINED(Stack_Size_Core1) ? __StackTop_Core1 - Stack_Size_Core1 : __StackTop_Core1;
/* Set stack top to end of RAM, and stack limit move down by Stack_Size.
* If core 1 is used, set the stack to the bottom of Core 1's stack region */
__StackTop = DEFINED(Stack_Size_Core1) ? __StackLimit_Core1 : ORIGIN(SRAM) + LENGTH(SRAM);
__StackLimit = __StackTop - Stack_Size;
/* Set stack top to end of RAM, and stack limit move down by Stack_Size. */
__StackTop = ORIGIN(SRAM) + LENGTH(SRAM);
/*__StackLimit = __StackTop - Stack_Size; */
__StackLimit = __StackTop - STACK_SIZE;
.heap (COPY):
{
......
......@@ -34,6 +34,8 @@
*
******************************************************************************/
STACK_SIZE = 0x2000;
/* SPID and SPIX Sections here are maximum possible sizes */
/* If used, they should be adjusted for the external Flash/RAM size */
MEMORY {
......@@ -120,18 +122,11 @@ SECTIONS {
_ebss = ALIGN(., 4);
} > SRAM
/* Setup the stack for Core 1, it will only be used if the user code
* includes a definition of Stack_Size_Core1, which defines the space
* reserved above the main core's stack for core 1's stack */
__StackTop_Core1 = ORIGIN(SRAM) + LENGTH(SRAM);
__StackLimit_Core1 = DEFINED(Stack_Size_Core1) ? __StackTop_Core1 - Stack_Size_Core1 : __StackTop_Core1;
/* Set stack top to end of RAM, and stack limit move down by Stack_Size.
* If core 1 is used, set the stack to the bottom of Core 1's stack region */
__StackTop = DEFINED(Stack_Size_Core1) ? __StackLimit_Core1 : ORIGIN(SRAM) + LENGTH(SRAM);
__StackLimit = __StackTop - Stack_Size;
/* Set stack top to end of RAM, and stack limit move down by Stack_Size. */
__StackTop = ORIGIN(SRAM) + LENGTH(SRAM);
/*__StackLimit = __StackTop - Stack_Size; */
__StackLimit = __StackTop - STACK_SIZE;
.heap (COPY):
{
......
......@@ -63,12 +63,16 @@
.equ ARM_SRAM_START, __ARM_SRAM_START
#endif
/*
XXX: card10: Stack size moved to linker scripts.
.globl Stack_Size
#ifdef __STACK_SIZE
.equ Stack_Size, __STACK_SIZE
#else
.equ Stack_Size, 0x00001000
#endif
.globl __StackTop
.globl __StackLimit
__StackLimit:
......@@ -76,7 +80,7 @@ __StackLimit:
.size __StackLimit, . - __StackLimit
__StackTop:
.size __StackTop, . - __StackTop
*/
.section .heap
.align 3
#ifdef __HEAP_SIZE
......@@ -250,6 +254,19 @@ ecc_init_exit:
ldr r0, =__StackTop
mov sp, r0
/*
* Loop to initialize out stack section to aid debugging.
*/
ldr r1, =__StackLimit
ldr r2, =__StackTop
movs r0, 0xAAAAAAAA
.LC3:
cmp r1, r2
itt lt
strlt r0, [r1], #4
blt .LC3
/* PreInit runs before any RAM initialization. Example usage: DDR setup, etc. */
ldr r0, =PreInit
......
......@@ -35,7 +35,7 @@ static const uint8_t MAX86150_FIFOCONTROL2 = 0x0A;
static const uint8_t MAX86150_SYSCONTROL = 0x0D;
static const uint8_t MAX86150_PPGCONFIG1 = 0x0E;
static const uint8_t MAX86150_PPGCONFIG2 = 0x0F;
static const uint8_t MAX86150_LED_PROX_AMP = 0x10;
static const uint8_t MAX86150_PROXINTTHRESH = 0x10;
static const uint8_t MAX86150_LED1_PULSEAMP = 0x11;
static const uint8_t MAX86150_LED2_PULSEAMP = 0x12;
......@@ -44,7 +44,6 @@ static const uint8_t MAX86150_LED_PILOT_PA = 0x15;
static const uint8_t MAX86150_ECG_CONFIG1 = 0x3C;
static const uint8_t MAX86150_ECG_CONFIG3 = 0x3E;
static const uint8_t MAX86150_PROXINTTHRESH = 0x10;
static const uint8_t MAX86150_PARTID = 0xFF;
......@@ -65,7 +64,7 @@ static const uint8_t MAX86150_INT_PROX_INT_MASK = (byte)~0b00010000;
static const uint8_t MAX86150_INT_PROX_INT_ENABLE = 0x10;
static const uint8_t MAX86150_INT_PROX_INT_DISABLE = 0x00;
static const uint8_t MAX86150_SAMPLEAVG_MASK = (byte)~0b00000111;
static const uint8_t MAX86150_SMP_AVE_MASK = (byte)~0b00000111;
static const uint8_t MAX86150_ROLLOVER_MASK = (byte)~0b00010000;
static const uint8_t MAX86150_ROLLOVER_ENABLE = 0b00010000;
......@@ -337,7 +336,7 @@ void max86150_set_led_ir_amplitude(uint8_t amplitude)
void max86150_set_led_proximity_amplitude(uint8_t amplitude)
{
max86150_write_register(
MAX86150_ADDRESS, MAX86150_LED_PROX_AMP, amplitude
MAX86150_ADDRESS, MAX86150_LED_PILOT_PA, amplitude
);
}
......@@ -400,7 +399,7 @@ void max86150_disableSlots(void)
void max86150_set_ppg_averaging(uint8_t numberOfSamples)
{
max86150_bit_mask(
MAX86150_FIFOCONFIG, MAX86150_SAMPLEAVG_MASK, numberOfSamples
MAX86150_PPGCONFIG2, MAX86150_SMP_AVE_MASK, numberOfSamples
);
}
......@@ -536,7 +535,11 @@ void max86150_setup(const uint8_t ppg_sample_rate)
max86150_fifo_enable_slot(1, MAX86150_SLOT_RED_LED);
max86150_fifo_enable_slot(2, MAX86150_SLOT_IR_LED);
max86150_fifo_enable_slot(3, MAX86150_SLOT_ECG);
// ECG is disabled for now as the FIFO code does not
// manage the increased FIFO rate correctly.
// E.g. instead of providging PPG data at 100 sps, the
// code provides PPG data at 200 sps
//max86150_fifo_enable_slot(3, MAX86150_SLOT_ECG);
//max86150_fifo_enable_slot(4, MAX86150_SLOT_NONE);
max86150_set_ppg_adc_range(MAX86150_ADCRANGE_16384);
......@@ -663,13 +666,15 @@ uint8_t max86150_get_sample(uint32_t *red, uint32_t *ir, int32_t *ecg)
MXC_I2C1_BUS0,
MAX86150_ADDRESS << 1,
data,
3 * 3,
3 * 2,
0
);
*red = (data[0] << 16) | (data[1] << 8) | (data[2]);
*ir = (data[3] << 16) | (data[4] << 8) | (data[5]);
*ecg = (data[6] << 16) | (data[7] << 8) | (data[8]);
// According to datasheet MS bits of PPG have to be masked
*red = ((data[0] << 16) | (data[1] << 8) | (data[2])) & 0x7FFFF;
*ir = ((data[3] << 16) | (data[4] << 8) | (data[5])) & 0x7FFFF;
//*ecg = (data[6] << 16) | (data[7] << 8) | (data[8]);
*ecg = 0;
}
} //End readPtr != writePtr
......
<meta http-equiv="Refresh" content="0; url=html\index.html">
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>MAXREFDES117# Code Documentation: RD117_ARDUINO/Adafruit_NeoPixel.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="maxim-logo-1.jpg"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">MAXREFDES117# Code Documentation
&#160;<span id="projectnumber">V01.00</span>
</div>
<div id="projectbrief">Heart Rate / SpO2 Monitor</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_adafruit___neo_pixel_8cpp.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Adafruit_NeoPixel.cpp File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>&quot;</code><br/>
</div>
<p><a href="_adafruit___neo_pixel_8cpp_source.html">Go to the source code of this file.</a></p>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_1496e1f9c0637ae9073f7370a2521bf1.html">RD117_ARDUINO</a></li><li class="navelem"><a class="el" href="_adafruit___neo_pixel_8cpp.html">Adafruit_NeoPixel.cpp</a></li>
<li class="footer">Generated on Wed Jun 22 2016 14:49:28 for MAXREFDES117# Code Documentation by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.2 </li>
</ul>
</div>
</body>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
var _adafruit___neo_pixel_8h =
[
[ "Adafruit_NeoPixel", "class_adafruit___neo_pixel.html", "class_adafruit___neo_pixel" ],
[ "NEO_BGR", "_adafruit___neo_pixel_8h.html#a9129664a08911b56227dd641116f105f", null ],
[ "NEO_BGRW", "_adafruit___neo_pixel_8h.html#a5b49f89982b6e60d20f7aaab79030d54", null ],
[ "NEO_BGWR", "_adafruit___neo_pixel_8h.html#a143de1c7084e1f833beecbdae00b321c", null ],
[ "NEO_BRG", "_adafruit___neo_pixel_8h.html#afde6ec00a4ec8fad0267ae1a6689379e", null ],
[ "NEO_BRGW", "_adafruit___neo_pixel_8h.html#aad617c46d4a64cd4ec8d0ed1a0f30073", null ],
[ "NEO_BRWG", "_adafruit___neo_pixel_8h.html#a4b4571bfc0a3ebfb4720ce4e5fbe9acf", null ],
[ "NEO_BWGR", "_adafruit___neo_pixel_8h.html#a2595b8689ce5bd39634d017620ae57b8", null ],
[ "NEO_BWRG", "_adafruit___neo_pixel_8h.html#aaf438f131d0fa8a0be6791a553145860", null ],
[ "NEO_GBR", "_adafruit___neo_pixel_8h.html#abca04ce54125372080f2fbf2afdcf027", null ],
[ "NEO_GBRW", "_adafruit___neo_pixel_8h.html#af60d024b8f8954960e59056c57520080", null ],
[ "NEO_GBWR", "_adafruit___neo_pixel_8h.html#a20be9abdf372b9c71d9fdacc3e6a9d1a", null ],
[ "NEO_GRB", "_adafruit___neo_pixel_8h.html#a95d0d6b0a1f52bc72d9dcea2b3a48e3f", null ],
[ "NEO_GRBW", "_adafruit___neo_pixel_8h.html#a722066abc60b560235b3b22082c2e68e", null ],
[ "NEO_GRWB", "_adafruit___neo_pixel_8h.html#a35a185ff488486a74745e9094892558c", null ],
[ "NEO_GWBR", "_adafruit___neo_pixel_8h.html#aaaaa406f36f1c596526579944ca7043d", null ],
[ "NEO_GWRB", "_adafruit___neo_pixel_8h.html#aa29b3544b4257e851de2e214894d1236", null ],
[ "NEO_KHZ400", "_adafruit___neo_pixel_8h.html#a9c4067fd0cceb0432d1758fc07ede469", null ],
[ "NEO_KHZ800", "_adafruit___neo_pixel_8h.html#a475fef7028a743310aa4311a97899d5d", null ],
[ "NEO_RBG", "_adafruit___neo_pixel_8h.html#a7d6aaa56c8e2603312cba8dbdf9c5661", null ],
[ "NEO_RBGW", "_adafruit___neo_pixel_8h.html#a198dc192119c166c544efc3e89fdd1cd", null ],
[ "NEO_RBWG", "_adafruit___neo_pixel_8h.html#a7b6b551a990b498bed36aadba4a498d5", null ],
[ "NEO_RGB", "_adafruit___neo_pixel_8h.html#aa4f80df5ab240d93359f40956462f758", null ],
[ "NEO_RGBW", "_adafruit___neo_pixel_8h.html#a71f7c6e45f4c63fceca6b5b73c7a7c9d", null ],
[ "NEO_RGWB", "_adafruit___neo_pixel_8h.html#abcce73b2eafdf1bb331a8f02fba95d10", null ],
[ "NEO_RWBG", "_adafruit___neo_pixel_8h.html#a9254ebc9367c071457d0321f64c9d5fa", null ],
[ "NEO_RWGB", "_adafruit___neo_pixel_8h.html#a122c6bb3e44525d2f975dcd89b094267", null ],
[ "NEO_WBGR", "_adafruit___neo_pixel_8h.html#a015eeccbf1bd19907c34d7b39b63bb84", null ],
[ "NEO_WBRG", "_adafruit___neo_pixel_8h.html#a3eed3aeba511a2478a1ee8c17516732b", null ],
[ "NEO_WGBR", "_adafruit___neo_pixel_8h.html#af722c80d41894df25c363b9ebf371b4e", null ],
[ "NEO_WGRB", "_adafruit___neo_pixel_8h.html#a59561d96a0f8a526ee3448e7b104d8b3", null ],
[ "NEO_WRBG", "_adafruit___neo_pixel_8h.html#a266a08af576ed4331db48b16bf572d29", null ],
[ "NEO_WRGB", "_adafruit___neo_pixel_8h.html#a4ee056fd3d7b09538908b35643a2508a", null ],
[ "neoPixelType", "_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff", null ]
];
\ No newline at end of file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>MAXREFDES117# Code Documentation: RD117_MBED/MAX30102/MAX30102.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="maxim-logo-1.jpg"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">MAXREFDES117# Code Documentation
&#160;<span id="projectnumber">V01.00</span>
</div>
<div id="projectbrief">Heart Rate / SpO2 Monitor</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">