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 @@ ...@@ -13,6 +13,7 @@
#include "pb.h" #include "pb.h"
#include "pmic.h" #include "pmic.h"
#include "portexpander.h" #include "portexpander.h"
#include "max86150.h"
#include "gpio.h" #include "gpio.h"
#include "i2c.h" #include "i2c.h"
...@@ -191,6 +192,8 @@ int hardware_early_init(void) ...@@ -191,6 +192,8 @@ int hardware_early_init(void)
*/ */
max86150_mutex_init(); max86150_mutex_init();
max86150_shut_down();
/* Allow user space to trigger interrupts. /* Allow user space to trigger interrupts.
* Used for BLE, not sure if needed. */ * Used for BLE, not sure if needed. */
SCB->CCR |= SCB_CCR_USERSETMPEND_Msk; SCB->CCR |= SCB_CCR_USERSETMPEND_Msk;
......
...@@ -66,6 +66,8 @@ int epic_max86150_enable_sensor( ...@@ -66,6 +66,8 @@ int epic_max86150_enable_sensor(
ppg_sample_rate = MAX86150_PPG_SAMPLERATE_100; ppg_sample_rate = MAX86150_PPG_SAMPLERATE_100;
} else if (config->ppg_sample_rate == 200) { } else if (config->ppg_sample_rate == 200) {
ppg_sample_rate = MAX86150_PPG_SAMPLERATE_200; ppg_sample_rate = MAX86150_PPG_SAMPLERATE_200;
} else if (config->ppg_sample_rate == 400) {
ppg_sample_rate = MAX86150_PPG_SAMPLERATE_400;
} else { } else {
result = -EINVAL; result = -EINVAL;
goto out_free; goto out_free;
...@@ -104,23 +106,16 @@ int epic_max86150_disable_sensor(void) ...@@ -104,23 +106,16 @@ int epic_max86150_disable_sensor(void)
mutex_lock(&max86150_mutex); mutex_lock(&max86150_mutex);
hwlock_acquire(HWLOCK_I2C); hwlock_acquire(HWLOCK_I2C);
max86150_shut_down();
max86150_sensor_active = false;
struct stream_info *stream = &max86150_stream; struct stream_info *stream = &max86150_stream;
result = stream_deregister(SD_MAX86150, stream); result = stream_deregister(SD_MAX86150, stream);
if (result < 0) { if (result == 0) {
goto out_free; vQueueDelete(stream->queue);
stream->queue = NULL;
} }
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); hwlock_release(HWLOCK_I2C);
mutex_unlock(&max86150_mutex); mutex_unlock(&max86150_mutex);
return result; return result;
...@@ -140,7 +135,6 @@ static int max86150_handle_sample(struct max86150_sensor_data *data) ...@@ -140,7 +135,6 @@ static int max86150_handle_sample(struct max86150_sensor_data *data)
LOG_WARN("max86150", "queue full"); LOG_WARN("max86150", "queue full");
} }
max86150_stream.was_full = true; max86150_stream.was_full = true;
return -EIO;
} else { } else {
max86150_stream.was_full = false; max86150_stream.was_full = false;
} }
......
...@@ -5,6 +5,7 @@ subdir('./vendor/Bosch/BME680/') ...@@ -5,6 +5,7 @@ subdir('./vendor/Bosch/BME680/')
subdir('./vendor/Bosch/BMA400/') subdir('./vendor/Bosch/BMA400/')
subdir('./vendor/Maxim/MAX77650/') subdir('./vendor/Maxim/MAX77650/')
subdir('./vendor/Maxim/MAX86150/') subdir('./vendor/Maxim/MAX86150/')
subdir('./vendor/Maxim/rd117_mbed/')
subdir('./gfx/') subdir('./gfx/')
subdir('./FreeRTOS/') subdir('./FreeRTOS/')
......
...@@ -57,6 +57,8 @@ SRAM_ADDR = DEFINED(ARM_SRAM_START) ? ARM_SRAM_START : (SDMA_CODE_ADDR + SDMA_CO ...@@ -57,6 +57,8 @@ SRAM_ADDR = DEFINED(ARM_SRAM_START) ? ARM_SRAM_START : (SDMA_CODE_ADDR + SDMA_CO
/* SRAM_SIZE must be defined */ /* SRAM_SIZE must be defined */
SRAM_LEN = SRAM_SIZE + SRAM_ORIGIN - SRAM_ADDR; SRAM_LEN = SRAM_SIZE + SRAM_ORIGIN - SRAM_ADDR;
STACK_SIZE = 0x1000;
/* SPID and SPIX Sections here are maximum possible sizes */ /* SPID and SPIX Sections here are maximum possible sizes */
/* If used, they should be adjusted for the external Flash/RAM size */ /* If used, they should be adjusted for the external Flash/RAM size */
MEMORY { MEMORY {
...@@ -191,18 +193,11 @@ SECTIONS { ...@@ -191,18 +193,11 @@ SECTIONS {
_ebss = ALIGN(., 4); _ebss = ALIGN(., 4);
} > SRAM } > 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); /* Set stack top to end of RAM, and stack limit move down by Stack_Size. */
__StackLimit = __StackTop - Stack_Size; __StackTop = ORIGIN(SRAM) + LENGTH(SRAM);
/*__StackLimit = __StackTop - Stack_Size; */
__StackLimit = __StackTop - STACK_SIZE;
.heap (COPY): .heap (COPY):
{ {
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
* *
******************************************************************************/ ******************************************************************************/
STACK_SIZE = 0x1000;
/* SPID and SPIX Sections here are maximum possible sizes */ /* SPID and SPIX Sections here are maximum possible sizes */
/* If used, they should be adjusted for the external Flash/RAM size */ /* If used, they should be adjusted for the external Flash/RAM size */
MEMORY { MEMORY {
...@@ -120,18 +122,11 @@ SECTIONS { ...@@ -120,18 +122,11 @@ SECTIONS {
_ebss = ALIGN(., 4); _ebss = ALIGN(., 4);
} > SRAM } > 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); /* Set stack top to end of RAM, and stack limit move down by Stack_Size. */
__StackLimit = __StackTop - Stack_Size; __StackTop = ORIGIN(SRAM) + LENGTH(SRAM);
/*__StackLimit = __StackTop - Stack_Size; */
__StackLimit = __StackTop - STACK_SIZE;
.heap (COPY): .heap (COPY):
{ {
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
* *
******************************************************************************/ ******************************************************************************/
STACK_SIZE = 0x1000;
/* SPID and SPIX Sections here are maximum possible sizes */ /* SPID and SPIX Sections here are maximum possible sizes */
/* If used, they should be adjusted for the external Flash/RAM size */ /* If used, they should be adjusted for the external Flash/RAM size */
MEMORY { MEMORY {
...@@ -120,18 +122,11 @@ SECTIONS { ...@@ -120,18 +122,11 @@ SECTIONS {
_ebss = ALIGN(., 4); _ebss = ALIGN(., 4);
} > SRAM } > 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); /* Set stack top to end of RAM, and stack limit move down by Stack_Size. */
__StackLimit = __StackTop - Stack_Size; __StackTop = ORIGIN(SRAM) + LENGTH(SRAM);
/*__StackLimit = __StackTop - Stack_Size; */
__StackLimit = __StackTop - STACK_SIZE;
.heap (COPY): .heap (COPY):
{ {
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
* *
******************************************************************************/ ******************************************************************************/
STACK_SIZE = 0x2000;
/* SPID and SPIX Sections here are maximum possible sizes */ /* SPID and SPIX Sections here are maximum possible sizes */
/* If used, they should be adjusted for the external Flash/RAM size */ /* If used, they should be adjusted for the external Flash/RAM size */
MEMORY { MEMORY {
...@@ -120,18 +122,11 @@ SECTIONS { ...@@ -120,18 +122,11 @@ SECTIONS {
_ebss = ALIGN(., 4); _ebss = ALIGN(., 4);
} > SRAM } > 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); /* Set stack top to end of RAM, and stack limit move down by Stack_Size. */
__StackLimit = __StackTop - Stack_Size; __StackTop = ORIGIN(SRAM) + LENGTH(SRAM);
/*__StackLimit = __StackTop - Stack_Size; */
__StackLimit = __StackTop - STACK_SIZE;
.heap (COPY): .heap (COPY):
{ {
......
...@@ -63,12 +63,16 @@ ...@@ -63,12 +63,16 @@
.equ ARM_SRAM_START, __ARM_SRAM_START .equ ARM_SRAM_START, __ARM_SRAM_START
#endif #endif
/*
XXX: card10: Stack size moved to linker scripts.
.globl Stack_Size .globl Stack_Size
#ifdef __STACK_SIZE #ifdef __STACK_SIZE
.equ Stack_Size, __STACK_SIZE .equ Stack_Size, __STACK_SIZE
#else #else
.equ Stack_Size, 0x00001000 .equ Stack_Size, 0x00001000
#endif #endif
.globl __StackTop .globl __StackTop
.globl __StackLimit .globl __StackLimit
__StackLimit: __StackLimit:
...@@ -76,7 +80,7 @@ __StackLimit: ...@@ -76,7 +80,7 @@ __StackLimit:
.size __StackLimit, . - __StackLimit .size __StackLimit, . - __StackLimit
__StackTop: __StackTop:
.size __StackTop, . - __StackTop .size __StackTop, . - __StackTop
*/
.section .heap .section .heap
.align 3 .align 3
#ifdef __HEAP_SIZE #ifdef __HEAP_SIZE
...@@ -250,6 +254,19 @@ ecc_init_exit: ...@@ -250,6 +254,19 @@ ecc_init_exit:
ldr r0, =__StackTop ldr r0, =__StackTop
mov sp, r0 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. */ /* PreInit runs before any RAM initialization. Example usage: DDR setup, etc. */
ldr r0, =PreInit ldr r0, =PreInit
......
...@@ -35,7 +35,7 @@ static const uint8_t MAX86150_FIFOCONTROL2 = 0x0A; ...@@ -35,7 +35,7 @@ static const uint8_t MAX86150_FIFOCONTROL2 = 0x0A;
static const uint8_t MAX86150_SYSCONTROL = 0x0D; static const uint8_t MAX86150_SYSCONTROL = 0x0D;
static const uint8_t MAX86150_PPGCONFIG1 = 0x0E; static const uint8_t MAX86150_PPGCONFIG1 = 0x0E;
static const uint8_t MAX86150_PPGCONFIG2 = 0x0F; 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_LED1_PULSEAMP = 0x11;
static const uint8_t MAX86150_LED2_PULSEAMP = 0x12; static const uint8_t MAX86150_LED2_PULSEAMP = 0x12;
...@@ -44,7 +44,6 @@ static const uint8_t MAX86150_LED_PILOT_PA = 0x15; ...@@ -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_CONFIG1 = 0x3C;
static const uint8_t MAX86150_ECG_CONFIG3 = 0x3E; static const uint8_t MAX86150_ECG_CONFIG3 = 0x3E;
static const uint8_t MAX86150_PROXINTTHRESH = 0x10;
static const uint8_t MAX86150_PARTID = 0xFF; static const uint8_t MAX86150_PARTID = 0xFF;
...@@ -65,7 +64,7 @@ static const uint8_t MAX86150_INT_PROX_INT_MASK = (byte)~0b00010000; ...@@ -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_ENABLE = 0x10;
static const uint8_t MAX86150_INT_PROX_INT_DISABLE = 0x00; 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_MASK = (byte)~0b00010000;
static const uint8_t MAX86150_ROLLOVER_ENABLE = 0b00010000; static const uint8_t MAX86150_ROLLOVER_ENABLE = 0b00010000;
...@@ -337,7 +336,7 @@ void max86150_set_led_ir_amplitude(uint8_t amplitude) ...@@ -337,7 +336,7 @@ void max86150_set_led_ir_amplitude(uint8_t amplitude)
void max86150_set_led_proximity_amplitude(uint8_t amplitude) void max86150_set_led_proximity_amplitude(uint8_t amplitude)
{ {
max86150_write_register( 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) ...@@ -400,7 +399,7 @@ void max86150_disableSlots(void)
void max86150_set_ppg_averaging(uint8_t numberOfSamples) void max86150_set_ppg_averaging(uint8_t numberOfSamples)
{ {
max86150_bit_mask( 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) ...@@ -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(1, MAX86150_SLOT_RED_LED);
max86150_fifo_enable_slot(2, MAX86150_SLOT_IR_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_fifo_enable_slot(4, MAX86150_SLOT_NONE);
max86150_set_ppg_adc_range(MAX86150_ADCRANGE_16384); 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) ...@@ -663,13 +666,15 @@ uint8_t max86150_get_sample(uint32_t *red, uint32_t *ir, int32_t *ecg)
MXC_I2C1_BUS0, MXC_I2C1_BUS0,
MAX86150_ADDRESS << 1, MAX86150_ADDRESS << 1,
data, data,
3 * 3, 3 * 2,
0 0
); );
*red = (data[0] << 16) | (data[1] << 8) | (data[2]); // According to datasheet MS bits of PPG have to be masked
*ir = (data[3] << 16) | (data[4] << 8) | (data[5]); *red = ((data[0] << 16) | (data[1] << 8) | (data[2])) & 0x7FFFF;
*ecg = (data[6] << 16) | (data[7] << 8) | (data[8]); *ir = ((data[3] << 16) | (data[4] << 8) | (data[5])) & 0x7FFFF;
//*ecg = (data[6] << 16) | (data[7] << 8) | (data[8]);
*ecg = 0;
} }
} //End readPtr != writePtr } //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 ],