From cdbff5a67e42f6567e7c5ee5ccf129a6d3717f55 Mon Sep 17 00:00:00 2001
From: schneider <schneider@blinkenlichts.net>
Date: Sat, 25 Apr 2020 19:31:09 +0200
Subject: [PATCH] feat(spo2): Drop in Maxim SpO2 estimation code

---
 .../MAXREFDES117_Code_Documentation.pdf       |  Bin 0 -> 177884 bytes
 .../Code_Documentation/MainPage.html          |    1 +
 .../html/MAXREFDES117_Block_Diagram.png       |  Bin 0 -> 21392 bytes
 .../html/MAXREFDES117_firmware_Flowchart.png  |  Bin 0 -> 16061 bytes
 .../html/_adafruit___neo_pixel_8cpp.html      |  123 ++
 .../_adafruit___neo_pixel_8cpp_source.html    | 1320 +++++++++++++++++
 .../html/_adafruit___neo_pixel_8h.html        |  670 +++++++++
 .../html/_adafruit___neo_pixel_8h.js          |   37 +
 .../html/_adafruit___neo_pixel_8h_source.html |  299 ++++
 .../html/_m_a_x30102_8cpp.html                |  377 +++++
 .../html/_m_a_x30102_8cpp.js                  |    9 +
 .../html/_m_a_x30102_8cpp_source.html         |  266 ++++
 .../html/_m_a_x30102_8h.html                  |  737 +++++++++
 .../Code_Documentation/html/_m_a_x30102_8h.js |   32 +
 .../html/_m_a_x30102_8h_source.html           |  191 +++
 .../html/_r_d117___a_r_d_u_i_n_o_8ino.html    |  324 ++++
 .../html/_r_d117___a_r_d_u_i_n_o_8ino.js      |   14 +
 .../_r_d117___a_r_d_u_i_n_o_8ino_source.html  |  330 +++++
 .../html/_soft_i2_c_master_8h.html            |  654 ++++++++
 .../html/_soft_i2_c_master_8h.js              |   33 +
 .../html/_soft_i2_c_master_8h_source.html     |  655 ++++++++
 .../html/algorithm_8cpp.html                  |  485 ++++++
 .../Code_Documentation/html/algorithm_8cpp.js |    9 +
 .../html/algorithm_8cpp_source.html           |  406 +++++
 .../Code_Documentation/html/algorithm_8h.html |  694 +++++++++
 .../Code_Documentation/html/algorithm_8h.js   |   22 +
 .../html/algorithm_8h_source.html             |  191 +++
 .../Code_Documentation/html/annotated.html    |  125 ++
 .../Code_Documentation/html/annotated.js      |    4 +
 .../Code_Documentation/html/bc_s.png          |  Bin 0 -> 668 bytes
 .../Code_Documentation/html/bdwn.png          |  Bin 0 -> 146 bytes
 .../html/class_adafruit___neo_pixel.html      |  668 +++++++++
 .../html/class_adafruit___neo_pixel.js        |   23 +
 .../Code_Documentation/html/classes.html      |  129 ++
 .../Code_Documentation/html/closed.png        |  Bin 0 -> 131 bytes
 .../dir_1496e1f9c0637ae9073f7370a2521bf1.html |  134 ++
 .../dir_1496e1f9c0637ae9073f7370a2521bf1.js   |   11 +
 .../dir_19b53f07f52837a342947cc20e6d978f.html |  121 ++
 .../dir_19b53f07f52837a342947cc20e6d978f.js   |    5 +
 .../dir_70c5cd4c8bba287fe799894cc0903ca4.html |  126 ++
 .../dir_70c5cd4c8bba287fe799894cc0903ca4.js   |    6 +
 .../dir_d4a9a7556cca61907ce453116086a23a.html |  121 ++
 .../dir_d4a9a7556cca61907ce453116086a23a.js   |    5 +
 .../Code_Documentation/html/doxygen.css       | 1172 +++++++++++++++
 .../Code_Documentation/html/doxygen.png       |  Bin 0 -> 3812 bytes
 .../Code_Documentation/html/dynsections.js    |   78 +
 .../Code_Documentation/html/files.html        |  130 ++
 .../Code_Documentation/html/files.js          |    4 +
 .../Code_Documentation/html/ftv2blank.png     |  Bin 0 -> 86 bytes
 .../Code_Documentation/html/ftv2cl.png        |  Bin 0 -> 456 bytes
 .../Code_Documentation/html/ftv2doc.png       |  Bin 0 -> 730 bytes
 .../html/ftv2folderclosed.png                 |  Bin 0 -> 567 bytes
 .../html/ftv2folderopen.png                   |  Bin 0 -> 621 bytes
 .../Code_Documentation/html/ftv2lastnode.png  |  Bin 0 -> 86 bytes
 .../Code_Documentation/html/ftv2link.png      |  Bin 0 -> 730 bytes
 .../Code_Documentation/html/ftv2mlastnode.png |  Bin 0 -> 244 bytes
 .../Code_Documentation/html/ftv2mnode.png     |  Bin 0 -> 244 bytes
 .../Code_Documentation/html/ftv2mo.png        |  Bin 0 -> 401 bytes
 .../Code_Documentation/html/ftv2node.png      |  Bin 0 -> 86 bytes
 .../Code_Documentation/html/ftv2ns.png        |  Bin 0 -> 392 bytes
 .../Code_Documentation/html/ftv2plastnode.png |  Bin 0 -> 231 bytes
 .../Code_Documentation/html/ftv2pnode.png     |  Bin 0 -> 231 bytes
 .../Code_Documentation/html/ftv2splitbar.png  |  Bin 0 -> 309 bytes
 .../Code_Documentation/html/ftv2vertline.png  |  Bin 0 -> 86 bytes
 .../Code_Documentation/html/functions.html    |  172 +++
 .../html/functions_func.html                  |  172 +++
 .../Code_Documentation/html/globals.html      |  368 +++++
 .../Code_Documentation/html/globals_defs.html |  260 ++++
 .../Code_Documentation/html/globals_func.html |  177 +++
 .../Code_Documentation/html/globals_type.html |  129 ++
 .../Code_Documentation/html/globals_vars.html |  154 ++
 .../Code_Documentation/html/index.html        |  125 ++
 .../Code_Documentation/html/jquery.js         |   77 +
 .../Code_Documentation/html/main_8cpp.html    |  339 +++++
 .../Code_Documentation/html/main_8cpp.js      |   14 +
 .../html/main_8cpp_source.html                |  298 ++++
 .../html/max30102_8cpp.html                   |  354 +++++
 .../Code_Documentation/html/max30102_8cpp.js  |    8 +
 .../html/max30102_8cpp_source.html            |  263 ++++
 .../Code_Documentation/html/max30102_8h.html  |  741 +++++++++
 .../Code_Documentation/html/max30102_8h.js    |   32 +
 .../html/max30102_8h_source.html              |  196 +++
 .../Code_Documentation/html/maxim-logo-1.jpg  |  Bin 0 -> 5329 bytes
 .../Code_Documentation/html/nav_f.png         |  Bin 0 -> 149 bytes
 .../Code_Documentation/html/nav_g.png         |  Bin 0 -> 95 bytes
 .../Code_Documentation/html/nav_h.png         |  Bin 0 -> 96 bytes
 .../Code_Documentation/html/navtree.css       |  143 ++
 .../Code_Documentation/html/navtree.js        |  519 +++++++
 .../Code_Documentation/html/navtreeindex0.js  |   95 ++
 .../Code_Documentation/html/open.png          |  Bin 0 -> 122 bytes
 .../Code_Documentation/html/resize.js         |   93 ++
 .../html/search/all_5f.html                   |   25 +
 .../Code_Documentation/html/search/all_5f.js  |    6 +
 .../html/search/all_61.html                   |   25 +
 .../Code_Documentation/html/search/all_61.js  |    8 +
 .../html/search/all_62.html                   |   25 +
 .../Code_Documentation/html/search/all_62.js  |    4 +
 .../html/search/all_63.html                   |   25 +
 .../Code_Documentation/html/search/all_63.js  |    5 +
 .../html/search/all_66.html                   |   25 +
 .../Code_Documentation/html/search/all_66.js  |    5 +
 .../html/search/all_67.html                   |   25 +
 .../Code_Documentation/html/search/all_67.js  |    6 +
 .../html/search/all_68.html                   |   25 +
 .../Code_Documentation/html/search/all_68.js  |    5 +
 .../html/search/all_69.html                   |   25 +
 .../Code_Documentation/html/search/all_69.js  |    6 +
 .../html/search/all_6c.html                   |   25 +
 .../Code_Documentation/html/search/all_6c.js  |    4 +
 .../html/search/all_6d.html                   |   25 +
 .../Code_Documentation/html/search/all_6d.js  |   22 +
 .../html/search/all_6e.html                   |   25 +
 .../Code_Documentation/html/search/all_6e.js  |    6 +
 .../html/search/all_70.html                   |   25 +
 .../Code_Documentation/html/search/all_70.js  |    4 +
 .../html/search/all_72.html                   |   25 +
 .../Code_Documentation/html/search/all_72.js  |   25 +
 .../html/search/all_73.html                   |   25 +
 .../Code_Documentation/html/search/all_73.js  |   16 +
 .../html/search/all_74.html                   |   25 +
 .../Code_Documentation/html/search/all_74.js  |    4 +
 .../html/search/all_75.html                   |   25 +
 .../Code_Documentation/html/search/all_75.js  |    5 +
 .../html/search/all_7e.html                   |   25 +
 .../Code_Documentation/html/search/all_7e.js  |    4 +
 .../html/search/classes_61.html               |   25 +
 .../html/search/classes_61.js                 |    4 +
 .../Code_Documentation/html/search/close.png  |  Bin 0 -> 273 bytes
 .../html/search/defines_5f.html               |   25 +
 .../html/search/defines_5f.js                 |    5 +
 .../html/search/defines_62.html               |   25 +
 .../html/search/defines_62.js                 |    4 +
 .../html/search/defines_66.html               |   25 +
 .../html/search/defines_66.js                 |    5 +
 .../html/search/defines_68.html               |   25 +
 .../html/search/defines_68.js                 |    5 +
 .../html/search/defines_69.html               |   25 +
 .../html/search/defines_69.js                 |    5 +
 .../html/search/defines_6d.html               |   25 +
 .../html/search/defines_6d.js                 |    6 +
 .../html/search/defines_6e.html               |   25 +
 .../html/search/defines_6e.js                 |   35 +
 .../html/search/defines_72.html               |   25 +
 .../html/search/defines_72.js                 |   25 +
 .../html/search/defines_73.html               |   25 +
 .../html/search/defines_73.js                 |   10 +
 .../html/search/defines_74.html               |   25 +
 .../html/search/defines_74.js                 |    4 +
 .../html/search/files_61.html                 |   25 +
 .../html/search/files_61.js                   |    5 +
 .../html/search/files_6d.html                 |   25 +
 .../html/search/files_6d.js                   |    6 +
 .../html/search/files_72.html                 |   25 +
 .../html/search/files_72.js                   |    4 +
 .../html/search/files_73.html                 |   25 +
 .../html/search/files_73.js                   |    4 +
 .../html/search/functions_5f.html             |   25 +
 .../html/search/functions_5f.js               |    4 +
 .../html/search/functions_61.html             |   25 +
 .../html/search/functions_61.js               |    4 +
 .../html/search/functions_62.html             |   25 +
 .../html/search/functions_62.js               |    4 +
 .../html/search/functions_63.html             |   25 +
 .../html/search/functions_63.js               |    6 +
 .../html/search/functions_67.html             |   25 +
 .../html/search/functions_67.js               |    6 +
 .../html/search/functions_69.html             |   25 +
 .../html/search/functions_69.js               |    4 +
 .../html/search/functions_6c.html             |   25 +
 .../html/search/functions_6c.js               |    4 +
 .../html/search/functions_6d.html             |   25 +
 .../html/search/functions_6d.js               |   15 +
 .../html/search/functions_6e.html             |   25 +
 .../html/search/functions_6e.js               |    4 +
 .../html/search/functions_70.html             |   25 +
 .../html/search/functions_70.js               |    4 +
 .../html/search/functions_73.html             |   25 +
 .../html/search/functions_73.js               |    8 +
 .../html/search/functions_75.html             |   25 +
 .../html/search/functions_75.js               |    5 +
 .../html/search/functions_7e.html             |   25 +
 .../html/search/functions_7e.js               |    4 +
 .../html/search/mag_sel.png                   |  Bin 0 -> 563 bytes
 .../html/search/nomatches.html                |   12 +
 .../html/search/pages_6d.html                 |   25 +
 .../html/search/pages_6d.js                   |    4 +
 .../Code_Documentation/html/search/search.css |  238 +++
 .../Code_Documentation/html/search/search.js  |  805 ++++++++++
 .../html/search/search_l.png                  |  Bin 0 -> 604 bytes
 .../html/search/search_m.png                  |  Bin 0 -> 158 bytes
 .../html/search/search_r.png                  |  Bin 0 -> 612 bytes
 .../html/search/typedefs_6e.html              |   25 +
 .../html/search/typedefs_6e.js                |    4 +
 .../html/search/variables_61.html             |   25 +
 .../html/search/variables_61.js               |    6 +
 .../html/search/variables_63.html             |   25 +
 .../html/search/variables_63.js               |    5 +
 .../html/search/variables_6e.html             |   25 +
 .../html/search/variables_6e.js               |    6 +
 .../html/search/variables_75.html             |   25 +
 .../html/search/variables_75.js               |    5 +
 .../Code_Documentation/html/sync_off.png      |  Bin 0 -> 837 bytes
 .../Code_Documentation/html/sync_on.png       |  Bin 0 -> 830 bytes
 .../Code_Documentation/html/tab_a.png         |  Bin 0 -> 147 bytes
 .../Code_Documentation/html/tab_b.png         |  Bin 0 -> 160 bytes
 .../Code_Documentation/html/tab_h.png         |  Bin 0 -> 169 bytes
 .../Code_Documentation/html/tab_s.png         |  Bin 0 -> 177 bytes
 .../Code_Documentation/html/tabs.css          |   60 +
 .../RD117_MBED/MAX30102/MAX30102.cpp          |  220 +++
 .../rd117_mbed/RD117_MBED/MAX30102/MAX30102.h |   97 ++
 .../RD117_MBED/algorithm/algorithm.cpp        |  363 +++++
 .../RD117_MBED/algorithm/algorithm.h          |  100 ++
 .../Maxim/rd117_mbed/RD117_MBED/main.cpp      |  219 +++
 213 files changed, 19223 insertions(+)
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/MAXREFDES117_Code_Documentation.pdf
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/MainPage.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/MAXREFDES117_Block_Diagram.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/MAXREFDES117_firmware_Flowchart.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8cpp.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8cpp_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/annotated.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/annotated.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/bc_s.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/bdwn.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/class_adafruit___neo_pixel.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/class_adafruit___neo_pixel.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/classes.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/closed.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_1496e1f9c0637ae9073f7370a2521bf1.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_1496e1f9c0637ae9073f7370a2521bf1.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_19b53f07f52837a342947cc20e6d978f.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_19b53f07f52837a342947cc20e6d978f.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_70c5cd4c8bba287fe799894cc0903ca4.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_70c5cd4c8bba287fe799894cc0903ca4.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_d4a9a7556cca61907ce453116086a23a.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_d4a9a7556cca61907ce453116086a23a.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/doxygen.css
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/doxygen.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dynsections.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/files.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/files.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2blank.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2cl.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2doc.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2folderclosed.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2folderopen.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2lastnode.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2link.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mlastnode.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mnode.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mo.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2node.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2ns.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2plastnode.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2pnode.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2splitbar.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2vertline.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/functions.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/functions_func.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_defs.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_func.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_type.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_vars.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/index.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/jquery.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h_source.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/maxim-logo-1.jpg
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_f.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_g.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_h.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtree.css
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtree.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtreeindex0.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/open.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/resize.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_5f.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_5f.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_61.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_61.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_62.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_62.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_63.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_63.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_66.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_66.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_67.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_67.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_68.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_68.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_69.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_69.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6c.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6c.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6d.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6d.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6e.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6e.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_70.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_70.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_72.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_72.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_73.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_73.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_74.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_74.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_75.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_75.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_7e.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_7e.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/classes_61.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/classes_61.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/close.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_5f.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_5f.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_62.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_62.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_66.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_66.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_68.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_68.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_69.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_69.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6d.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6d.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6e.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6e.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_72.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_72.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_73.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_73.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_74.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_74.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_61.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_61.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_6d.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_6d.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_72.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_72.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_73.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_73.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_5f.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_5f.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_61.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_61.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_62.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_62.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_63.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_63.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_67.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_67.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_69.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_69.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6c.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6c.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6d.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6d.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6e.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6e.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_70.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_70.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_73.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_73.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_75.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_75.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_7e.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_7e.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/mag_sel.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/nomatches.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/pages_6d.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/pages_6d.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search.css
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_l.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_m.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_r.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/typedefs_6e.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/typedefs_6e.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_61.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_61.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_63.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_63.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_6e.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_6e.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_75.html
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_75.js
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/sync_off.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/sync_on.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_a.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_b.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_h.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_s.png
 create mode 100644 lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tabs.css
 create mode 100644 lib/vendor/Maxim/rd117_mbed/RD117_MBED/MAX30102/MAX30102.cpp
 create mode 100644 lib/vendor/Maxim/rd117_mbed/RD117_MBED/MAX30102/MAX30102.h
 create mode 100644 lib/vendor/Maxim/rd117_mbed/RD117_MBED/algorithm/algorithm.cpp
 create mode 100644 lib/vendor/Maxim/rd117_mbed/RD117_MBED/algorithm/algorithm.h
 create mode 100644 lib/vendor/Maxim/rd117_mbed/RD117_MBED/main.cpp

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/MAXREFDES117_Code_Documentation.pdf b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/MAXREFDES117_Code_Documentation.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..8a3a781d4bd547688da15fc7a9159859a61fec8a
GIT binary patch
literal 177884
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%0AtczX9`;0YN%jlY^G-nYHypFgU{bG1FeWK
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
BAPWEh

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/MainPage.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/MainPage.html
new file mode 100644
index 000000000..ef34a5b82
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/MainPage.html
@@ -0,0 +1 @@
+<meta http-equiv="Refresh" content="0; url=html\index.html">
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/MAXREFDES117_Block_Diagram.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/MAXREFDES117_Block_Diagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..80f3301aa8c2165a625e0edbdc0ced433b1181ac
GIT binary patch
literal 21392
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
Ag#Z8m

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/MAXREFDES117_firmware_Flowchart.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/MAXREFDES117_firmware_Flowchart.png
new file mode 100644
index 0000000000000000000000000000000000000000..f71455986af0687dbca1a601e0e09f0065b76217
GIT binary patch
literal 16061
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
Jmvv4FO#s0C6=VPa

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8cpp.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8cpp.html
new file mode 100644
index 000000000..0907ba25c
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8cpp.html
@@ -0,0 +1,123 @@
+<!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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8cpp_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8cpp_source.html
new file mode 100644
index 000000000..536c863d8
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8cpp_source.html
@@ -0,0 +1,1320 @@
+<!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 Source File</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_source.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</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_adafruit___neo_pixel_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">  Arduino library to control a wide variety of WS2811- and WS2812-based RGB</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">  LED devices such as Adafruit FLORA RGB Smart Pixels and NeoPixel strips.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">  Currently handles 400 and 800 KHz bitstreams on 8, 12 and 16 MHz ATmega</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">  MCUs, with LEDs wired for various color orders.  8 MHz MCUs provide</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">  output on PORTB and PORTD, while 16 MHz chips can handle most output pins</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">  (possible exception with upper PORT registers on the Arduino Mega).</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">  Written by Phil Burgess / Paint Your Dragon for Adafruit Industries,</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">  contributions by PJRC, Michael Miller and other members of the open</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">  source community.</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">  Adafruit invests time and resources providing this open source code,</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">  please support Adafruit and open-source hardware by purchasing products</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">  from Adafruit!</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">  -------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">  This file is part of the Adafruit NeoPixel library.</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">  NeoPixel is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment">  it under the terms of the GNU Lesser General Public License as</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment">  published by the Free Software Foundation, either version 3 of</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment">  the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment">  NeoPixel is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment">  but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment">  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">  GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">  You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">  License along with NeoPixel.  If not, see</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">  &lt;http://www.gnu.org/licenses/&gt;.</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">  -------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_adafruit___neo_pixel_8h.html">Adafruit_NeoPixel.h</a>&quot;</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">// Constructor when length, pin and type are known at compile-time:</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#ac314debe6917c8c9b320b785139c6e58">   38</a></span>&#160;<a class="code" href="class_adafruit___neo_pixel.html#ab1ac0c48cf3fd9185e40308c37f1d320">Adafruit_NeoPixel::Adafruit_NeoPixel</a>(uint16_t n, uint8_t p, <a class="code" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a> t) :</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  brightness(0), pixels(NULL), endTime(0), begun(<a class="code" href="algorithm_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>)</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;{</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  <a class="code" href="class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b">updateType</a>(t);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;  <a class="code" href="class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944">updateLength</a>(n);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;  <a class="code" href="class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b">setPin</a>(p);</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;}</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">// via Michael Vogt/neophob: empty constructor is used when strand length</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">// isn&#39;t known at compile-time; situations where program config might be</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">// read from internal flash memory or an SD card, or arrive via serial</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">// command.  If using this constructor, MUST follow up with updateType(),</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">// updateLength(), etc. to establish the strand type, length and pin number!</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#ab1ac0c48cf3fd9185e40308c37f1d320">   51</a></span>&#160;<a class="code" href="class_adafruit___neo_pixel.html#ab1ac0c48cf3fd9185e40308c37f1d320">Adafruit_NeoPixel::Adafruit_NeoPixel</a>() :</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  pin(-1), brightness(0), pixels(NULL), endTime(0), begun(<a class="code" href="algorithm_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>),</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  numLEDs(0), numBytes(0), rOffset(1), gOffset(0), bOffset(2), wOffset(1)</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;#ifdef <a class="code" href="_adafruit___neo_pixel_8h.html#a9c4067fd0cceb0432d1758fc07ede469">NEO_KHZ400</a></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  , is800KHz(<a class="code" href="algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">true</a>)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;#endif</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;{</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;}</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db">   60</a></span>&#160;<a class="code" href="class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db">Adafruit_NeoPixel::~Adafruit_NeoPixel</a>() {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  <span class="keywordflow">if</span>(pixels)   free(pixels);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keywordflow">if</span>(pin &gt;= 0) pinMode(pin, INPUT);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;}</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7">   65</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7">Adafruit_NeoPixel::begin</a>(<span class="keywordtype">void</span>) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordflow">if</span>(pin &gt;= 0) {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    pinMode(pin, OUTPUT);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    digitalWrite(pin, LOW);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  begun = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;}</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944">   73</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944">Adafruit_NeoPixel::updateLength</a>(uint16_t n) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="keywordflow">if</span>(pixels) free(pixels); <span class="comment">// Free existing data (if any)</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  <span class="comment">// Allocate new data -- note: ALL PIXELS ARE CLEARED</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  numBytes = n * ((wOffset == rOffset) ? 3 : 4);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="keywordflow">if</span>((pixels = (uint8_t *)malloc(numBytes))) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    memset(pixels, 0, numBytes);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    numLEDs = n;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    numLEDs = numBytes = 0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;}</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b">   86</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b">Adafruit_NeoPixel::updateType</a>(<a class="code" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a> t) {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  <span class="keywordtype">boolean</span> oldThreeBytesPerPixel = (wOffset == rOffset); <span class="comment">// false if RGBW</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  wOffset = (t &gt;&gt; 6) &amp; 0b11; <span class="comment">// See notes in header file</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  rOffset = (t &gt;&gt; 4) &amp; 0b11; <span class="comment">// regarding R/G/B/W offsets</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  gOffset = (t &gt;&gt; 2) &amp; 0b11;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  bOffset =  t       &amp; 0b11;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="preprocessor"></span>  is800KHz = (t &lt; 256);      <span class="comment">// 400 KHz flag is 1&lt;&lt;8</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="comment">// If bytes-per-pixel has changed (and pixel data was previously</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  <span class="comment">// allocated), re-allocate to new size.  Will clear any data.</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keywordflow">if</span>(pixels) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordtype">boolean</span> newThreeBytesPerPixel = (wOffset == rOffset);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">if</span>(newThreeBytesPerPixel != oldThreeBytesPerPixel) <a class="code" href="class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944">updateLength</a>(numLEDs);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;}</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="preprocessor">#ifdef ESP8266</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="preprocessor"></span><span class="comment">// ESP8266 show() is external to enforce ICACHE_RAM_ATTR execution</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> <span class="keywordtype">void</span> ICACHE_RAM_ATTR espShow(</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  uint8_t pin, uint8_t *pixels, uint32_t numBytes, uint8_t type);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="preprocessor">#endif // ESP8266</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7">  111</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7">Adafruit_NeoPixel::show</a>(<span class="keywordtype">void</span>) {</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  <span class="keywordflow">if</span>(!pixels) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <span class="comment">// Data latch = 50+ microsecond pause in the output stream.  Rather than</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  <span class="comment">// put a delay at the end of the function, the ending time is noted and</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  <span class="comment">// the function will simply hold off (if needed) on issuing the</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  <span class="comment">// subsequent round of data until the latch time has elapsed.  This</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="comment">// allows the mainline code to start generating the next frame of data</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  <span class="comment">// rather than stalling for the latch.</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  <span class="keywordflow">while</span>(!<a class="code" href="class_adafruit___neo_pixel.html#ad38ce8112667b70ad7c411a98892af0e">canShow</a>());</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <span class="comment">// endTime is a private member (rather than global var) so that mutliple</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  <span class="comment">// instances on different pins can be quickly issued in succession (each</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  <span class="comment">// instance doesn&#39;t delay the next).</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="comment">// In order to make this code runtime-configurable to work with any pin,</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="comment">// SBI/CBI instructions are eschewed in favor of full PORT writes via the</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  <span class="comment">// OUT or ST instructions.  It relies on two facts: that peripheral</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="comment">// functions (such as PWM) take precedence on output pins, so our PORT-</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="comment">// wide writes won&#39;t interfere, and that interrupts are globally disabled</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  <span class="comment">// while data is being issued to the LEDs, so no other code will be</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="comment">// accessing the PORT.  The code takes an initial &#39;snapshot&#39; of the PORT</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="comment">// state, computes &#39;pin high&#39; and &#39;pin low&#39; values, and writes these back</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="comment">// to the PORT register as needed.</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  noInterrupts(); <span class="comment">// Need 100% focus on instruction timing</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="preprocessor">#ifdef __AVR__</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="preprocessor"></span><span class="comment">// AVR MCUs -- ATmega &amp; ATtiny (no XMEGA) ---------------------------------</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="keyword">volatile</span> uint16_t</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    i   = numBytes; <span class="comment">// Loop counter</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  <span class="keyword">volatile</span> uint8_t</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;   *ptr = pixels,   <span class="comment">// Pointer to next byte</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    b   = *ptr++,   <span class="comment">// Current byte value</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    hi,             <span class="comment">// PORT w/output bit set high</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    lo;             <span class="comment">// PORT w/output bit set low</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  <span class="comment">// Hand-tuned assembly code issues data to the LED drivers at a specific</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="comment">// rate.  There&#39;s separate code for different CPU speeds (8, 12, 16 MHz)</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  <span class="comment">// for both the WS2811 (400 KHz) and WS2812 (800 KHz) drivers.  The</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  <span class="comment">// datastream timing for the LED drivers allows a little wiggle room each</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;  <span class="comment">// way (listed in the datasheets), so the conditions for compiling each</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  <span class="comment">// case are set up for a range of frequencies rather than just the exact</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  <span class="comment">// 8, 12 or 16 MHz values, permitting use with some close-but-not-spot-on</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  <span class="comment">// devices (e.g. 16.5 MHz DigiSpark).  The ranges were arrived at based</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  <span class="comment">// on the datasheet figures and have not been extensively tested outside</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  <span class="comment">// the canonical 8/12/16 MHz speeds; there&#39;s no guarantee these will work</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;  <span class="comment">// close to the extremes (or possibly they could be pushed further).</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  <span class="comment">// Keep in mind only one CPU speed case actually gets compiled; the</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  <span class="comment">// resulting program isn&#39;t as massive as it might look from source here.</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment">// 8 MHz(ish) AVR ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="preprocessor">#if (F_CPU &gt;= 7400000UL) &amp;&amp; (F_CPU &lt;= 9500000UL)</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400 // 800 KHz check needed only if 400 KHz support enabled</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="preprocessor"></span>  <span class="keywordflow">if</span>(is800KHz) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keyword">volatile</span> uint8_t n1, n2 = 0;  <span class="comment">// First, next bits out</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="comment">// Squeezing an 800 KHz stream out of an 8 MHz chip requires code</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="comment">// specific to each PORT register.  At present this is only written</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="comment">// to work with pins on PORTD or PORTB, the most likely use case --</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="comment">// this covers all the pins on the Adafruit Flora and the bulk of</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="comment">// digital pins on the Arduino Pro 8 MHz (keep in mind, this code</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="comment">// doesn&#39;t even get compiled for 16 MHz boards like the Uno, Mega,</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="comment">// Leonardo, etc., so don&#39;t bother extending this out of hand).</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="comment">// Additional PORTs could be added if you really need them, just</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <span class="comment">// duplicate the else and loop and change the PORT.  Each add&#39;l</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    <span class="comment">// PORT will require about 150(ish) bytes of program space.</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <span class="comment">// 10 instruction clocks per bit: HHxxxxxLLL</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="comment">// OUT instructions:              ^ ^    ^   (T=0,2,7)</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;<span class="preprocessor">#ifdef PORTD // PORTD isn&#39;t present on ATtiny85, etc.</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    <span class="keywordflow">if</span>(port == &amp;PORTD) {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;      hi = PORTD |  pinMask;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;      lo = PORTD &amp; ~pinMask;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;      n1 = lo;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;      <span class="keywordflow">if</span>(b &amp; 0x80) n1 = hi;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;      <span class="comment">// Dirty trick: RJMPs proceeding to the next instruction are used</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;      <span class="comment">// to delay two clock cycles in one instruction word (rather than</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;      <span class="comment">// using two NOPs).  This was necessary in order to squeeze the</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;      <span class="comment">// loop down to exactly 64 words -- the maximum possible for a</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;      <span class="comment">// relative branch.</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;      <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;       <span class="stringliteral">&quot;headD:&quot;</span>                   <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Clk  Pseudocode</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        <span class="comment">// Bit 7:</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="stringliteral">&quot;mov  %[n2]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    n2   = lo</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n1]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = n1</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 6&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x40)</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;         <span class="stringliteral">&quot;mov %[n2]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   n2 = hi</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;        <span class="comment">// Bit 6:</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        <span class="stringliteral">&quot;mov  %[n1]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    n1   = lo</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n2]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = n2</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 5&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x20)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;         <span class="stringliteral">&quot;mov %[n1]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   n1 = hi</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        <span class="comment">// Bit 5:</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        <span class="stringliteral">&quot;mov  %[n2]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    n2   = lo</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n1]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = n1</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 4&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x10)</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;         <span class="stringliteral">&quot;mov %[n2]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   n2 = hi</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        <span class="comment">// Bit 4:</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;        <span class="stringliteral">&quot;mov  %[n1]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    n1   = lo</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n2]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = n2</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 3&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x08)</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;         <span class="stringliteral">&quot;mov %[n1]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   n1 = hi</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        <span class="comment">// Bit 3:</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        <span class="stringliteral">&quot;mov  %[n2]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    n2   = lo</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n1]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = n1</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 2&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x04)</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;         <span class="stringliteral">&quot;mov %[n2]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   n2 = hi</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        <span class="comment">// Bit 2:</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        <span class="stringliteral">&quot;mov  %[n1]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    n1   = lo</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n2]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = n2</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x02)</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;         <span class="stringliteral">&quot;mov %[n1]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   n1 = hi</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        <span class="comment">// Bit 1:</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        <span class="stringliteral">&quot;mov  %[n2]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    n2   = lo</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n1]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = n1</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 0&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x01)</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;         <span class="stringliteral">&quot;mov %[n2]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   n2 = hi</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        <span class="stringliteral">&quot;sbiw %[count], 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    i-- (don&#39;t act on Z flag yet)</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="comment">// Bit 0:</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        <span class="stringliteral">&quot;mov  %[n1]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    n1   = lo</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n2]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = n2</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        <span class="stringliteral">&quot;ld   %[byte] , %a[ptr]+&quot;</span> <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    b = *ptr++</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x80)</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;         <span class="stringliteral">&quot;mov %[n1]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   n1 = hi</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        <span class="stringliteral">&quot;brne headD&quot;</span>              <span class="stringliteral">&quot;\n&quot;</span>   <span class="comment">// 2    while(i) (Z flag set above)</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;      : [byte]  <span class="stringliteral">&quot;+r&quot;</span> (b),</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        [n1]    <span class="stringliteral">&quot;+r&quot;</span> (n1),</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        [n2]    <span class="stringliteral">&quot;+r&quot;</span> (n2),</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        [count] <span class="stringliteral">&quot;+w&quot;</span> (i)</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;      : [port]   <span class="stringliteral">&quot;I&quot;</span> (_SFR_IO_ADDR(PORTD)),</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        [ptr]    <span class="stringliteral">&quot;e&quot;</span> (ptr),</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        [hi]     <span class="stringliteral">&quot;r&quot;</span> (hi),</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        [lo]     <span class="stringliteral">&quot;r&quot;</span> (lo));</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(port == &amp;PORTB) {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="preprocessor">#endif // PORTD</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;      <span class="comment">// Same as above, just switched to PORTB and stripped of comments.</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;      hi = PORTB |  pinMask;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;      lo = PORTB &amp; ~pinMask;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;      n1 = lo;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;      <span class="keywordflow">if</span>(b &amp; 0x80) n1 = hi;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;      <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;       <span class="stringliteral">&quot;headB:&quot;</span>                   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        <span class="stringliteral">&quot;mov  %[n2]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n1]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 6&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;         <span class="stringliteral">&quot;mov %[n2]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;        <span class="stringliteral">&quot;mov  %[n1]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n2]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 5&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;         <span class="stringliteral">&quot;mov %[n1]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;        <span class="stringliteral">&quot;mov  %[n2]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n1]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 4&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;         <span class="stringliteral">&quot;mov %[n2]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;        <span class="stringliteral">&quot;mov  %[n1]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n2]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 3&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;         <span class="stringliteral">&quot;mov %[n1]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;        <span class="stringliteral">&quot;mov  %[n2]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n1]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 2&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;         <span class="stringliteral">&quot;mov %[n2]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        <span class="stringliteral">&quot;mov  %[n1]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n2]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;         <span class="stringliteral">&quot;mov %[n1]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;        <span class="stringliteral">&quot;mov  %[n2]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n1]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 0&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;         <span class="stringliteral">&quot;mov %[n2]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;        <span class="stringliteral">&quot;sbiw %[count], 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;        <span class="stringliteral">&quot;mov  %[n1]   , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[n2]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;        <span class="stringliteral">&quot;ld   %[byte] , %a[ptr]+&quot;</span> <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;         <span class="stringliteral">&quot;mov %[n1]   , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        <span class="stringliteral">&quot;brne headB&quot;</span>              <span class="stringliteral">&quot;\n&quot;</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;      : [byte] <span class="stringliteral">&quot;+r&quot;</span> (b), [n1] <span class="stringliteral">&quot;+r&quot;</span> (n1), [n2] <span class="stringliteral">&quot;+r&quot;</span> (n2), [count] <span class="stringliteral">&quot;+w&quot;</span> (i)</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;      : [port] <span class="stringliteral">&quot;I&quot;</span> (_SFR_IO_ADDR(PORTB)), [ptr] <span class="stringliteral">&quot;e&quot;</span> (ptr), [hi] <span class="stringliteral">&quot;r&quot;</span> (hi),</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        [lo] <span class="stringliteral">&quot;r&quot;</span> (lo));</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;<span class="preprocessor">#ifdef PORTD</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="preprocessor"></span>    }    <span class="comment">// endif PORTB</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;<span class="preprocessor"></span>  } <span class="keywordflow">else</span> { <span class="comment">// end 800 KHz, do 400 KHz</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    <span class="comment">// Timing is more relaxed; unrolling the inner loop for each bit is</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    <span class="comment">// not necessary.  Still using the peculiar RJMPs as 2X NOPs, not out</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="comment">// of need but just to trim the code size down a little.</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="comment">// This 400-KHz-datastream-on-8-MHz-CPU code is not quite identical</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    <span class="comment">// to the 800-on-16 code later -- the hi/lo timing between WS2811 and</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <span class="comment">// WS2812 is not simply a 2:1 scale!</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    <span class="comment">// 20 inst. clocks per bit: HHHHxxxxxxLLLLLLLLLL</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    <span class="comment">// ST instructions:         ^   ^     ^          (T=0,4,10)</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    <span class="keyword">volatile</span> uint8_t next, bit;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    hi   = *port |  pinMask;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    lo   = *port &amp; ~pinMask;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    next = lo;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    bit  = 8;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;     <span class="stringliteral">&quot;head20:&quot;</span>                  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Clk  Pseudocode    (T =  0)</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = hi     (T =  2)</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;      <span class="stringliteral">&quot;sbrc %[byte] , 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 128)</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;       <span class="stringliteral">&quot;mov  %[next], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   next = hi    (T =  4)</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[next]&quot;</span>  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = next   (T =  6)</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;      <span class="stringliteral">&quot;mov  %[next] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    next = lo     (T =  7)</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;      <span class="stringliteral">&quot;dec  %[bit]&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    bit--         (T =  8)</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;      <span class="stringliteral">&quot;breq nextbyte20&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(bit == 0)</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;      <span class="stringliteral">&quot;rol  %[byte]&quot;</span>            <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    b &lt;&lt;= 1       (T = 10)</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = lo     (T = 12)</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 14)</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 16)</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 18)</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;      <span class="stringliteral">&quot;rjmp head20&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    -&gt; head20 (next bit out)</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;     <span class="stringliteral">&quot;nextbyte20:&quot;</span>              <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">//                    (T = 10)</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = lo     (T = 12)</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;      <span class="stringliteral">&quot;nop&quot;</span>                     <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    nop           (T = 13)</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;      <span class="stringliteral">&quot;ldi  %[bit]  , 8&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    bit = 8       (T = 14)</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;      <span class="stringliteral">&quot;ld   %[byte] , %a[ptr]+&quot;</span> <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    b = *ptr++    (T = 16)</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;      <span class="stringliteral">&quot;sbiw %[count], 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    i--           (T = 18)</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;      <span class="stringliteral">&quot;brne head20&quot;</span>             <span class="stringliteral">&quot;\n&quot;</span>   <span class="comment">// 2    if(i != 0) -&gt; (next byte)</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;      : [port]  <span class="stringliteral">&quot;+e&quot;</span> (port),</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;        [byte]  <span class="stringliteral">&quot;+r&quot;</span> (b),</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;        [bit]   <span class="stringliteral">&quot;+r&quot;</span> (bit),</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        [next]  <span class="stringliteral">&quot;+r&quot;</span> (next),</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        [count] <span class="stringliteral">&quot;+w&quot;</span> (i)</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;      : [hi]    <span class="stringliteral">&quot;r&quot;</span> (hi),</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;        [lo]    <span class="stringliteral">&quot;r&quot;</span> (lo),</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;        [ptr]   <span class="stringliteral">&quot;e&quot;</span> (ptr));</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;  }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="preprocessor">#endif // NEO_KHZ400</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;<span class="comment">// 12 MHz(ish) AVR --------------------------------------------------------</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<span class="preprocessor">#elif (F_CPU &gt;= 11100000UL) &amp;&amp; (F_CPU &lt;= 14300000UL)</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400 // 800 KHz check needed only if 400 KHz support enabled</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="preprocessor"></span>  <span class="keywordflow">if</span>(is800KHz) {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;    <span class="comment">// In the 12 MHz case, an optimized 800 KHz datastream (no dead time</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    <span class="comment">// between bytes) requires a PORT-specific loop similar to the 8 MHz</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    <span class="comment">// code (but a little more relaxed in this case).</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    <span class="comment">// 15 instruction clocks per bit: HHHHxxxxxxLLLLL</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    <span class="comment">// OUT instructions:              ^   ^     ^     (T=0,4,10)</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    <span class="keyword">volatile</span> uint8_t next;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;<span class="preprocessor">#ifdef PORTD</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    <span class="keywordflow">if</span>(port == &amp;PORTD) {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;      hi   = PORTD |  pinMask;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;      lo   = PORTD &amp; ~pinMask;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;      next = lo;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;      <span class="keywordflow">if</span>(b &amp; 0x80) next = hi;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;      <span class="comment">// Don&#39;t &quot;optimize&quot; the OUT calls into the bitTime subroutine;</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;      <span class="comment">// we&#39;re exploiting the RCALL and RET as 3- and 4-cycle NOPs!</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;      <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;       <span class="stringliteral">&quot;headD:&quot;</span>                   <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">//        (T =  0)</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">//        (T =  1)</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeD&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Bit 7  (T = 15)</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeD&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Bit 6</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeD&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Bit 5</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeD&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Bit 4</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeD&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Bit 3</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeD&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Bit 2</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeD&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Bit 1</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        <span class="comment">// Bit 0:</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = hi    (T =  1)</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop      (T =  3)</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;        <span class="stringliteral">&quot;ld   %[byte] , %a[ptr]+&quot;</span> <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    b = *ptr++   (T =  5)</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[next]&quot;</span>  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = next  (T =  6)</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;        <span class="stringliteral">&quot;mov  %[next] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    next = lo    (T =  7)</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x80) (T =  8)</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;         <span class="stringliteral">&quot;mov %[next] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1    next = hi  (T =  9)</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;        <span class="stringliteral">&quot;nop&quot;</span>                     <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1                 (T = 10)</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo    (T = 11)</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;        <span class="stringliteral">&quot;sbiw %[count], 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    i--          (T = 13)</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        <span class="stringliteral">&quot;brne headD&quot;</span>              <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    if(i != 0) -&gt; (next byte)</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;         <span class="stringliteral">&quot;rjmp doneD&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        <span class="stringliteral">&quot;bitTimeD:&quot;</span>               <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">//      nop nop nop     (T =  4)</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;         <span class="stringliteral">&quot;out  %[port], %[next]&quot;</span>  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = next     (T =  5)</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;         <span class="stringliteral">&quot;mov  %[next], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    next = lo       (T =  6)</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;         <span class="stringliteral">&quot;rol  %[byte]&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    b &lt;&lt;= 1         (T =  7)</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;         <span class="stringliteral">&quot;sbrc %[byte], 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 0x80)    (T =  8)</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;          <span class="stringliteral">&quot;mov %[next], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   next = hi      (T =  9)</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;         <span class="stringliteral">&quot;nop&quot;</span>                    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1                    (T = 10)</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;         <span class="stringliteral">&quot;out  %[port], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    PORT = lo       (T = 11)</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;         <span class="stringliteral">&quot;ret&quot;</span>                    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 4    nop nop nop nop (T = 15)</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;         <span class="stringliteral">&quot;doneD:&quot;</span>                 <span class="stringliteral">&quot;\n&quot;</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;        : [byte]  <span class="stringliteral">&quot;+r&quot;</span> (b),</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;          [next]  <span class="stringliteral">&quot;+r&quot;</span> (next),</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;          [count] <span class="stringliteral">&quot;+w&quot;</span> (i)</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;        : [port]   <span class="stringliteral">&quot;I&quot;</span> (_SFR_IO_ADDR(PORTD)),</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;          [ptr]    <span class="stringliteral">&quot;e&quot;</span> (ptr),</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;          [hi]     <span class="stringliteral">&quot;r&quot;</span> (hi),</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;          [lo]     <span class="stringliteral">&quot;r&quot;</span> (lo));</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(port == &amp;PORTB) {</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;<span class="preprocessor">#endif // PORTD</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;      hi   = PORTB |  pinMask;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;      lo   = PORTB &amp; ~pinMask;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;      next = lo;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;      <span class="keywordflow">if</span>(b &amp; 0x80) next = hi;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;      <span class="comment">// Same as above, just set for PORTB &amp; stripped of comments</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;      <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;       <span class="stringliteral">&quot;headB:&quot;</span>                   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeB&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeB&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeB&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeB&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeB&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeB&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;        <span class="stringliteral">&quot;out   %[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;        <span class="stringliteral">&quot;rcall bitTimeB&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;        <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;        <span class="stringliteral">&quot;ld   %[byte] , %a[ptr]+&quot;</span> <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[next]&quot;</span>  <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;        <span class="stringliteral">&quot;mov  %[next] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;        <span class="stringliteral">&quot;sbrc %[byte] , 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;         <span class="stringliteral">&quot;mov %[next] , %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;        <span class="stringliteral">&quot;nop&quot;</span>                     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;        <span class="stringliteral">&quot;out  %[port] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;        <span class="stringliteral">&quot;sbiw %[count], 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;        <span class="stringliteral">&quot;brne headB&quot;</span>              <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;         <span class="stringliteral">&quot;rjmp doneB&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;        <span class="stringliteral">&quot;bitTimeB:&quot;</span>               <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;         <span class="stringliteral">&quot;out  %[port], %[next]&quot;</span>  <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;         <span class="stringliteral">&quot;mov  %[next], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;         <span class="stringliteral">&quot;rol  %[byte]&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;         <span class="stringliteral">&quot;sbrc %[byte], 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;          <span class="stringliteral">&quot;mov %[next], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;         <span class="stringliteral">&quot;nop&quot;</span>                    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;         <span class="stringliteral">&quot;out  %[port], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;         <span class="stringliteral">&quot;ret&quot;</span>                    <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;         <span class="stringliteral">&quot;doneB:&quot;</span>                 <span class="stringliteral">&quot;\n&quot;</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;        : [byte] <span class="stringliteral">&quot;+r&quot;</span> (b), [next] <span class="stringliteral">&quot;+r&quot;</span> (next), [count] <span class="stringliteral">&quot;+w&quot;</span> (i)</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;        : [port] <span class="stringliteral">&quot;I&quot;</span> (_SFR_IO_ADDR(PORTB)), [ptr] <span class="stringliteral">&quot;e&quot;</span> (ptr), [hi] <span class="stringliteral">&quot;r&quot;</span> (hi),</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;          [lo] <span class="stringliteral">&quot;r&quot;</span> (lo));</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="preprocessor">#ifdef PORTD</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;<span class="preprocessor"></span>  } <span class="keywordflow">else</span> { <span class="comment">// 400 KHz</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <span class="comment">// 30 instruction clocks per bit: HHHHHHxxxxxxxxxLLLLLLLLLLLLLLL</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <span class="comment">// ST instructions:               ^     ^        ^    (T=0,6,15)</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    <span class="keyword">volatile</span> uint8_t next, bit;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    hi   = *port |  pinMask;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    lo   = *port &amp; ~pinMask;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    next = lo;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    bit  = 8;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;     <span class="stringliteral">&quot;head30:&quot;</span>                  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Clk  Pseudocode    (T =  0)</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = hi     (T =  2)</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;      <span class="stringliteral">&quot;sbrc %[byte] , 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 128)</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;       <span class="stringliteral">&quot;mov  %[next], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   next = hi    (T =  4)</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T =  6)</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[next]&quot;</span>  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = next   (T =  8)</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 10)</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 12)</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 14)</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;      <span class="stringliteral">&quot;nop&quot;</span>                     <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    nop           (T = 15)</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = lo     (T = 17)</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 19)</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;      <span class="stringliteral">&quot;dec  %[bit]&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    bit--         (T = 20)</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;      <span class="stringliteral">&quot;breq nextbyte30&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(bit == 0)</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;      <span class="stringliteral">&quot;rol  %[byte]&quot;</span>            <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    b &lt;&lt;= 1       (T = 22)</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 24)</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 26)</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 28)</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;      <span class="stringliteral">&quot;rjmp head30&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    -&gt; head30 (next bit out)</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;     <span class="stringliteral">&quot;nextbyte30:&quot;</span>              <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">//                    (T = 22)</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;      <span class="stringliteral">&quot;nop&quot;</span>                     <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    nop           (T = 23)</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;      <span class="stringliteral">&quot;ldi  %[bit]  , 8&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    bit = 8       (T = 24)</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;      <span class="stringliteral">&quot;ld   %[byte] , %a[ptr]+&quot;</span> <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    b = *ptr++    (T = 26)</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;      <span class="stringliteral">&quot;sbiw %[count], 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    i--           (T = 28)</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;      <span class="stringliteral">&quot;brne head30&quot;</span>             <span class="stringliteral">&quot;\n&quot;</span>   <span class="comment">// 1-2  if(i != 0) -&gt; (next byte)</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;      : [port]  <span class="stringliteral">&quot;+e&quot;</span> (port),</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;        [byte]  <span class="stringliteral">&quot;+r&quot;</span> (b),</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;        [bit]   <span class="stringliteral">&quot;+r&quot;</span> (bit),</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;        [next]  <span class="stringliteral">&quot;+r&quot;</span> (next),</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;        [count] <span class="stringliteral">&quot;+w&quot;</span> (i)</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;      : [hi]     <span class="stringliteral">&quot;r&quot;</span> (hi),</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;        [lo]     <span class="stringliteral">&quot;r&quot;</span> (lo),</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;        [ptr]    <span class="stringliteral">&quot;e&quot;</span> (ptr));</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;  }</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;<span class="preprocessor">#endif // NEO_KHZ400</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;<span class="comment">// 16 MHz(ish) AVR --------------------------------------------------------</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;<span class="preprocessor">#elif (F_CPU &gt;= 15400000UL) &amp;&amp; (F_CPU &lt;= 19000000L)</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400 // 800 KHz check needed only if 400 KHz support enabled</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;<span class="preprocessor"></span>  <span class="keywordflow">if</span>(is800KHz) {</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="comment">// WS2811 and WS2812 have different hi/lo duty cycles; this is</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    <span class="comment">// similar but NOT an exact copy of the prior 400-on-8 code.</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;    <span class="comment">// 20 inst. clocks per bit: HHHHHxxxxxxxxLLLLLLL</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    <span class="comment">// ST instructions:         ^   ^        ^       (T=0,5,13)</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="keyword">volatile</span> uint8_t next, bit;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    hi   = *port |  pinMask;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    lo   = *port &amp; ~pinMask;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    next = lo;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    bit  = 8;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;     <span class="stringliteral">&quot;head20:&quot;</span>                   <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Clk  Pseudocode    (T =  0)</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;      <span class="stringliteral">&quot;st   %a[port],  %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = hi     (T =  2)</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;      <span class="stringliteral">&quot;sbrc %[byte],  7&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 128)</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;       <span class="stringliteral">&quot;mov  %[next], %[hi]&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   next = hi    (T =  4)</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;      <span class="stringliteral">&quot;dec  %[bit]&quot;</span>              <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    bit--         (T =  5)</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;      <span class="stringliteral">&quot;st   %a[port],  %[next]&quot;</span>  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = next   (T =  7)</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;      <span class="stringliteral">&quot;mov  %[next] ,  %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    next = lo     (T =  8)</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;      <span class="stringliteral">&quot;breq nextbyte20&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(bit == 0) (from dec above)</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;      <span class="stringliteral">&quot;rol  %[byte]&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    b &lt;&lt;= 1       (T = 10)</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                 <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 12)</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;      <span class="stringliteral">&quot;nop&quot;</span>                      <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    nop           (T = 13)</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;      <span class="stringliteral">&quot;st   %a[port],  %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = lo     (T = 15)</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;      <span class="stringliteral">&quot;nop&quot;</span>                      <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    nop           (T = 16)</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                 <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 18)</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;      <span class="stringliteral">&quot;rjmp head20&quot;</span>              <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    -&gt; head20 (next bit out)</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;     <span class="stringliteral">&quot;nextbyte20:&quot;</span>               <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">//                    (T = 10)</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;      <span class="stringliteral">&quot;ldi  %[bit]  ,  8&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    bit = 8       (T = 11)</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;      <span class="stringliteral">&quot;ld   %[byte] ,  %a[ptr]+&quot;</span> <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    b = *ptr++    (T = 13)</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[lo]&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = lo     (T = 15)</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;      <span class="stringliteral">&quot;nop&quot;</span>                      <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    nop           (T = 16)</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;      <span class="stringliteral">&quot;sbiw %[count], 1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    i--           (T = 18)</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;       <span class="stringliteral">&quot;brne head20&quot;</span>             <span class="stringliteral">&quot;\n&quot;</span>   <span class="comment">// 2    if(i != 0) -&gt; (next byte)</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;      : [port]  <span class="stringliteral">&quot;+e&quot;</span> (port),</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;        [byte]  <span class="stringliteral">&quot;+r&quot;</span> (b),</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;        [bit]   <span class="stringliteral">&quot;+r&quot;</span> (bit),</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;        [next]  <span class="stringliteral">&quot;+r&quot;</span> (next),</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;        [count] <span class="stringliteral">&quot;+w&quot;</span> (i)</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;      : [ptr]    <span class="stringliteral">&quot;e&quot;</span> (ptr),</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        [hi]     <span class="stringliteral">&quot;r&quot;</span> (hi),</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        [lo]     <span class="stringliteral">&quot;r&quot;</span> (lo));</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="preprocessor"></span>  } <span class="keywordflow">else</span> { <span class="comment">// 400 KHz</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;    <span class="comment">// The 400 KHz clock on 16 MHz MCU is the most &#39;relaxed&#39; version.</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    <span class="comment">// 40 inst. clocks per bit: HHHHHHHHxxxxxxxxxxxxLLLLLLLLLLLLLLLLLLLL</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    <span class="comment">// ST instructions:         ^       ^           ^         (T=0,8,20)</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    <span class="keyword">volatile</span> uint8_t next, bit;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;    hi   = *port |  pinMask;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;    lo   = *port &amp; ~pinMask;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;    next = lo;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    bit  = 8;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;     <span class="stringliteral">&quot;head40:&quot;</span>                  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// Clk  Pseudocode    (T =  0)</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[hi]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = hi     (T =  2)</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;      <span class="stringliteral">&quot;sbrc %[byte] , 7&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(b &amp; 128)</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;       <span class="stringliteral">&quot;mov  %[next] , %[hi]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 0-1   next = hi    (T =  4)</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T =  6)</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T =  8)</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[next]&quot;</span>  <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = next   (T = 10)</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 12)</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 14)</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 16)</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 18)</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 20)</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = lo     (T = 22)</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;      <span class="stringliteral">&quot;nop&quot;</span>                     <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    nop           (T = 23)</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;      <span class="stringliteral">&quot;mov  %[next] , %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    next = lo     (T = 24)</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;      <span class="stringliteral">&quot;dec  %[bit]&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    bit--         (T = 25)</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;      <span class="stringliteral">&quot;breq nextbyte40&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1-2  if(bit == 0)</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;      <span class="stringliteral">&quot;rol  %[byte]&quot;</span>            <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    b &lt;&lt;= 1       (T = 27)</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;      <span class="stringliteral">&quot;nop&quot;</span>                     <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    nop           (T = 28)</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 30)</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 32)</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 34)</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 36)</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 38)</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;      <span class="stringliteral">&quot;rjmp head40&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    -&gt; head40 (next bit out)</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;     <span class="stringliteral">&quot;nextbyte40:&quot;</span>              <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">//                    (T = 27)</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;      <span class="stringliteral">&quot;ldi  %[bit]  , 8&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 1    bit = 8       (T = 28)</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;      <span class="stringliteral">&quot;ld   %[byte] , %a[ptr]+&quot;</span> <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    b = *ptr++    (T = 30)</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 32)</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;      <span class="stringliteral">&quot;st   %a[port], %[lo]&quot;</span>    <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    PORT = lo     (T = 34)</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;      <span class="stringliteral">&quot;rjmp .+0&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    nop nop       (T = 36)</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;      <span class="stringliteral">&quot;sbiw %[count], 1&quot;</span>        <span class="stringliteral">&quot;\n\t&quot;</span> <span class="comment">// 2    i--           (T = 38)</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;      <span class="stringliteral">&quot;brne head40&quot;</span>             <span class="stringliteral">&quot;\n&quot;</span>   <span class="comment">// 1-2  if(i != 0) -&gt; (next byte)</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;      : [port]  <span class="stringliteral">&quot;+e&quot;</span> (port),</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;        [byte]  <span class="stringliteral">&quot;+r&quot;</span> (b),</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;        [bit]   <span class="stringliteral">&quot;+r&quot;</span> (bit),</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;        [next]  <span class="stringliteral">&quot;+r&quot;</span> (next),</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;        [count] <span class="stringliteral">&quot;+w&quot;</span> (i)</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;      : [ptr]    <span class="stringliteral">&quot;e&quot;</span> (ptr),</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;        [hi]     <span class="stringliteral">&quot;r&quot;</span> (hi),</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;        [lo]     <span class="stringliteral">&quot;r&quot;</span> (lo));</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;  }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;<span class="preprocessor">#endif // NEO_KHZ400</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #error &quot;CPU SPEED NOT SUPPORTED&quot;</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif // end F_CPU ifdefs on __AVR__</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;<span class="comment">// END AVR ----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;<span class="preprocessor">#elif defined(__arm__)</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;<span class="comment">// ARM MCUs -- Teensy 3.0, 3.1, LC, Arduino Due ---------------------------</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;<span class="preprocessor">#if defined(__MK20DX128__) || defined(__MK20DX256__) // Teensy 3.0 &amp; 3.1</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CYCLES_800_T0H  (F_CPU / 4000000)</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CYCLES_800_T1H  (F_CPU / 1250000)</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CYCLES_800      (F_CPU /  800000)</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CYCLES_400_T0H  (F_CPU / 2000000)</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CYCLES_400_T1H  (F_CPU /  833333)</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define CYCLES_400      (F_CPU /  400000)</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;  uint8_t          *p   = pixels,</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;                   *end = p + numBytes, pix, mask;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;  <span class="keyword">volatile</span> uint8_t *<span class="keyword">set</span> = portSetRegister(pin),</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;                   *clr = portClearRegister(pin);</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;  uint32_t          cyc;</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;  ARM_DEMCR    |= ARM_DEMCR_TRCENA;</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;  ARM_DWT_CTRL |= ARM_DWT_CTRL_CYCCNTENA;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400 // 800 KHz check needed only if 400 KHz support enabled</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;<span class="preprocessor"></span>  <span class="keywordflow">if</span>(is800KHz) {</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;<span class="preprocessor"></span>    cyc = ARM_DWT_CYCCNT + CYCLES_800;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <span class="keywordflow">while</span>(p &lt; end) {</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;      pix = *p++;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;      <span class="keywordflow">for</span>(mask = 0x80; mask; mask &gt;&gt;= 1) {</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;        <span class="keywordflow">while</span>(ARM_DWT_CYCCNT - cyc &lt; CYCLES_800);</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;        cyc  = ARM_DWT_CYCCNT;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;        *<span class="keyword">set</span> = 1;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;        <span class="keywordflow">if</span>(pix &amp; mask) {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;          <span class="keywordflow">while</span>(ARM_DWT_CYCCNT - cyc &lt; CYCLES_800_T1H);</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;          <span class="keywordflow">while</span>(ARM_DWT_CYCCNT - cyc &lt; CYCLES_800_T0H);</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;        }</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;        *clr = 1;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;      }</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    }</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    <span class="keywordflow">while</span>(ARM_DWT_CYCCNT - cyc &lt; CYCLES_800);</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;<span class="preprocessor"></span>  } <span class="keywordflow">else</span> { <span class="comment">// 400 kHz bitstream</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    cyc = ARM_DWT_CYCCNT + CYCLES_400;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    <span class="keywordflow">while</span>(p &lt; end) {</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;      pix = *p++;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;      <span class="keywordflow">for</span>(mask = 0x80; mask; mask &gt;&gt;= 1) {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;        <span class="keywordflow">while</span>(ARM_DWT_CYCCNT - cyc &lt; CYCLES_400);</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;        cyc  = ARM_DWT_CYCCNT;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;        *<span class="keyword">set</span> = 1;</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;        <span class="keywordflow">if</span>(pix &amp; mask) {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;          <span class="keywordflow">while</span>(ARM_DWT_CYCCNT - cyc &lt; CYCLES_400_T1H);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;          <span class="keywordflow">while</span>(ARM_DWT_CYCCNT - cyc &lt; CYCLES_400_T0H);</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;        }</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;        *clr = 1;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;      }</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    }</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    <span class="keywordflow">while</span>(ARM_DWT_CYCCNT - cyc &lt; CYCLES_400);</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;  }</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;<span class="preprocessor">#endif // NEO_KHZ400</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;<span class="preprocessor">#elif defined(__MKL26Z64__) // Teensy-LC</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;<span class="preprocessor">#if F_CPU == 48000000</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;<span class="preprocessor"></span>  uint8_t          *p   = pixels,</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;           pix, count, dly,</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;                   bitmask = digitalPinToBitMask(pin);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;  <span class="keyword">volatile</span> uint8_t *reg = portSetRegister(pin);</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;  uint32_t         num = numBytes;</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;  <span class="keyword">asm</span> <span class="keyword">volatile</span>(</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    <span class="stringliteral">&quot;L%=_begin:&quot;</span>                <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    <span class="stringliteral">&quot;ldrb   %[pix], [%[p], #0]&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="stringliteral">&quot;lsl    %[pix], #24&quot;</span>            <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    <span class="stringliteral">&quot;movs   %[count], #7&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    <span class="stringliteral">&quot;L%=_loop:&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;    <span class="stringliteral">&quot;lsl    %[pix], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;    <span class="stringliteral">&quot;bcs    L%=_loop_one&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;    <span class="stringliteral">&quot;L%=_loop_zero:&quot;</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    <span class="stringliteral">&quot;strb   %[bitmask], [%[reg], #0]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    <span class="stringliteral">&quot;movs   %[dly], #4&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;    <span class="stringliteral">&quot;L%=_loop_delay_T0H:&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    <span class="stringliteral">&quot;sub    %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    <span class="stringliteral">&quot;bne    L%=_loop_delay_T0H&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    <span class="stringliteral">&quot;strb   %[bitmask], [%[reg], #4]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    <span class="stringliteral">&quot;movs   %[dly], #13&quot;</span>            <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    <span class="stringliteral">&quot;L%=_loop_delay_T0L:&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;    <span class="stringliteral">&quot;sub    %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    <span class="stringliteral">&quot;bne    L%=_loop_delay_T0L&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;    <span class="stringliteral">&quot;b  L%=_next&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    <span class="stringliteral">&quot;L%=_loop_one:&quot;</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;    <span class="stringliteral">&quot;strb   %[bitmask], [%[reg], #0]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;    <span class="stringliteral">&quot;movs   %[dly], #13&quot;</span>            <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;    <span class="stringliteral">&quot;L%=_loop_delay_T1H:&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    <span class="stringliteral">&quot;sub    %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    <span class="stringliteral">&quot;bne    L%=_loop_delay_T1H&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    <span class="stringliteral">&quot;strb   %[bitmask], [%[reg], #4]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    <span class="stringliteral">&quot;movs   %[dly], #4&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <span class="stringliteral">&quot;L%=_loop_delay_T1L:&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    <span class="stringliteral">&quot;sub    %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    <span class="stringliteral">&quot;bne    L%=_loop_delay_T1L&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;    <span class="stringliteral">&quot;nop&quot;</span>                   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;    <span class="stringliteral">&quot;L%=_next:&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    <span class="stringliteral">&quot;sub    %[count], #1&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;    <span class="stringliteral">&quot;bne    L%=_loop&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    <span class="stringliteral">&quot;lsl    %[pix], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    <span class="stringliteral">&quot;bcs    L%=_last_one&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;    <span class="stringliteral">&quot;L%=_last_zero:&quot;</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;    <span class="stringliteral">&quot;strb   %[bitmask], [%[reg], #0]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    <span class="stringliteral">&quot;movs   %[dly], #4&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;    <span class="stringliteral">&quot;L%=_last_delay_T0H:&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;    <span class="stringliteral">&quot;sub    %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    <span class="stringliteral">&quot;bne    L%=_last_delay_T0H&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;    <span class="stringliteral">&quot;strb   %[bitmask], [%[reg], #4]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;    <span class="stringliteral">&quot;movs   %[dly], #10&quot;</span>            <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    <span class="stringliteral">&quot;L%=_last_delay_T0L:&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;    <span class="stringliteral">&quot;sub    %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;    <span class="stringliteral">&quot;bne    L%=_last_delay_T0L&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    <span class="stringliteral">&quot;b  L%=_repeat&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    <span class="stringliteral">&quot;L%=_last_one:&quot;</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    <span class="stringliteral">&quot;strb   %[bitmask], [%[reg], #0]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    <span class="stringliteral">&quot;movs   %[dly], #13&quot;</span>            <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;    <span class="stringliteral">&quot;L%=_last_delay_T1H:&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    <span class="stringliteral">&quot;sub    %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;    <span class="stringliteral">&quot;bne    L%=_last_delay_T1H&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    <span class="stringliteral">&quot;strb   %[bitmask], [%[reg], #4]&quot;</span>   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    <span class="stringliteral">&quot;movs   %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    <span class="stringliteral">&quot;L%=_last_delay_T1L:&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;    <span class="stringliteral">&quot;sub    %[dly], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;    <span class="stringliteral">&quot;bne    L%=_last_delay_T1L&quot;</span>     <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    <span class="stringliteral">&quot;nop&quot;</span>                   <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    <span class="stringliteral">&quot;L%=_repeat:&quot;</span>               <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    <span class="stringliteral">&quot;add    %[p], #1&quot;</span>           <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    <span class="stringliteral">&quot;sub    %[num], #1&quot;</span>         <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;    <span class="stringliteral">&quot;bne    L%=_begin&quot;</span>          <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    <span class="stringliteral">&quot;L%=_done:&quot;</span>             <span class="stringliteral">&quot;\n\t&quot;</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    : [p] <span class="stringliteral">&quot;+r&quot;</span> (p),</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;      [pix] <span class="stringliteral">&quot;=&amp;r&quot;</span> (pix),</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;      [count] <span class="stringliteral">&quot;=&amp;r&quot;</span> (count),</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;      [dly] <span class="stringliteral">&quot;=&amp;r&quot;</span> (dly),</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;      [num] <span class="stringliteral">&quot;+r&quot;</span> (num)</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    : [bitmask] <span class="stringliteral">&quot;r&quot;</span> (bitmask),</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;      [reg] <span class="stringliteral">&quot;r&quot;</span> (reg)</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;  );</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#error &quot;Sorry, only 48 MHz is supported, please set Tools &gt; CPU Speed to 48 MHz&quot;</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif // F_CPU == 48000000</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;<span class="preprocessor">#elif defined(__SAMD21G18A__) // Arduino Zero</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;  <span class="comment">// Tried this with a timer/counter, couldn&#39;t quite get adequate</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;  <span class="comment">// resolution.  So yay, you get a load of goofball NOPs...</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;  uint8_t  *ptr, *end, p, bitMask, portNum;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;  uint32_t  pinMask;</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;  portNum =  g_APinDescription[pin].ulPort;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;  pinMask =  1ul &lt;&lt; g_APinDescription[pin].ulPin;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;  ptr     =  pixels;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;  end     =  ptr + numBytes;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;  p       = *ptr++;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;  bitMask =  0x80;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;  <span class="keyword">volatile</span> uint32_t *<span class="keyword">set</span> = &amp;(PORT-&gt;Group[portNum].OUTSET.reg),</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;                    *clr = &amp;(PORT-&gt;Group[portNum].OUTCLR.reg);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400 // 800 KHz check needed only if 400 KHz support enabled</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;<span class="preprocessor"></span>  <span class="keywordflow">if</span>(is800KHz) {</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;<span class="preprocessor"></span>    <span class="keywordflow">for</span>(;;) {</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;      *<span class="keyword">set</span> = pinMask;</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;      <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;      <span class="keywordflow">if</span>(p &amp; bitMask) {</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;        <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;        *clr = pinMask;</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;        *clr = pinMask;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;        <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;      }</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;      <span class="keywordflow">if</span>(bitMask &gt;&gt;= 1) {</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;        <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;        <span class="keywordflow">if</span>(ptr &gt;= end) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;        p       = *ptr++;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;        bitMask = 0x80;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;      }</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    }</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;<span class="preprocessor"></span>  } <span class="keywordflow">else</span> { <span class="comment">// 400 KHz bitstream</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;    <span class="keywordflow">for</span>(;;) {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;      *<span class="keyword">set</span> = pinMask;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;      <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;      <span class="keywordflow">if</span>(p &amp; bitMask) {</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;        <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;        *clr = pinMask;</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;        *clr = pinMask;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;        <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;            <span class="stringliteral">&quot;nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;      }</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;      <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;          <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;          <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;          <span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;      <span class="keywordflow">if</span>(bitMask &gt;&gt;= 1) {</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;        <span class="keyword">asm</span>(<span class="stringliteral">&quot;nop; nop; nop; nop; nop; nop; nop;&quot;</span>);</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;        <span class="keywordflow">if</span>(ptr &gt;= end) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;        p       = *ptr++;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;        bitMask = 0x80;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;      }</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    }</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;  }</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;<span class="preprocessor">#else // Other ARM architecture -- Presumed Arduino Due</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;<span class="preprocessor">  #define SCALE      VARIANT_MCK / 2UL / 1000000UL</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;<span class="preprocessor"></span><span class="preprocessor">  #define INST       (2UL * F_CPU / VARIANT_MCK)</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;<span class="preprocessor"></span><span class="preprocessor">  #define TIME_800_0 ((int)(0.40 * SCALE + 0.5) - (5 * INST))</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;<span class="preprocessor"></span><span class="preprocessor">  #define TIME_800_1 ((int)(0.80 * SCALE + 0.5) - (5 * INST))</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;<span class="preprocessor"></span><span class="preprocessor">  #define PERIOD_800 ((int)(1.25 * SCALE + 0.5) - (5 * INST))</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;<span class="preprocessor"></span><span class="preprocessor">  #define TIME_400_0 ((int)(0.50 * SCALE + 0.5) - (5 * INST))</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;<span class="preprocessor"></span><span class="preprocessor">  #define TIME_400_1 ((int)(1.20 * SCALE + 0.5) - (5 * INST))</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;<span class="preprocessor"></span><span class="preprocessor">  #define PERIOD_400 ((int)(2.50 * SCALE + 0.5) - (5 * INST))</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;  <span class="keywordtype">int</span>             pinMask, time0, time1, period, t;</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;  Pio            *port;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;  <span class="keyword">volatile</span> WoReg *portSet, *portClear, *timeValue, *timeReset;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;  uint8_t        *p, *end, pix, mask;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;  pmc_set_writeprotect(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;  pmc_enable_periph_clk((uint32_t)TC3_IRQn);</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;  TC_Configure(TC1, 0,</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;    TC_CMR_WAVE | TC_CMR_WAVSEL_UP | TC_CMR_TCCLKS_TIMER_CLOCK1);</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;  TC_Start(TC1, 0);</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;  pinMask   = g_APinDescription[pin].ulPin; <span class="comment">// Don&#39;t &#39;optimize&#39; these into</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;  port      = g_APinDescription[pin].pPort; <span class="comment">// declarations above.  Want to</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;  portSet   = &amp;(port-&gt;PIO_SODR);            <span class="comment">// burn a few cycles after</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;  portClear = &amp;(port-&gt;PIO_CODR);            <span class="comment">// starting timer to minimize</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;  timeValue = &amp;(TC1-&gt;TC_CHANNEL[0].TC_CV);  <span class="comment">// the initial &#39;while&#39;.</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;  timeReset = &amp;(TC1-&gt;TC_CHANNEL[0].TC_CCR);</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;  p         =  pixels;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;  end       =  p + numBytes;</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;  pix       = *p++;</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;  mask      = 0x80;</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400 // 800 KHz check needed only if 400 KHz support enabled</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;<span class="preprocessor"></span>  <span class="keywordflow">if</span>(is800KHz) {</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;<span class="preprocessor"></span>    time0  = TIME_800_0;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    time1  = TIME_800_1;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    period = PERIOD_800;</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;<span class="preprocessor"></span>  } <span class="keywordflow">else</span> { <span class="comment">// 400 KHz bitstream</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    time0  = TIME_400_0;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    time1  = TIME_400_1;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    period = PERIOD_400;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;  }</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;  <span class="keywordflow">for</span>(t = time0;; t = time0) {</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;    <span class="keywordflow">if</span>(pix &amp; mask) t = time1;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;    <span class="keywordflow">while</span>(*timeValue &lt; period);</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    *portSet   = pinMask;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;    *timeReset = TC_CCR_CLKEN | TC_CCR_SWTRG;</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    <span class="keywordflow">while</span>(*timeValue &lt; t);</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    *portClear = pinMask;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;    <span class="keywordflow">if</span>(!(mask &gt;&gt;= 1)) {   <span class="comment">// This &#39;inside-out&#39; loop logic utilizes</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;      <span class="keywordflow">if</span>(p &gt;= end) <span class="keywordflow">break</span>; <span class="comment">// idle time to minimize inter-byte delays.</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;      pix = *p++;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;      mask = 0x80;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    }</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;  }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;  <span class="keywordflow">while</span>(*timeValue &lt; period); <span class="comment">// Wait for last bit</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;  TC_Stop(TC1, 0);</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="preprocessor">#endif // end Due</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="comment">// END ARM ----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="preprocessor">#elif defined(ESP8266)</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="comment">// ESP8266 ----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;  <span class="comment">// ESP8266 show() is external to enforce ICACHE_RAM_ATTR execution</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;  espShow(pin, pixels, numBytes, is800KHz);</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;<span class="preprocessor">#endif // ESP8266</span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="comment">// END ARCHITECTURE SELECT ------------------------------------------------</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;  interrupts();</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;  endTime = micros(); <span class="comment">// Save EOD time for latch on next call</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;}</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;<span class="comment">// Set the output pin number</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b"> 1031</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b">Adafruit_NeoPixel::setPin</a>(uint8_t p) {</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;  <span class="keywordflow">if</span>(begun &amp;&amp; (pin &gt;= 0)) pinMode(pin, INPUT);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;  <span class="keywordflow">if</span>(p &gt;= 0) {</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;    pin = p;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;    <span class="keywordflow">if</span>(begun) {</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;      pinMode(p, OUTPUT);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;      digitalWrite(p, LOW);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    }</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="preprocessor">#ifdef __AVR__</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;<span class="preprocessor"></span>    port    = portOutputRegister(digitalPinToPort(p));</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    pinMask = digitalPinToBitMask(p);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;<span class="preprocessor"></span>  }</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;}</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;<span class="comment">// Set pixel color from separate R,G,B components:</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1"> 1047</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1">Adafruit_NeoPixel::setPixelColor</a>(</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; uint16_t n, uint8_t r, uint8_t g, uint8_t b) {</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;  <span class="keywordflow">if</span>(n &lt; numLEDs) {</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;    <span class="keywordflow">if</span>(brightness) { <span class="comment">// See notes in setBrightness()</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;      r = (r * brightness) &gt;&gt; 8;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;      g = (g * brightness) &gt;&gt; 8;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;      b = (b * brightness) &gt;&gt; 8;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;    }</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    uint8_t *p;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;    <span class="keywordflow">if</span>(wOffset == rOffset) { <span class="comment">// Is an RGB-type strip</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;      p = &amp;pixels[n * 3];    <span class="comment">// 3 bytes per pixel</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    } <span class="keywordflow">else</span> {                 <span class="comment">// Is a WRGB-type strip</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;      p = &amp;pixels[n * 4];    <span class="comment">// 4 bytes per pixel</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;      p[wOffset] = 0;        <span class="comment">// But only R,G,B passed -- set W to 0</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;    }</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    p[rOffset] = r;          <span class="comment">// R,G,B always stored</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;    p[gOffset] = g;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    p[bOffset] = b;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;  }</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;}</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="comment">// Set pixel color from &#39;packed&#39; 32-bit RGB color:</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#abbf243cce591dc37be507cf173485bc8"> 1070</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1">Adafruit_NeoPixel::setPixelColor</a>(uint16_t n, uint32_t c) {</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;  <span class="keywordflow">if</span>(n &lt; numLEDs) {</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;    uint8_t *p,</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;      r = (uint8_t)(c &gt;&gt; 16),</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;      g = (uint8_t)(c &gt;&gt;  8),</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;      b = (uint8_t)c;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;    <span class="keywordflow">if</span>(brightness) { <span class="comment">// See notes in setBrightness()</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;      r = (r * brightness) &gt;&gt; 8;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;      g = (g * brightness) &gt;&gt; 8;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;      b = (b * brightness) &gt;&gt; 8;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;    }</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;    <span class="keywordflow">if</span>(wOffset == rOffset) {</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;      p = &amp;pixels[n * 3];</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;      p = &amp;pixels[n * 4];</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;      uint8_t w = (uint8_t)(c &gt;&gt; 24);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;      p[wOffset] = brightness ? ((w * brightness) &gt;&gt; 8) : w;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    }</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    p[rOffset] = r;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    p[gOffset] = g;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;    p[bOffset] = b;</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;  }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;}</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="comment">// Convert separate R,G,B into packed 32-bit RGB color.</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<span class="comment">// Packed format is always RGB, regardless of LED strand color order.</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec"> 1096</a></span>&#160;uint32_t <a class="code" href="class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec">Adafruit_NeoPixel::Color</a>(uint8_t r, uint8_t g, uint8_t b) {</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;  <span class="keywordflow">return</span> ((uint32_t)r &lt;&lt; 16) | ((uint32_t)g &lt;&lt;  8) | b;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;}</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="comment">// Convert separate R,G,B,W into packed 32-bit WRGB color.</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="comment">// Packed format is always WRGB, regardless of LED strand color order.</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a9846704aaabd4e102beba5a5484d5738"> 1102</a></span>&#160;uint32_t <a class="code" href="class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec">Adafruit_NeoPixel::Color</a>(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;  <span class="keywordflow">return</span> ((uint32_t)w &lt;&lt; 24) | ((uint32_t)r &lt;&lt; 16) | ((uint32_t)g &lt;&lt;  8) | b;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;}</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;<span class="comment">// Query color from previously-set pixel (returns packed 32-bit RGB value)</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa"> 1107</a></span>&#160;uint32_t <a class="code" href="class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa">Adafruit_NeoPixel::getPixelColor</a>(uint16_t n)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;  <span class="keywordflow">if</span>(n &gt;= numLEDs) <span class="keywordflow">return</span> 0; <span class="comment">// Out of bounds, return no color.</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;  uint8_t *p;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;  <span class="keywordflow">if</span>(wOffset == rOffset) { <span class="comment">// Is RGB-type device</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    p = &amp;pixels[n * 3];</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;    <span class="keywordflow">if</span>(brightness) {</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;      <span class="comment">// Stored color was decimated by setBrightness().  Returned value</span></div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;      <span class="comment">// attempts to scale back to an approximation of the original 24-bit</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;      <span class="comment">// value used when setting the pixel color, but there will always be</span></div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;      <span class="comment">// some error -- those bits are simply gone.  Issue is most</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;      <span class="comment">// pronounced at low brightness levels.</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;      <span class="keywordflow">return</span> (((uint32_t)(p[rOffset] &lt;&lt; 8) / brightness) &lt;&lt; 16) |</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;             (((uint32_t)(p[gOffset] &lt;&lt; 8) / brightness) &lt;&lt;  8) |</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;             ( (uint32_t)(p[bOffset] &lt;&lt; 8) / brightness       );</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;      <span class="comment">// No brightness adjustment has been made -- return &#39;raw&#39; color</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;      <span class="keywordflow">return</span> ((uint32_t)p[rOffset] &lt;&lt; 16) |</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;             ((uint32_t)p[gOffset] &lt;&lt;  8) |</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;              (uint32_t)p[bOffset];</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;    }</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;  } <span class="keywordflow">else</span> {                 <span class="comment">// Is RGBW-type device</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    p = &amp;pixels[n * 4];</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;    <span class="keywordflow">if</span>(brightness) { <span class="comment">// Return scaled color</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;      <span class="keywordflow">return</span> (((uint32_t)(p[wOffset] &lt;&lt; 8) / brightness) &lt;&lt; 24) |</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;             (((uint32_t)(p[rOffset] &lt;&lt; 8) / brightness) &lt;&lt; 16) |</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;             (((uint32_t)(p[gOffset] &lt;&lt; 8) / brightness) &lt;&lt;  8) |</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;             ( (uint32_t)(p[bOffset] &lt;&lt; 8) / brightness       );</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;    } <span class="keywordflow">else</span> { <span class="comment">// Return raw color</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;      <span class="keywordflow">return</span> ((uint32_t)p[wOffset] &lt;&lt; 24) |</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;             ((uint32_t)p[rOffset] &lt;&lt; 16) |</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;             ((uint32_t)p[gOffset] &lt;&lt;  8) |</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;              (uint32_t)p[bOffset];</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;    }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;  }</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;}</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;<span class="comment">// Returns pointer to pixels[] array.  Pixel data is stored in device-</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;<span class="comment">// native format and is not translated here.  Application will need to be</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;<span class="comment">// aware of specific pixel data format and handle colors appropriately.</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067"> 1148</a></span>&#160;uint8_t *<a class="code" href="class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067">Adafruit_NeoPixel::getPixels</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;  <span class="keywordflow">return</span> pixels;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;}</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#ac893a5c07c41604539022af84665c04b"> 1152</a></span>&#160;uint16_t <a class="code" href="class_adafruit___neo_pixel.html#ac893a5c07c41604539022af84665c04b">Adafruit_NeoPixel::numPixels</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;  <span class="keywordflow">return</span> numLEDs;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;}</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;<span class="comment">// Adjust output brightness; 0=darkest (off), 255=brightest.  This does</span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;<span class="comment">// NOT immediately affect what&#39;s currently displayed on the LEDs.  The</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;<span class="comment">// next call to show() will refresh the LEDs at this level.  However,</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;<span class="comment">// this process is potentially &quot;lossy,&quot; especially when increasing</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;<span class="comment">// brightness.  The tight timing in the WS2811/WS2812 code means there</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;<span class="comment">// aren&#39;t enough free cycles to perform this scaling on the fly as data</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="comment">// is issued.  So we make a pass through the existing color data in RAM</span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="comment">// and scale it (subsequent graphics commands also work at this</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;<span class="comment">// brightness level).  If there&#39;s a significant step up in brightness,</span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="comment">// the limited number of steps (quantization) in the old data will be</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="comment">// quite visible in the re-scaled version.  For a non-destructive</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="comment">// change, you&#39;ll need to re-render the full strip data.  C&#39;est la vie.</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53"> 1168</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53">Adafruit_NeoPixel::setBrightness</a>(uint8_t b) {</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;  <span class="comment">// Stored brightness value is different than what&#39;s passed.</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;  <span class="comment">// This simplifies the actual scaling math later, allowing a fast</span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;  <span class="comment">// 8x8-bit multiply and taking the MSB.  &#39;brightness&#39; is a uint8_t,</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;  <span class="comment">// adding 1 here may (intentionally) roll over...so 0 = max brightness</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;  <span class="comment">// (color values are interpreted literally; no scaling), 1 = min</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;  <span class="comment">// brightness (off), 255 = just below max brightness.</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;  uint8_t newBrightness = b + 1;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;  <span class="keywordflow">if</span>(newBrightness != brightness) { <span class="comment">// Compare against prior value</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;    <span class="comment">// Brightness has changed -- re-scale existing data in RAM</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;    uint8_t  c,</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;            *ptr           = pixels,</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;             oldBrightness = brightness - 1; <span class="comment">// De-wrap old brightness value</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;    uint16_t scale;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;    <span class="keywordflow">if</span>(oldBrightness == 0) scale = 0; <span class="comment">// Avoid /0</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(b == 255) scale = 65535 / oldBrightness;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;    <span class="keywordflow">else</span> scale = (((uint16_t)newBrightness &lt;&lt; 8) - 1) / oldBrightness;</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;    <span class="keywordflow">for</span>(uint16_t i=0; i&lt;numBytes; i++) {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;      c      = *ptr;</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;      *ptr++ = (c * scale) &gt;&gt; 8;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;    }</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;    brightness = newBrightness;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;  }</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;}</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;<span class="comment">//Return the brightness value</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f"> 1194</a></span>&#160;uint8_t <a class="code" href="class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f">Adafruit_NeoPixel::getBrightness</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;  <span class="keywordflow">return</span> brightness - 1;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;}</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#ac8bb3912a3ce86b15842e79d0b421204"> 1198</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_adafruit___neo_pixel.html#ac8bb3912a3ce86b15842e79d0b421204">Adafruit_NeoPixel::clear</a>() {</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;  memset(pixels, 0, numBytes);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;}</div>
+</div><!-- fragment --></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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h.html
new file mode 100644
index 000000000..e2da5f83b
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h.html
@@ -0,0 +1,670 @@
+<!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.h 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_8h.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="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">Adafruit_NeoPixel.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;WProgram.h&gt;</code><br/>
+<code>#include &lt;pins_arduino.h&gt;</code><br/>
+</div>
+<p><a href="_adafruit___neo_pixel_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:aa4f80df5ab240d93359f40956462f758"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#aa4f80df5ab240d93359f40956462f758">NEO_RGB</a>&#160;&#160;&#160;((0 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</td></tr>
+<tr class="separator:aa4f80df5ab240d93359f40956462f758"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d6aaa56c8e2603312cba8dbdf9c5661"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a7d6aaa56c8e2603312cba8dbdf9c5661">NEO_RBG</a>&#160;&#160;&#160;((0 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</td></tr>
+<tr class="separator:a7d6aaa56c8e2603312cba8dbdf9c5661"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a95d0d6b0a1f52bc72d9dcea2b3a48e3f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a95d0d6b0a1f52bc72d9dcea2b3a48e3f">NEO_GRB</a>&#160;&#160;&#160;((1 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</td></tr>
+<tr class="separator:a95d0d6b0a1f52bc72d9dcea2b3a48e3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abca04ce54125372080f2fbf2afdcf027"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#abca04ce54125372080f2fbf2afdcf027">NEO_GBR</a>&#160;&#160;&#160;((2 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</td></tr>
+<tr class="separator:abca04ce54125372080f2fbf2afdcf027"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afde6ec00a4ec8fad0267ae1a6689379e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#afde6ec00a4ec8fad0267ae1a6689379e">NEO_BRG</a>&#160;&#160;&#160;((1 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</td></tr>
+<tr class="separator:afde6ec00a4ec8fad0267ae1a6689379e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9129664a08911b56227dd641116f105f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a9129664a08911b56227dd641116f105f">NEO_BGR</a>&#160;&#160;&#160;((2 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</td></tr>
+<tr class="separator:a9129664a08911b56227dd641116f105f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ee056fd3d7b09538908b35643a2508a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a4ee056fd3d7b09538908b35643a2508a">NEO_WRGB</a>&#160;&#160;&#160;((0 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (3))</td></tr>
+<tr class="separator:a4ee056fd3d7b09538908b35643a2508a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a266a08af576ed4331db48b16bf572d29"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a266a08af576ed4331db48b16bf572d29">NEO_WRBG</a>&#160;&#160;&#160;((0 &lt;&lt; 6) | (1 &lt;&lt; 4) | (3 &lt;&lt; 2) | (2))</td></tr>
+<tr class="separator:a266a08af576ed4331db48b16bf572d29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59561d96a0f8a526ee3448e7b104d8b3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a59561d96a0f8a526ee3448e7b104d8b3">NEO_WGRB</a>&#160;&#160;&#160;((0 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (3))</td></tr>
+<tr class="separator:a59561d96a0f8a526ee3448e7b104d8b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af722c80d41894df25c363b9ebf371b4e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#af722c80d41894df25c363b9ebf371b4e">NEO_WGBR</a>&#160;&#160;&#160;((0 &lt;&lt; 6) | (3 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</td></tr>
+<tr class="separator:af722c80d41894df25c363b9ebf371b4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3eed3aeba511a2478a1ee8c17516732b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a3eed3aeba511a2478a1ee8c17516732b">NEO_WBRG</a>&#160;&#160;&#160;((0 &lt;&lt; 6) | (2 &lt;&lt; 4) | (3 &lt;&lt; 2) | (1))</td></tr>
+<tr class="separator:a3eed3aeba511a2478a1ee8c17516732b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a015eeccbf1bd19907c34d7b39b63bb84"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a015eeccbf1bd19907c34d7b39b63bb84">NEO_WBGR</a>&#160;&#160;&#160;((0 &lt;&lt; 6) | (3 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</td></tr>
+<tr class="separator:a015eeccbf1bd19907c34d7b39b63bb84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a122c6bb3e44525d2f975dcd89b094267"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a122c6bb3e44525d2f975dcd89b094267">NEO_RWGB</a>&#160;&#160;&#160;((1 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (3))</td></tr>
+<tr class="separator:a122c6bb3e44525d2f975dcd89b094267"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9254ebc9367c071457d0321f64c9d5fa"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a9254ebc9367c071457d0321f64c9d5fa">NEO_RWBG</a>&#160;&#160;&#160;((1 &lt;&lt; 6) | (0 &lt;&lt; 4) | (3 &lt;&lt; 2) | (2))</td></tr>
+<tr class="separator:a9254ebc9367c071457d0321f64c9d5fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abcce73b2eafdf1bb331a8f02fba95d10"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#abcce73b2eafdf1bb331a8f02fba95d10">NEO_RGWB</a>&#160;&#160;&#160;((2 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (3))</td></tr>
+<tr class="separator:abcce73b2eafdf1bb331a8f02fba95d10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71f7c6e45f4c63fceca6b5b73c7a7c9d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a71f7c6e45f4c63fceca6b5b73c7a7c9d">NEO_RGBW</a>&#160;&#160;&#160;((3 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</td></tr>
+<tr class="separator:a71f7c6e45f4c63fceca6b5b73c7a7c9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b6b551a990b498bed36aadba4a498d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a7b6b551a990b498bed36aadba4a498d5">NEO_RBWG</a>&#160;&#160;&#160;((2 &lt;&lt; 6) | (0 &lt;&lt; 4) | (3 &lt;&lt; 2) | (1))</td></tr>
+<tr class="separator:a7b6b551a990b498bed36aadba4a498d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a198dc192119c166c544efc3e89fdd1cd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a198dc192119c166c544efc3e89fdd1cd">NEO_RBGW</a>&#160;&#160;&#160;((3 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</td></tr>
+<tr class="separator:a198dc192119c166c544efc3e89fdd1cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa29b3544b4257e851de2e214894d1236"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#aa29b3544b4257e851de2e214894d1236">NEO_GWRB</a>&#160;&#160;&#160;((1 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (3))</td></tr>
+<tr class="separator:aa29b3544b4257e851de2e214894d1236"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaaaa406f36f1c596526579944ca7043d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#aaaaa406f36f1c596526579944ca7043d">NEO_GWBR</a>&#160;&#160;&#160;((1 &lt;&lt; 6) | (3 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</td></tr>
+<tr class="separator:aaaaa406f36f1c596526579944ca7043d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35a185ff488486a74745e9094892558c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a35a185ff488486a74745e9094892558c">NEO_GRWB</a>&#160;&#160;&#160;((2 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (3))</td></tr>
+<tr class="separator:a35a185ff488486a74745e9094892558c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a722066abc60b560235b3b22082c2e68e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a722066abc60b560235b3b22082c2e68e">NEO_GRBW</a>&#160;&#160;&#160;((3 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</td></tr>
+<tr class="separator:a722066abc60b560235b3b22082c2e68e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a20be9abdf372b9c71d9fdacc3e6a9d1a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a20be9abdf372b9c71d9fdacc3e6a9d1a">NEO_GBWR</a>&#160;&#160;&#160;((2 &lt;&lt; 6) | (3 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</td></tr>
+<tr class="separator:a20be9abdf372b9c71d9fdacc3e6a9d1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af60d024b8f8954960e59056c57520080"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#af60d024b8f8954960e59056c57520080">NEO_GBRW</a>&#160;&#160;&#160;((3 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</td></tr>
+<tr class="separator:af60d024b8f8954960e59056c57520080"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf438f131d0fa8a0be6791a553145860"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#aaf438f131d0fa8a0be6791a553145860">NEO_BWRG</a>&#160;&#160;&#160;((1 &lt;&lt; 6) | (2 &lt;&lt; 4) | (3 &lt;&lt; 2) | (0))</td></tr>
+<tr class="separator:aaf438f131d0fa8a0be6791a553145860"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2595b8689ce5bd39634d017620ae57b8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a2595b8689ce5bd39634d017620ae57b8">NEO_BWGR</a>&#160;&#160;&#160;((1 &lt;&lt; 6) | (3 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</td></tr>
+<tr class="separator:a2595b8689ce5bd39634d017620ae57b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b4571bfc0a3ebfb4720ce4e5fbe9acf"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a4b4571bfc0a3ebfb4720ce4e5fbe9acf">NEO_BRWG</a>&#160;&#160;&#160;((2 &lt;&lt; 6) | (1 &lt;&lt; 4) | (3 &lt;&lt; 2) | (0))</td></tr>
+<tr class="separator:a4b4571bfc0a3ebfb4720ce4e5fbe9acf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad617c46d4a64cd4ec8d0ed1a0f30073"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#aad617c46d4a64cd4ec8d0ed1a0f30073">NEO_BRGW</a>&#160;&#160;&#160;((3 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</td></tr>
+<tr class="separator:aad617c46d4a64cd4ec8d0ed1a0f30073"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a143de1c7084e1f833beecbdae00b321c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a143de1c7084e1f833beecbdae00b321c">NEO_BGWR</a>&#160;&#160;&#160;((2 &lt;&lt; 6) | (3 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</td></tr>
+<tr class="separator:a143de1c7084e1f833beecbdae00b321c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b49f89982b6e60d20f7aaab79030d54"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a5b49f89982b6e60d20f7aaab79030d54">NEO_BGRW</a>&#160;&#160;&#160;((3 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</td></tr>
+<tr class="separator:a5b49f89982b6e60d20f7aaab79030d54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a475fef7028a743310aa4311a97899d5d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a475fef7028a743310aa4311a97899d5d">NEO_KHZ800</a>&#160;&#160;&#160;0x0000</td></tr>
+<tr class="separator:a475fef7028a743310aa4311a97899d5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c4067fd0cceb0432d1758fc07ede469"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a9c4067fd0cceb0432d1758fc07ede469">NEO_KHZ400</a>&#160;&#160;&#160;0x0100</td></tr>
+<tr class="separator:a9c4067fd0cceb0432d1758fc07ede469"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:a6ff31bc7214a3ae338a80ed6142d69ff"><td class="memItemLeft" align="right" valign="top">typedef uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a></td></tr>
+<tr class="separator:a6ff31bc7214a3ae338a80ed6142d69ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a9129664a08911b56227dd641116f105f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_BGR&#160;&#160;&#160;((2 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00059">59</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5b49f89982b6e60d20f7aaab79030d54"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_BGRW&#160;&#160;&#160;((3 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00089">89</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a143de1c7084e1f833beecbdae00b321c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_BGWR&#160;&#160;&#160;((2 &lt;&lt; 6) | (3 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00088">88</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afde6ec00a4ec8fad0267ae1a6689379e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_BRG&#160;&#160;&#160;((1 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00058">58</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aad617c46d4a64cd4ec8d0ed1a0f30073"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_BRGW&#160;&#160;&#160;((3 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00087">87</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4b4571bfc0a3ebfb4720ce4e5fbe9acf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_BRWG&#160;&#160;&#160;((2 &lt;&lt; 6) | (1 &lt;&lt; 4) | (3 &lt;&lt; 2) | (0))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00086">86</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2595b8689ce5bd39634d017620ae57b8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_BWGR&#160;&#160;&#160;((1 &lt;&lt; 6) | (3 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00085">85</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf438f131d0fa8a0be6791a553145860"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_BWRG&#160;&#160;&#160;((1 &lt;&lt; 6) | (2 &lt;&lt; 4) | (3 &lt;&lt; 2) | (0))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00084">84</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abca04ce54125372080f2fbf2afdcf027"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_GBR&#160;&#160;&#160;((2 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00057">57</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af60d024b8f8954960e59056c57520080"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_GBRW&#160;&#160;&#160;((3 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00082">82</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a20be9abdf372b9c71d9fdacc3e6a9d1a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_GBWR&#160;&#160;&#160;((2 &lt;&lt; 6) | (3 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00081">81</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a95d0d6b0a1f52bc72d9dcea2b3a48e3f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_GRB&#160;&#160;&#160;((1 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00056">56</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a722066abc60b560235b3b22082c2e68e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_GRBW&#160;&#160;&#160;((3 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00080">80</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35a185ff488486a74745e9094892558c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_GRWB&#160;&#160;&#160;((2 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (3))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00079">79</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaaaa406f36f1c596526579944ca7043d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_GWBR&#160;&#160;&#160;((1 &lt;&lt; 6) | (3 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00078">78</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa29b3544b4257e851de2e214894d1236"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_GWRB&#160;&#160;&#160;((1 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (3))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00077">77</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9c4067fd0cceb0432d1758fc07ede469"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_KHZ400&#160;&#160;&#160;0x0100</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00102">102</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a475fef7028a743310aa4311a97899d5d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_KHZ800&#160;&#160;&#160;0x0000</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00100">100</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d6aaa56c8e2603312cba8dbdf9c5661"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_RBG&#160;&#160;&#160;((0 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00055">55</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a198dc192119c166c544efc3e89fdd1cd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_RBGW&#160;&#160;&#160;((3 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00075">75</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7b6b551a990b498bed36aadba4a498d5"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_RBWG&#160;&#160;&#160;((2 &lt;&lt; 6) | (0 &lt;&lt; 4) | (3 &lt;&lt; 2) | (1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00074">74</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa4f80df5ab240d93359f40956462f758"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_RGB&#160;&#160;&#160;((0 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00054">54</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a71f7c6e45f4c63fceca6b5b73c7a7c9d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_RGBW&#160;&#160;&#160;((3 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00073">73</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abcce73b2eafdf1bb331a8f02fba95d10"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_RGWB&#160;&#160;&#160;((2 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (3))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00072">72</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9254ebc9367c071457d0321f64c9d5fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_RWBG&#160;&#160;&#160;((1 &lt;&lt; 6) | (0 &lt;&lt; 4) | (3 &lt;&lt; 2) | (2))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00071">71</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a122c6bb3e44525d2f975dcd89b094267"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_RWGB&#160;&#160;&#160;((1 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (3))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00070">70</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a015eeccbf1bd19907c34d7b39b63bb84"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_WBGR&#160;&#160;&#160;((0 &lt;&lt; 6) | (3 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00068">68</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3eed3aeba511a2478a1ee8c17516732b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_WBRG&#160;&#160;&#160;((0 &lt;&lt; 6) | (2 &lt;&lt; 4) | (3 &lt;&lt; 2) | (1))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00067">67</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af722c80d41894df25c363b9ebf371b4e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_WGBR&#160;&#160;&#160;((0 &lt;&lt; 6) | (3 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00066">66</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a59561d96a0f8a526ee3448e7b104d8b3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_WGRB&#160;&#160;&#160;((0 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (3))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00065">65</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a266a08af576ed4331db48b16bf572d29"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_WRBG&#160;&#160;&#160;((0 &lt;&lt; 6) | (1 &lt;&lt; 4) | (3 &lt;&lt; 2) | (2))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00064">64</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ee056fd3d7b09538908b35643a2508a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define NEO_WRGB&#160;&#160;&#160;((0 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (3))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00063">63</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a class="anchor" id="a6ff31bc7214a3ae338a80ed6142d69ff"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint8_t <a class="el" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00111">111</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+</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_8h.html">Adafruit_NeoPixel.h</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h.js
new file mode 100644
index 000000000..ee5a3ab29
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h.js
@@ -0,0 +1,37 @@
+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
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h_source.html
new file mode 100644
index 000000000..d42bfc4d2
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_adafruit___neo_pixel_8h_source.html
@@ -0,0 +1,299 @@
+<!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.h Source File</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_8h_source.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.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_adafruit___neo_pixel_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">  This file is part of the Adafruit NeoPixel library.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">  NeoPixel is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">  it under the terms of the GNU Lesser General Public License as</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">  published by the Free Software Foundation, either version 3 of</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">  the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">  NeoPixel is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">  but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">  GNU Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"></span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">  You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">  License along with NeoPixel.  If not, see</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">  &lt;http://www.gnu.org/licenses/&gt;.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">  --------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#ifndef ADAFRUIT_NEOPIXEL_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define ADAFRUIT_NEOPIXEL_H</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#if (ARDUINO &gt;= 100)</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #include &lt;Arduino.h&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor"></span><span class="preprocessor"> #include &lt;WProgram.h&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor"> #include &lt;pins_arduino.h&gt;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">// The order of primary colors in the NeoPixel data stream can vary</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">// among device types, manufacturers and even different revisions of</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">// the same item.  The third parameter to the Adafruit_NeoPixel</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">// constructor encodes the per-pixel byte offsets of the red, green</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">// and blue primaries (plus white, if present) in the data stream --</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">// the following #defines provide an easier-to-use named version for</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">// each permutation.  e.g. NEO_GRB indicates a NeoPixel-compatible</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">// device expecting three bytes per pixel, with the first byte</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">// containing the green value, second containing red and third</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">// containing blue.  The in-memory representation of a chain of</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">// NeoPixels is the same as the data-stream order; no re-ordering of</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">// bytes is required when issuing data to the chain.</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">// Bits 5,4 of this value are the offset (0-3) from the first byte of</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">// a pixel to the location of the red color byte.  Bits 3,2 are the</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">// green offset and 1,0 are the blue offset.  If it is an RGBW-type</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">// device (supporting a white primary in addition to R,G,B), bits 7,6</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">// are the offset to the white byte...otherwise, bits 7,6 are set to</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">// the same value as 5,4 (red) to indicate an RGB (not RGBW) device.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">// i.e. binary representation:</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">// 0bWWRRGGBB for RGBW devices</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">// 0bRRRRGGBB for RGB</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">// RGB NeoPixel permutations; white and red offsets are always same</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">// Offset:         W          R          G          B</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#aa4f80df5ab240d93359f40956462f758">   54</a></span>&#160;<span class="preprocessor">#define NEO_RGB  ((0 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a7d6aaa56c8e2603312cba8dbdf9c5661">   55</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_RBG  ((0 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a95d0d6b0a1f52bc72d9dcea2b3a48e3f">   56</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_GRB  ((1 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#abca04ce54125372080f2fbf2afdcf027">   57</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_GBR  ((2 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#afde6ec00a4ec8fad0267ae1a6689379e">   58</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_BRG  ((1 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a9129664a08911b56227dd641116f105f">   59</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_BGR  ((2 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">// RGBW NeoPixel permutations; all 4 offsets are distinct</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">// Offset:         W          R          G          B</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a4ee056fd3d7b09538908b35643a2508a">   63</a></span>&#160;<span class="preprocessor">#define NEO_WRGB ((0 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (3))</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a266a08af576ed4331db48b16bf572d29">   64</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_WRBG ((0 &lt;&lt; 6) | (1 &lt;&lt; 4) | (3 &lt;&lt; 2) | (2))</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a59561d96a0f8a526ee3448e7b104d8b3">   65</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_WGRB ((0 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (3))</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#af722c80d41894df25c363b9ebf371b4e">   66</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_WGBR ((0 &lt;&lt; 6) | (3 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a3eed3aeba511a2478a1ee8c17516732b">   67</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_WBRG ((0 &lt;&lt; 6) | (2 &lt;&lt; 4) | (3 &lt;&lt; 2) | (1))</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a015eeccbf1bd19907c34d7b39b63bb84">   68</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_WBGR ((0 &lt;&lt; 6) | (3 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a122c6bb3e44525d2f975dcd89b094267">   70</a></span>&#160;<span class="preprocessor">#define NEO_RWGB ((1 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (3))</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a9254ebc9367c071457d0321f64c9d5fa">   71</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_RWBG ((1 &lt;&lt; 6) | (0 &lt;&lt; 4) | (3 &lt;&lt; 2) | (2))</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#abcce73b2eafdf1bb331a8f02fba95d10">   72</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_RGWB ((2 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (3))</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a71f7c6e45f4c63fceca6b5b73c7a7c9d">   73</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_RGBW ((3 &lt;&lt; 6) | (0 &lt;&lt; 4) | (1 &lt;&lt; 2) | (2))</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a7b6b551a990b498bed36aadba4a498d5">   74</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_RBWG ((2 &lt;&lt; 6) | (0 &lt;&lt; 4) | (3 &lt;&lt; 2) | (1))</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a198dc192119c166c544efc3e89fdd1cd">   75</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_RBGW ((3 &lt;&lt; 6) | (0 &lt;&lt; 4) | (2 &lt;&lt; 2) | (1))</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#aa29b3544b4257e851de2e214894d1236">   77</a></span>&#160;<span class="preprocessor">#define NEO_GWRB ((1 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (3))</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#aaaaa406f36f1c596526579944ca7043d">   78</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_GWBR ((1 &lt;&lt; 6) | (3 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a35a185ff488486a74745e9094892558c">   79</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_GRWB ((2 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (3))</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a722066abc60b560235b3b22082c2e68e">   80</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_GRBW ((3 &lt;&lt; 6) | (1 &lt;&lt; 4) | (0 &lt;&lt; 2) | (2))</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a20be9abdf372b9c71d9fdacc3e6a9d1a">   81</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_GBWR ((2 &lt;&lt; 6) | (3 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#af60d024b8f8954960e59056c57520080">   82</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_GBRW ((3 &lt;&lt; 6) | (2 &lt;&lt; 4) | (0 &lt;&lt; 2) | (1))</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#aaf438f131d0fa8a0be6791a553145860">   84</a></span>&#160;<span class="preprocessor">#define NEO_BWRG ((1 &lt;&lt; 6) | (2 &lt;&lt; 4) | (3 &lt;&lt; 2) | (0))</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a2595b8689ce5bd39634d017620ae57b8">   85</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_BWGR ((1 &lt;&lt; 6) | (3 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a4b4571bfc0a3ebfb4720ce4e5fbe9acf">   86</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_BRWG ((2 &lt;&lt; 6) | (1 &lt;&lt; 4) | (3 &lt;&lt; 2) | (0))</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#aad617c46d4a64cd4ec8d0ed1a0f30073">   87</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_BRGW ((3 &lt;&lt; 6) | (1 &lt;&lt; 4) | (2 &lt;&lt; 2) | (0))</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a143de1c7084e1f833beecbdae00b321c">   88</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_BGWR ((2 &lt;&lt; 6) | (3 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a5b49f89982b6e60d20f7aaab79030d54">   89</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_BGRW ((3 &lt;&lt; 6) | (2 &lt;&lt; 4) | (1 &lt;&lt; 2) | (0))</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment">// Add NEO_KHZ400 to the color order value to indicate a 400 KHz</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment">// device.  All but the earliest v1 NeoPixels expect an 800 KHz data</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment">// stream, this is the default if unspecified.  Because flash space</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="comment">// is very limited on ATtiny devices (e.g. Trinket, Gemma), v1</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="comment">// NeoPixels aren&#39;t handled by default on those chips, though it can</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment">// be enabled by removing the ifndef/endif below -- but code will be</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment">// bigger.  Conversely, can disable the NEO_KHZ400 line on other MCUs</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="comment">// to remove v1 support and save a little space.</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a475fef7028a743310aa4311a97899d5d">  100</a></span>&#160;<span class="preprocessor">#define NEO_KHZ800 0x0000 // 800 KHz datastream</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#ifndef __AVR_ATtiny85__</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a9c4067fd0cceb0432d1758fc07ede469">  102</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define NEO_KHZ400 0x0100 // 400 KHz datastream</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment">// If 400 KHz support is enabled, the third parameter to the constructor</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment">// requires a 16-bit value (in order to select 400 vs 800 KHz speed).</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment">// If only 800 KHz is enabled (as is default on ATtiny), an 8-bit value</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="comment">// is sufficient to encode pixel color order, saving some space.</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="code" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">  111</a></span>&#160;<span class="preprocessor"></span><span class="keyword">typedef</span> uint8_t  <a class="code" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="preprocessor"></span><span class="keyword">typedef</span> uint16_t <a class="code" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html">  116</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</a> {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160; <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  <span class="comment">// Constructor: number of LEDs, pin number, LED type</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  <a class="code" href="class_adafruit___neo_pixel.html#ab1ac0c48cf3fd9185e40308c37f1d320">Adafruit_NeoPixel</a>(uint16_t n, uint8_t p=6, <a class="code" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a> t=<a class="code" href="_adafruit___neo_pixel_8h.html#a95d0d6b0a1f52bc72d9dcea2b3a48e3f">NEO_GRB</a> + <a class="code" href="_adafruit___neo_pixel_8h.html#a475fef7028a743310aa4311a97899d5d">NEO_KHZ800</a>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <a class="code" href="class_adafruit___neo_pixel.html#ab1ac0c48cf3fd9185e40308c37f1d320">Adafruit_NeoPixel</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  <a class="code" href="class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db">~Adafruit_NeoPixel</a>();</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7">begin</a>(<span class="keywordtype">void</span>),</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7">show</a>(<span class="keywordtype">void</span>),</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b">setPin</a>(uint8_t p),</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1">setPixelColor</a>(uint16_t n, uint8_t r, uint8_t g, uint8_t b),</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1">setPixelColor</a>(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w),</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1">setPixelColor</a>(uint16_t n, uint32_t c),</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53">setBrightness</a>(uint8_t),</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#ac8bb3912a3ce86b15842e79d0b421204">clear</a>(),</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944">updateLength</a>(uint16_t n),</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b">updateType</a>(<a class="code" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a> t);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  uint8_t</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;   *<a class="code" href="class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067">getPixels</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f">getBrightness</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  uint16_t</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#ac893a5c07c41604539022af84665c04b">numPixels</a>(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  <span class="keyword">static</span> uint32_t</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec">Color</a>(uint8_t r, uint8_t g, uint8_t b),</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec">Color</a>(uint8_t r, uint8_t g, uint8_t b, uint8_t w);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  uint32_t</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa">getPixelColor</a>(uint16_t n) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keyword">inline</span> <span class="keywordtype">bool</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"><a class="code" href="class_adafruit___neo_pixel.html#ad38ce8112667b70ad7c411a98892af0e">  147</a></span>&#160;    <a class="code" href="class_adafruit___neo_pixel.html#ad38ce8112667b70ad7c411a98892af0e">canShow</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> (micros() - endTime) &gt;= 50L; }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160; <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="keywordtype">boolean</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="preprocessor">#ifdef NEO_KHZ400  // If 400 KHz NeoPixel support enabled...</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="preprocessor"></span>    is800KHz,      <span class="comment">// ...true if 800 KHz pixels</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor"></span>    begun;         <span class="comment">// true if begin() previously called</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  uint16_t</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    numLEDs,       <span class="comment">// Number of RGB LEDs in strip</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    numBytes;      <span class="comment">// Size of &#39;pixels&#39; buffer below (3 or 4 bytes/pixel)</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  int8_t</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    pin;           <span class="comment">// Output pin number (-1 if not yet set)</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  uint8_t</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    brightness,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;   *pixels,        <span class="comment">// Holds LED color values (3 or 4 bytes each)</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    rOffset,       <span class="comment">// Index of red byte within each 3- or 4-byte pixel</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    gOffset,       <span class="comment">// Index of green byte</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    bOffset,       <span class="comment">// Index of blue byte</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    wOffset;       <span class="comment">// Index of white byte (same as rOffset if no white)</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  uint32_t</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    endTime;       <span class="comment">// Latch timing reference</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="preprocessor">#ifdef __AVR__</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="preprocessor"></span>  <span class="keyword">volatile</span> uint8_t</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    *port;         <span class="comment">// Output PORT register</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  uint8_t</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    pinMask;       <span class="comment">// Output PORT bitmask</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;};</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="preprocessor">#endif // ADAFRUIT_NEOPIXEL_H</span></div>
+</div><!-- fragment --></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_8h.html">Adafruit_NeoPixel.h</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp.html
new file mode 100644
index 000000000..fa6543908
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp.html
@@ -0,0 +1,377 @@
+<!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">
+$(document).ready(function(){initNavTree('_m_a_x30102_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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">MAX30102.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>&quot;</code><br/>
+</div>
+<p><a href="_m_a_x30102_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae3e7ab47cd5395225bf7c67b8ee84976"><td class="memItemLeft" align="right" valign="top">I2C&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">i2c</a> (I2C_SDA, I2C_SCL)</td></tr>
+<tr class="separator:ae3e7ab47cd5395225bf7c67b8ee84976"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">maxim_max30102_write_reg</a> (uint8_t uch_addr, uint8_t uch_data)</td></tr>
+<tr class="memdesc:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a value to a MAX30102 register.  <a href="#a4c2ec1539c1ec8354cdaefe2c3bf48d6"></a><br/></td></tr>
+<tr class="separator:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0cd2c5a58e57ebbe8c9361384798331f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f">maxim_max30102_read_reg</a> (uint8_t uch_addr, uint8_t *puch_data)</td></tr>
+<tr class="memdesc:a0cd2c5a58e57ebbe8c9361384798331f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a MAX30102 register.  <a href="#a0cd2c5a58e57ebbe8c9361384798331f"></a><br/></td></tr>
+<tr class="separator:a0cd2c5a58e57ebbe8c9361384798331f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4113aeee76935425d8a557a79a4193df"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df">maxim_max30102_init</a> ()</td></tr>
+<tr class="memdesc:a4113aeee76935425d8a557a79a4193df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize the MAX30102.  <a href="#a4113aeee76935425d8a557a79a4193df"></a><br/></td></tr>
+<tr class="separator:a4113aeee76935425d8a557a79a4193df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968">maxim_max30102_read_fifo</a> (uint32_t *pun_red_led, uint32_t *pun_ir_led)</td></tr>
+<tr class="memdesc:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a set of samples from the MAX30102 FIFO register.  <a href="#a483073cbc9dbb7a5a2495ce2ae4fb968"></a><br/></td></tr>
+<tr class="separator:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1df3bb178b66379a2975c56395c47d9b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b">maxim_max30102_reset</a> ()</td></tr>
+<tr class="memdesc:a1df3bb178b66379a2975c56395c47d9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the MAX30102.  <a href="#a1df3bb178b66379a2975c56395c47d9b"></a><br/></td></tr>
+<tr class="separator:a1df3bb178b66379a2975c56395c47d9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><hr/>
+<p>Project: MAXREFDES117# Filename: <a class="el" href="_m_a_x30102_8cpp.html">max30102.cpp</a> Description: This module is an embedded controller driver for the MAX30102 <hr/>
+<p>This code follows the following naming conventions:</p>
+<p>char ch_pmod_value char (array) s_pmod_s_string[16] float f_pmod_value int32_t n_pmod_value int32_t (array) an_pmod_value[16] int16_t w_pmod_value int16_t (array) aw_pmod_value[16] uint16_t uw_pmod_value uint16_t (array) auw_pmod_value[16] uint8_t uch_pmod_value uint8_t (array) auch_pmod_buffer[16] uint32_t un_pmod_value int32_t * pn_pmod_value <hr/>
+
+<p>Definition in file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae3e7ab47cd5395225bf7c67b8ee84976"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">I2C i2c </td>
+          <td>(</td>
+          <td class="paramtype">I2C_SDA&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">I2C_SCL&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4113aeee76935425d8a557a79a4193df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_init </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initialize the MAX30102. </p>
+<dl class="section user"><dt>Details</dt><dd>This function initializes the MAX30102</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00115">115</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a483073cbc9dbb7a5a2495ce2ae4fb968"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_read_fifo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_red_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_ir_led</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Read a set of samples from the MAX30102 FIFO register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function reads a set of samples from the MAX30102 FIFO register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pun_red_led</td><td>- pointer that stores the red LED reading data </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pun_ir_led</td><td>- pointer that stores the IR LED reading data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00152">152</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0cd2c5a58e57ebbe8c9361384798331f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_read_reg </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>puch_data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Read a MAX30102 register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function reads a MAX30102 register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_addr</td><td>- register address </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">puch_data</td><td>- pointer that stores the register data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00090">90</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1df3bb178b66379a2975c56395c47d9b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_reset </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Reset the MAX30102. </p>
+<dl class="section user"><dt>Details</dt><dd>This function resets the MAX30102</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00205">205</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c2ec1539c1ec8354cdaefe2c3bf48d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_write_reg </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Write a value to a MAX30102 register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function writes a value to a MAX30102 register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_addr</td><td>- register address </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_data</td><td>- register data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00068">68</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+</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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_d4a9a7556cca61907ce453116086a23a.html">MAX30102</a></li><li class="navelem"><a class="el" href="_m_a_x30102_8cpp.html">MAX30102.cpp</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp.js
new file mode 100644
index 000000000..16c93c096
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp.js
@@ -0,0 +1,9 @@
+var _m_a_x30102_8cpp =
+[
+    [ "i2c", "_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976", null ],
+    [ "maxim_max30102_init", "_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df", null ],
+    [ "maxim_max30102_read_fifo", "_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968", null ],
+    [ "maxim_max30102_read_reg", "_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f", null ],
+    [ "maxim_max30102_reset", "_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b", null ],
+    [ "maxim_max30102_write_reg", "_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp_source.html
new file mode 100644
index 000000000..da5160050
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8cpp_source.html
@@ -0,0 +1,266 @@
+<!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 Source File</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">
+$(document).ready(function(){initNavTree('_m_a_x30102_8cpp_source.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">MAX30102.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_m_a_x30102_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">* Permission is hereby granted, free of charge, to any person obtaining a</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">* copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">* to deal in the Software without restriction, including without limitation</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">* the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">* and/or sell copies of the Software, and to permit persons to whom the</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">* Software is furnished to do so, subject to the following conditions:</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">* The above copyright notice and this permission notice shall be included</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">* in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">* THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">* OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">* Except as contained in this notice, the name of Maxim Integrated</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">* Products, Inc. shall not be used except as stated in the Maxim Integrated</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">* Products, Inc. Branding Policy.</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">* The mere transfer of this software does not imply any licenses</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">* of trade secrets, proprietary technology, copyrights, patents,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">* trademarks, maskwork rights, or any other form of intellectual</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">* property whatsoever. Maxim Integrated Products, Inc. retains all</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">* ownership rights.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">*******************************************************************************</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#include &quot;mbed.h&quot;</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_m_a_x30102_8h.html">MAX30102.h</a>&quot;</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#ifdef TARGET_MAX32600MBED</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor"></span>I2C <a class="code" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">i2c</a>(I2C1_SDA, I2C1_SCL);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor"></span>I2C <a class="code" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">i2c</a>(I2C_SDA, I2C_SCL);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">   68</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(uint8_t uch_addr, uint8_t uch_data)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;{</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <span class="keywordtype">char</span> ach_i2c_data[2];</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  ach_i2c_data[0]=uch_addr;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  ach_i2c_data[1]=uch_data;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  <span class="keywordflow">if</span>(<a class="code" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">i2c</a>.write(<a class="code" href="_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">I2C_WRITE_ADDR</a>, ach_i2c_data, 2, <span class="keyword">false</span>)==0)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;}</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f">   90</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(uint8_t uch_addr, uint8_t *puch_data)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;{</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="keywordtype">char</span> ch_i2c_data;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  ch_i2c_data=uch_addr;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="keywordflow">if</span>(<a class="code" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">i2c</a>.write(<a class="code" href="_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">I2C_WRITE_ADDR</a>, &amp;ch_i2c_data, 1, <span class="keyword">true</span>)!=0)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  <span class="keywordflow">if</span>(<a class="code" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">i2c</a>.read(<a class="code" href="_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37">I2C_READ_ADDR</a>, &amp;ch_i2c_data, 1, <span class="keyword">false</span>)==0)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    *puch_data=(uint8_t) ch_i2c_data;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;}</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a4113aeee76935425d8a557a79a4193df">  115</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df" title="Initialize the MAX30102.">maxim_max30102_init</a>()</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;{</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d">REG_INTR_ENABLE_1</a>,0xc0)) <span class="comment">// INTR setting</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1">REG_INTR_ENABLE_2</a>,0x00))</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115">REG_FIFO_WR_PTR</a>,0x00))  <span class="comment">//FIFO_WR_PTR[4:0]</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707">REG_OVF_COUNTER</a>,0x00))  <span class="comment">//OVF_COUNTER[4:0]</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f">REG_FIFO_RD_PTR</a>,0x00))  <span class="comment">//FIFO_RD_PTR[4:0]</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca">REG_FIFO_CONFIG</a>,0x0f))  <span class="comment">//sample avg = 1, fifo rollover=false, fifo almost full = 17</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">REG_MODE_CONFIG</a>,0x03))   <span class="comment">//0x02 for Red only, 0x03 for SpO2 mode 0x07 multimode LED</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0">REG_SPO2_CONFIG</a>,0x27))  <span class="comment">// SPO2_ADC range = 4096nA, SPO2 sample rate (100 Hz), LED pulseWidth (400uS)</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b">REG_LED1_PA</a>,0x24))   <span class="comment">//Choose value for ~ 7mA for LED1</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21">REG_LED2_PA</a>,0x24))   <span class="comment">// Choose value for ~ 7mA for LED2</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1">REG_PILOT_PA</a>,0x7f))   <span class="comment">// Choose value for ~ 25mA for Pilot LED</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;  </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;}</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968">  152</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>(uint32_t *pun_red_led, uint32_t *pun_ir_led)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;{</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;  uint32_t un_temp;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> uch_temp;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  *pun_red_led=0;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  *pun_ir_led=0;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="keywordtype">char</span> ach_i2c_data[6];</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  <span class="comment">//read and clear status register</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  <a class="code" href="_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(<a class="code" href="_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191">REG_INTR_STATUS_1</a>, &amp;uch_temp);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  <a class="code" href="_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(<a class="code" href="_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a">REG_INTR_STATUS_2</a>, &amp;uch_temp);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;  ach_i2c_data[0]=<a class="code" href="_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd">REG_FIFO_DATA</a>;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  <span class="keywordflow">if</span>(<a class="code" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">i2c</a>.write(<a class="code" href="_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">I2C_WRITE_ADDR</a>, ach_i2c_data, 1, <span class="keyword">true</span>)!=0)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  <span class="keywordflow">if</span>(<a class="code" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">i2c</a>.read(<a class="code" href="_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37">I2C_READ_ADDR</a>, ach_i2c_data, 6, <span class="keyword">false</span>)!=0)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;  {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  un_temp=(<span class="keywordtype">unsigned</span> char) ach_i2c_data[0];</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  un_temp&lt;&lt;=16;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  *pun_red_led+=un_temp;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  un_temp=(<span class="keywordtype">unsigned</span> char) ach_i2c_data[1];</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  un_temp&lt;&lt;=8;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  *pun_red_led+=un_temp;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  un_temp=(<span class="keywordtype">unsigned</span> char) ach_i2c_data[2];</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  *pun_red_led+=un_temp;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;  </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  un_temp=(<span class="keywordtype">unsigned</span> char) ach_i2c_data[3];</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  un_temp&lt;&lt;=16;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  *pun_ir_led+=un_temp;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  un_temp=(<span class="keywordtype">unsigned</span> char) ach_i2c_data[4];</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  un_temp&lt;&lt;=8;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  *pun_ir_led+=un_temp;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  un_temp=(<span class="keywordtype">unsigned</span> char) ach_i2c_data[5];</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  *pun_ir_led+=un_temp;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  *pun_red_led&amp;=0x03FFFF;  <span class="comment">//Mask MSB [23:18]</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  *pun_ir_led&amp;=0x03FFFF;  <span class="comment">//Mask MSB [23:18]</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;}</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd">  205</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b" title="Reset the MAX30102.">maxim_max30102_reset</a>()</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;{</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <span class="keywordflow">if</span>(!<a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">REG_MODE_CONFIG</a>,0x40))</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;    </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;}</div>
+</div><!-- fragment --></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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_d4a9a7556cca61907ce453116086a23a.html">MAX30102</a></li><li class="navelem"><a class="el" href="_m_a_x30102_8cpp.html">MAX30102.cpp</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h.html
new file mode 100644
index 000000000..e568cf7d1
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h.html
@@ -0,0 +1,737 @@
+<!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.h 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">
+$(document).ready(function(){initNavTree('_m_a_x30102_8h.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">MAX30102.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br/>
+</div>
+<p><a href="_m_a_x30102_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a7978167075eb8954c1090fc7ce9647c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">I2C_WRITE_ADDR</a>&#160;&#160;&#160;0xAE</td></tr>
+<tr class="separator:a7978167075eb8954c1090fc7ce9647c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a11a0148c64950f3315f38d957cd43d37"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37">I2C_READ_ADDR</a>&#160;&#160;&#160;0xAF</td></tr>
+<tr class="separator:a11a0148c64950f3315f38d957cd43d37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d161a2394a67a2176d549edb94f4191"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191">REG_INTR_STATUS_1</a>&#160;&#160;&#160;0x00</td></tr>
+<tr class="separator:a7d161a2394a67a2176d549edb94f4191"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61d809a1e313a2787b23e96de9554c4a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a">REG_INTR_STATUS_2</a>&#160;&#160;&#160;0x01</td></tr>
+<tr class="separator:a61d809a1e313a2787b23e96de9554c4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae07f3c26106a0a37b6eddd8d2653137d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d">REG_INTR_ENABLE_1</a>&#160;&#160;&#160;0x02</td></tr>
+<tr class="separator:ae07f3c26106a0a37b6eddd8d2653137d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8d58d945ad576d492f669c7b9affbf1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1">REG_INTR_ENABLE_2</a>&#160;&#160;&#160;0x03</td></tr>
+<tr class="separator:ab8d58d945ad576d492f669c7b9affbf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba8c69cb46224fb35783f5b60e75b115"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115">REG_FIFO_WR_PTR</a>&#160;&#160;&#160;0x04</td></tr>
+<tr class="separator:aba8c69cb46224fb35783f5b60e75b115"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9c8026aa9a22fad4c22ee6b10613707"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707">REG_OVF_COUNTER</a>&#160;&#160;&#160;0x05</td></tr>
+<tr class="separator:af9c8026aa9a22fad4c22ee6b10613707"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b9d75d4ac3cb579e8b46dea27f4303f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f">REG_FIFO_RD_PTR</a>&#160;&#160;&#160;0x06</td></tr>
+<tr class="separator:a3b9d75d4ac3cb579e8b46dea27f4303f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05bf6ede83fa400eac4dd65788d996fd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd">REG_FIFO_DATA</a>&#160;&#160;&#160;0x07</td></tr>
+<tr class="separator:a05bf6ede83fa400eac4dd65788d996fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1b1bbfe23c9461e0ae75b71b9f805ca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca">REG_FIFO_CONFIG</a>&#160;&#160;&#160;0x08</td></tr>
+<tr class="separator:ad1b1bbfe23c9461e0ae75b71b9f805ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:accdea52b28f1bd3f4cd63d05ab12887f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">REG_MODE_CONFIG</a>&#160;&#160;&#160;0x09</td></tr>
+<tr class="separator:accdea52b28f1bd3f4cd63d05ab12887f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38546015e987a72b8c9eb13228237dd0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0">REG_SPO2_CONFIG</a>&#160;&#160;&#160;0x0A</td></tr>
+<tr class="separator:a38546015e987a72b8c9eb13228237dd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f3a6641b201203d41ed3d23b638a96b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b">REG_LED1_PA</a>&#160;&#160;&#160;0x0C</td></tr>
+<tr class="separator:a5f3a6641b201203d41ed3d23b638a96b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7df43b0f854c9caf2fe04ccdebb18d21"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21">REG_LED2_PA</a>&#160;&#160;&#160;0x0D</td></tr>
+<tr class="separator:a7df43b0f854c9caf2fe04ccdebb18d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a371750304ec49457d3d38f60428f8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1">REG_PILOT_PA</a>&#160;&#160;&#160;0x10</td></tr>
+<tr class="separator:a371750304ec49457d3d38f60428f8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d333cff4d002cb1d09a319e6917bc5c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c">REG_MULTI_LED_CTRL1</a>&#160;&#160;&#160;0x11</td></tr>
+<tr class="separator:a9d333cff4d002cb1d09a319e6917bc5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05ed274928d49bb6ddd6def6e45fac10"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10">REG_MULTI_LED_CTRL2</a>&#160;&#160;&#160;0x12</td></tr>
+<tr class="separator:a05ed274928d49bb6ddd6def6e45fac10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a579a9e43d89bdda85d9ccb206339d681"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a579a9e43d89bdda85d9ccb206339d681">REG_TEMP_INTR</a>&#160;&#160;&#160;0x1F</td></tr>
+<tr class="separator:a579a9e43d89bdda85d9ccb206339d681"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5321d8a33f1225ab437032e0e8ecbb3d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d">REG_TEMP_FRAC</a>&#160;&#160;&#160;0x20</td></tr>
+<tr class="separator:a5321d8a33f1225ab437032e0e8ecbb3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad16bc92e2f92e516ca396214861a6379"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#ad16bc92e2f92e516ca396214861a6379">REG_TEMP_CONFIG</a>&#160;&#160;&#160;0x21</td></tr>
+<tr class="separator:ad16bc92e2f92e516ca396214861a6379"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d80b09e301a0155949b7c337ce5f5ab"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab">REG_PROX_INT_THRESH</a>&#160;&#160;&#160;0x30</td></tr>
+<tr class="separator:a3d80b09e301a0155949b7c337ce5f5ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16f4b970762f7e8aa1f5c7a780a48c23"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23">REG_REV_ID</a>&#160;&#160;&#160;0xFE</td></tr>
+<tr class="separator:a16f4b970762f7e8aa1f5c7a780a48c23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a46083d1b6d3e1d5f89b0f1598dc6d163"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163">REG_PART_ID</a>&#160;&#160;&#160;0xFF</td></tr>
+<tr class="separator:a46083d1b6d3e1d5f89b0f1598dc6d163"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4113aeee76935425d8a557a79a4193df"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a4113aeee76935425d8a557a79a4193df">maxim_max30102_init</a> ()</td></tr>
+<tr class="memdesc:a4113aeee76935425d8a557a79a4193df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize the MAX30102.  <a href="#a4113aeee76935425d8a557a79a4193df"></a><br/></td></tr>
+<tr class="separator:a4113aeee76935425d8a557a79a4193df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968">maxim_max30102_read_fifo</a> (uint32_t *pun_red_led, uint32_t *pun_ir_led)</td></tr>
+<tr class="memdesc:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a set of samples from the MAX30102 FIFO register.  <a href="#a483073cbc9dbb7a5a2495ce2ae4fb968"></a><br/></td></tr>
+<tr class="separator:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">maxim_max30102_write_reg</a> (uint8_t uch_addr, uint8_t uch_data)</td></tr>
+<tr class="memdesc:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a value to a MAX30102 register.  <a href="#a4c2ec1539c1ec8354cdaefe2c3bf48d6"></a><br/></td></tr>
+<tr class="separator:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0cd2c5a58e57ebbe8c9361384798331f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f">maxim_max30102_read_reg</a> (uint8_t uch_addr, uint8_t *puch_data)</td></tr>
+<tr class="memdesc:a0cd2c5a58e57ebbe8c9361384798331f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a MAX30102 register.  <a href="#a0cd2c5a58e57ebbe8c9361384798331f"></a><br/></td></tr>
+<tr class="separator:a0cd2c5a58e57ebbe8c9361384798331f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94ab5935f6ce28aa5ce31aa842eb83dd"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd">maxim_max30102_reset</a> (void)</td></tr>
+<tr class="memdesc:a94ab5935f6ce28aa5ce31aa842eb83dd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the MAX30102.  <a href="#a94ab5935f6ce28aa5ce31aa842eb83dd"></a><br/></td></tr>
+<tr class="separator:a94ab5935f6ce28aa5ce31aa842eb83dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><hr/>
+<p>Project: MAXREFDES117# Filename: <a class="el" href="_m_a_x30102_8h.html">max30102.h</a> Description: This module is an embedded controller driver header file for MAX30102 <hr/>
+<p>This code follows the following naming conventions:</p>
+<p>char ch_pmod_value char (array) s_pmod_s_string[16] float f_pmod_value int32_t n_pmod_value int32_t (array) an_pmod_value[16] int16_t w_pmod_value int16_t (array) aw_pmod_value[16] uint16_t uw_pmod_value uint16_t (array) auw_pmod_value[16] uint8_t uch_pmod_value uint8_t (array) auch_pmod_buffer[16] uint32_t un_pmod_value int32_t * pn_pmod_value <hr/>
+
+<p>Definition in file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a11a0148c64950f3315f38d957cd43d37"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_READ_ADDR&#160;&#160;&#160;0xAF</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00065">65</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7978167075eb8954c1090fc7ce9647c6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_WRITE_ADDR&#160;&#160;&#160;0xAE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00064">64</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad1b1bbfe23c9461e0ae75b71b9f805ca"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_FIFO_CONFIG&#160;&#160;&#160;0x08</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00076">76</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a05bf6ede83fa400eac4dd65788d996fd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_FIFO_DATA&#160;&#160;&#160;0x07</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00075">75</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3b9d75d4ac3cb579e8b46dea27f4303f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_FIFO_RD_PTR&#160;&#160;&#160;0x06</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00074">74</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aba8c69cb46224fb35783f5b60e75b115"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_FIFO_WR_PTR&#160;&#160;&#160;0x04</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00072">72</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae07f3c26106a0a37b6eddd8d2653137d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_INTR_ENABLE_1&#160;&#160;&#160;0x02</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00070">70</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab8d58d945ad576d492f669c7b9affbf1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_INTR_ENABLE_2&#160;&#160;&#160;0x03</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00071">71</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d161a2394a67a2176d549edb94f4191"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_INTR_STATUS_1&#160;&#160;&#160;0x00</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00068">68</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a61d809a1e313a2787b23e96de9554c4a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_INTR_STATUS_2&#160;&#160;&#160;0x01</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00069">69</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5f3a6641b201203d41ed3d23b638a96b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_LED1_PA&#160;&#160;&#160;0x0C</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00079">79</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7df43b0f854c9caf2fe04ccdebb18d21"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_LED2_PA&#160;&#160;&#160;0x0D</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00080">80</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="accdea52b28f1bd3f4cd63d05ab12887f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_MODE_CONFIG&#160;&#160;&#160;0x09</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00077">77</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d333cff4d002cb1d09a319e6917bc5c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_MULTI_LED_CTRL1&#160;&#160;&#160;0x11</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00082">82</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a05ed274928d49bb6ddd6def6e45fac10"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_MULTI_LED_CTRL2&#160;&#160;&#160;0x12</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00083">83</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af9c8026aa9a22fad4c22ee6b10613707"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_OVF_COUNTER&#160;&#160;&#160;0x05</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00073">73</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a46083d1b6d3e1d5f89b0f1598dc6d163"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_PART_ID&#160;&#160;&#160;0xFF</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00089">89</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a371750304ec49457d3d38f60428f8ff1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_PILOT_PA&#160;&#160;&#160;0x10</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00081">81</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3d80b09e301a0155949b7c337ce5f5ab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_PROX_INT_THRESH&#160;&#160;&#160;0x30</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00087">87</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a16f4b970762f7e8aa1f5c7a780a48c23"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_REV_ID&#160;&#160;&#160;0xFE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00088">88</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a38546015e987a72b8c9eb13228237dd0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_SPO2_CONFIG&#160;&#160;&#160;0x0A</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00078">78</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad16bc92e2f92e516ca396214861a6379"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_TEMP_CONFIG&#160;&#160;&#160;0x21</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00086">86</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5321d8a33f1225ab437032e0e8ecbb3d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_TEMP_FRAC&#160;&#160;&#160;0x20</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00085">85</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a579a9e43d89bdda85d9ccb206339d681"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_TEMP_INTR&#160;&#160;&#160;0x1F</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8h_source.html#l00084">84</a> of file <a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a4113aeee76935425d8a557a79a4193df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_init </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initialize the MAX30102. </p>
+<dl class="section user"><dt>Details</dt><dd>This function initializes the MAX30102</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00115">115</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a483073cbc9dbb7a5a2495ce2ae4fb968"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_read_fifo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_red_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_ir_led</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Read a set of samples from the MAX30102 FIFO register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function reads a set of samples from the MAX30102 FIFO register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pun_red_led</td><td>- pointer that stores the red LED reading data </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pun_ir_led</td><td>- pointer that stores the IR LED reading data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00152">152</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0cd2c5a58e57ebbe8c9361384798331f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_read_reg </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>puch_data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Read a MAX30102 register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function reads a MAX30102 register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_addr</td><td>- register address </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">puch_data</td><td>- pointer that stores the register data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00090">90</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94ab5935f6ce28aa5ce31aa842eb83dd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_reset </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Reset the MAX30102. </p>
+<dl class="section user"><dt>Details</dt><dd>This function resets the MAX30102</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00205">205</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c2ec1539c1ec8354cdaefe2c3bf48d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_write_reg </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Write a value to a MAX30102 register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function writes a value to a MAX30102 register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_addr</td><td>- register address </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_data</td><td>- register data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="_m_a_x30102_8cpp_source.html#l00068">68</a> of file <a class="el" href="_m_a_x30102_8cpp_source.html">MAX30102.cpp</a>.</p>
+
+</div>
+</div>
+</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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_d4a9a7556cca61907ce453116086a23a.html">MAX30102</a></li><li class="navelem"><a class="el" href="_m_a_x30102_8h.html">MAX30102.h</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h.js
new file mode 100644
index 000000000..064f9661b
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h.js
@@ -0,0 +1,32 @@
+var _m_a_x30102_8h =
+[
+    [ "I2C_READ_ADDR", "_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37", null ],
+    [ "I2C_WRITE_ADDR", "_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6", null ],
+    [ "REG_FIFO_CONFIG", "_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca", null ],
+    [ "REG_FIFO_DATA", "_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd", null ],
+    [ "REG_FIFO_RD_PTR", "_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f", null ],
+    [ "REG_FIFO_WR_PTR", "_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115", null ],
+    [ "REG_INTR_ENABLE_1", "_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d", null ],
+    [ "REG_INTR_ENABLE_2", "_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1", null ],
+    [ "REG_INTR_STATUS_1", "_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191", null ],
+    [ "REG_INTR_STATUS_2", "_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a", null ],
+    [ "REG_LED1_PA", "_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b", null ],
+    [ "REG_LED2_PA", "_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21", null ],
+    [ "REG_MODE_CONFIG", "_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f", null ],
+    [ "REG_MULTI_LED_CTRL1", "_m_a_x30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c", null ],
+    [ "REG_MULTI_LED_CTRL2", "_m_a_x30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10", null ],
+    [ "REG_OVF_COUNTER", "_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707", null ],
+    [ "REG_PART_ID", "_m_a_x30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163", null ],
+    [ "REG_PILOT_PA", "_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1", null ],
+    [ "REG_PROX_INT_THRESH", "_m_a_x30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab", null ],
+    [ "REG_REV_ID", "_m_a_x30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23", null ],
+    [ "REG_SPO2_CONFIG", "_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0", null ],
+    [ "REG_TEMP_CONFIG", "_m_a_x30102_8h.html#ad16bc92e2f92e516ca396214861a6379", null ],
+    [ "REG_TEMP_FRAC", "_m_a_x30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d", null ],
+    [ "REG_TEMP_INTR", "_m_a_x30102_8h.html#a579a9e43d89bdda85d9ccb206339d681", null ],
+    [ "maxim_max30102_init", "_m_a_x30102_8h.html#a4113aeee76935425d8a557a79a4193df", null ],
+    [ "maxim_max30102_read_fifo", "_m_a_x30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968", null ],
+    [ "maxim_max30102_read_reg", "_m_a_x30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f", null ],
+    [ "maxim_max30102_reset", "_m_a_x30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd", null ],
+    [ "maxim_max30102_write_reg", "_m_a_x30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h_source.html
new file mode 100644
index 000000000..eb9ec8d29
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_m_a_x30102_8h_source.html
@@ -0,0 +1,191 @@
+<!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.h Source File</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">
+$(document).ready(function(){initNavTree('_m_a_x30102_8h_source.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">MAX30102.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_m_a_x30102_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">* Permission is hereby granted, free of charge, to any person obtaining a</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">* copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">* to deal in the Software without restriction, including without limitation</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">* the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">* and/or sell copies of the Software, and to permit persons to whom the</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">* Software is furnished to do so, subject to the following conditions:</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">* The above copyright notice and this permission notice shall be included</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">* in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">* THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">* OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">* Except as contained in this notice, the name of Maxim Integrated</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">* Products, Inc. shall not be used except as stated in the Maxim Integrated</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">* Products, Inc. Branding Policy.</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">* The mere transfer of this software does not imply any licenses</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">* of trade secrets, proprietary technology, copyrights, patents,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">* trademarks, maskwork rights, or any other form of intellectual</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">* property whatsoever. Maxim Integrated Products, Inc. retains all</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">* ownership rights.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">*******************************************************************************</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#ifndef MAX30102_H_</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define MAX30102_H_</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#include &quot;mbed.h&quot;</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div>
+<div class="line"><a name="l00064"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">   64</a></span>&#160;<span class="preprocessor">#define I2C_WRITE_ADDR 0xAE</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37">   65</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_READ_ADDR 0xAF</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">//register addresses</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191">   68</a></span>&#160;<span class="preprocessor">#define REG_INTR_STATUS_1 0x00</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a">   69</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_INTR_STATUS_2 0x01</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d">   70</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_INTR_ENABLE_1 0x02</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1">   71</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_INTR_ENABLE_2 0x03</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115">   72</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_FIFO_WR_PTR 0x04</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707">   73</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_OVF_COUNTER 0x05</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f">   74</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_FIFO_RD_PTR 0x06</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd">   75</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_FIFO_DATA 0x07</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca">   76</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_FIFO_CONFIG 0x08</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">   77</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_MODE_CONFIG 0x09</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0">   78</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_SPO2_CONFIG 0x0A</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b">   79</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_LED1_PA 0x0C</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21">   80</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_LED2_PA 0x0D</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1">   81</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_PILOT_PA 0x10</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c">   82</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_MULTI_LED_CTRL1 0x11</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10">   83</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_MULTI_LED_CTRL2 0x12</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a579a9e43d89bdda85d9ccb206339d681">   84</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_TEMP_INTR 0x1F</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d">   85</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_TEMP_FRAC 0x20</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#ad16bc92e2f92e516ca396214861a6379">   86</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_TEMP_CONFIG 0x21</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab">   87</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_PROX_INT_THRESH 0x30</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23">   88</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_REV_ID 0xFE</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="_m_a_x30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163">   89</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_PART_ID 0xFF</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df" title="Initialize the MAX30102.">maxim_max30102_init</a>();</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>(uint32_t *pun_red_led, uint32_t *pun_ir_led);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(uint8_t uch_addr, uint8_t uch_data);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(uint8_t uch_addr, uint8_t *puch_data);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b" title="Reset the MAX30102.">maxim_max30102_reset</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* MAX30102_H_ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_d4a9a7556cca61907ce453116086a23a.html">MAX30102</a></li><li class="navelem"><a class="el" href="_m_a_x30102_8h.html">MAX30102.h</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino.html
new file mode 100644
index 000000000..27f63e70a
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino.html
@@ -0,0 +1,324 @@
+<!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/RD117_ARDUINO.ino 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('_r_d117___a_r_d_u_i_n_o_8ino.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="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">RD117_ARDUINO.ino File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;Arduino.h&gt;</code><br/>
+<code>#include &quot;<a class="el" href="algorithm_8h_source.html">algorithm.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="max30102_8h_source.html">max30102.h</a>&quot;</code><br/>
+</div>
+<p><a href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a2134a5a06f0865c945543a1f07eba387"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>&#160;&#160;&#160;255</td></tr>
+<tr class="separator:a2134a5a06f0865c945543a1f07eba387"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4fc01d736fe50cf5b977f755b675f11d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a4fc01d736fe50cf5b977f755b675f11d">setup</a> ()</td></tr>
+<tr class="separator:a4fc01d736fe50cf5b977f755b675f11d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe461d27b9c48d5921c00d521181f12f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#afe461d27b9c48d5921c00d521181f12f">loop</a> ()</td></tr>
+<tr class="separator:afe461d27b9c48d5921c00d521181f12f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a602d2fccfb9f55d84f81b0c4d6f01589"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a> [100]</td></tr>
+<tr class="separator:a602d2fccfb9f55d84f81b0c4d6f01589"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aac1c23af668ef1d6750bfd4a5f6422fe"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a> [100]</td></tr>
+<tr class="separator:aac1c23af668ef1d6750bfd4a5f6422fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac16b6dd0e762f0ccc30e7102f97260d6"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a></td></tr>
+<tr class="separator:ac16b6dd0e762f0ccc30e7102f97260d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a54d8056bd9812e0b8f73f911dcc21dfd"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a54d8056bd9812e0b8f73f911dcc21dfd">n_spo2</a></td></tr>
+<tr class="separator:a54d8056bd9812e0b8f73f911dcc21dfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2518324dce002f592cf6d7f0b1ad9024"><td class="memItemLeft" align="right" valign="top">int8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a></td></tr>
+<tr class="separator:a2518324dce002f592cf6d7f0b1ad9024"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3171c70bfa71c3a4f960bf3e8203d13f"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a></td></tr>
+<tr class="separator:a3171c70bfa71c3a4f960bf3e8203d13f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43fb8ea97a26647405ca359095323280"><td class="memItemLeft" align="right" valign="top">int8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a></td></tr>
+<tr class="separator:a43fb8ea97a26647405ca359095323280"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5e493da8cbdd1414d56e8f08282fcc2"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac5e493da8cbdd1414d56e8f08282fcc2">uch_dummy</a></td></tr>
+<tr class="separator:ac5e493da8cbdd1414d56e8f08282fcc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a2134a5a06f0865c945543a1f07eba387"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MAX_BRIGHTNESS&#160;&#160;&#160;255</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00088">88</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="afe461d27b9c48d5921c00d521181f12f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void loop </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00144">144</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4fc01d736fe50cf5b977f755b675f11d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void setup </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00108">108</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a602d2fccfb9f55d84f81b0c4d6f01589"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t aun_ir_buffer[100]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00096">96</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aac1c23af668ef1d6750bfd4a5f6422fe"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t aun_red_buffer[100]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00097">97</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a43fb8ea97a26647405ca359095323280"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8_t ch_hr_valid</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00103">103</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2518324dce002f592cf6d7f0b1ad9024"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8_t ch_spo2_valid</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00101">101</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3171c70bfa71c3a4f960bf3e8203d13f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t n_heart_rate</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00102">102</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac16b6dd0e762f0ccc30e7102f97260d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t n_ir_buffer_length</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00099">99</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a54d8056bd9812e0b8f73f911dcc21dfd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t n_spo2</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00100">100</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac5e493da8cbdd1414d56e8f08282fcc2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t uch_dummy</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html#l00104">104</a> of file <a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">RD117_ARDUINO.ino</a>.</p>
+
+</div>
+</div>
+</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="_r_d117___a_r_d_u_i_n_o_8ino.html">RD117_ARDUINO.ino</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino.js
new file mode 100644
index 000000000..0c3b4a8a1
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino.js
@@ -0,0 +1,14 @@
+var _r_d117___a_r_d_u_i_n_o_8ino =
+[
+    [ "MAX_BRIGHTNESS", "_r_d117___a_r_d_u_i_n_o_8ino.html#a2134a5a06f0865c945543a1f07eba387", null ],
+    [ "loop", "_r_d117___a_r_d_u_i_n_o_8ino.html#afe461d27b9c48d5921c00d521181f12f", null ],
+    [ "setup", "_r_d117___a_r_d_u_i_n_o_8ino.html#a4fc01d736fe50cf5b977f755b675f11d", null ],
+    [ "aun_ir_buffer", "_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589", null ],
+    [ "aun_red_buffer", "_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe", null ],
+    [ "ch_hr_valid", "_r_d117___a_r_d_u_i_n_o_8ino.html#a43fb8ea97a26647405ca359095323280", null ],
+    [ "ch_spo2_valid", "_r_d117___a_r_d_u_i_n_o_8ino.html#a2518324dce002f592cf6d7f0b1ad9024", null ],
+    [ "n_heart_rate", "_r_d117___a_r_d_u_i_n_o_8ino.html#a3171c70bfa71c3a4f960bf3e8203d13f", null ],
+    [ "n_ir_buffer_length", "_r_d117___a_r_d_u_i_n_o_8ino.html#ac16b6dd0e762f0ccc30e7102f97260d6", null ],
+    [ "n_spo2", "_r_d117___a_r_d_u_i_n_o_8ino.html#a54d8056bd9812e0b8f73f911dcc21dfd", null ],
+    [ "uch_dummy", "_r_d117___a_r_d_u_i_n_o_8ino.html#ac5e493da8cbdd1414d56e8f08282fcc2", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino_source.html
new file mode 100644
index 000000000..bb557886f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_r_d117___a_r_d_u_i_n_o_8ino_source.html
@@ -0,0 +1,330 @@
+<!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/RD117_ARDUINO.ino Source File</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('_r_d117___a_r_d_u_i_n_o_8ino_source.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">RD117_ARDUINO.ino</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_r_d117___a_r_d_u_i_n_o_8ino.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">* Permission is hereby granted, free of charge, to any person obtaining a</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">* copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">* to deal in the Software without restriction, including without limitation</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">* the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">* and/or sell copies of the Software, and to permit persons to whom the</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">* Software is furnished to do so, subject to the following conditions:</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">* The above copyright notice and this permission notice shall be included</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">* in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">* THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">* OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">* Except as contained in this notice, the name of Maxim Integrated</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">* Products, Inc. shall not be used except as stated in the Maxim Integrated</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">* Products, Inc. Branding Policy.</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">* The mere transfer of this software does not imply any licenses</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">* of trade secrets, proprietary technology, copyrights, patents,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">* trademarks, maskwork rights, or any other form of intellectual</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">* property whatsoever. Maxim Integrated Products, Inc. retains all</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">* ownership rights.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">*******************************************************************************</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">#include &lt;Arduino.h&gt;</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="algorithm_8h.html">algorithm.h</a>&quot;</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="max30102_8h.html">max30102.h</a>&quot;</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment">//if Adafruit Flora development board is chosen, include NeoPixel library and define an NeoPixel object</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_FLORA8)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="_adafruit___neo_pixel_8h.html">adafruit_neopixel.h</a>&quot;</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#define BRIGHTNESS_DIVISOR 8  //to lower the max brightness of the neopixel LED</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="preprocessor"></span><a class="code" href="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</a> LED = <a class="code" href="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</a>(1, 8, <a class="code" href="_adafruit___neo_pixel_8h.html#a95d0d6b0a1f52bc72d9dcea2b3a48e3f">NEO_GRB</a> + <a class="code" href="_adafruit___neo_pixel_8h.html#a475fef7028a743310aa4311a97899d5d">NEO_KHZ800</a>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2134a5a06f0865c945543a1f07eba387">   88</a></span>&#160;<span class="preprocessor">#define MAX_BRIGHTNESS 255</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_UNO)</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="preprocessor"></span><span class="comment">//Arduino Uno doesn&#39;t have enough SRAM to store 100 samples of IR led data and red led data in 32-bit format</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment">//To solve this problem, 16-bit MSB of the sampled data will be truncated.  Samples become 16-bit data.</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;uint16_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>[100]; <span class="comment">//infrared LED sensor data</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;uint16_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[100];  <span class="comment">//red LED sensor data</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">   96</a></span>&#160;<span class="preprocessor"></span>uint32_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>[100]; <span class="comment">//infrared LED sensor data</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">   97</a></span>&#160;uint32_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[100];  <span class="comment">//red LED sensor data</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac16b6dd0e762f0ccc30e7102f97260d6">   99</a></span>&#160;<span class="preprocessor"></span>int32_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>; <span class="comment">//data length</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a54d8056bd9812e0b8f73f911dcc21dfd">  100</a></span>&#160;int32_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a54d8056bd9812e0b8f73f911dcc21dfd">n_spo2</a>;  <span class="comment">//SPO2 value</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2518324dce002f592cf6d7f0b1ad9024">  101</a></span>&#160;int8_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a>;  <span class="comment">//indicator to show if the SPO2 calculation is valid</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a3171c70bfa71c3a4f960bf3e8203d13f">  102</a></span>&#160;int32_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a>; <span class="comment">//heart rate value</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a43fb8ea97a26647405ca359095323280">  103</a></span>&#160;int8_t  <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a>;  <span class="comment">//indicator to show if the heart rate calculation is valid</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac5e493da8cbdd1414d56e8f08282fcc2">  104</a></span>&#160;uint8_t <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac5e493da8cbdd1414d56e8f08282fcc2">uch_dummy</a>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment">// the setup routine runs once when you press reset:</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a4fc01d736fe50cf5b977f755b675f11d">  108</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a4fc01d736fe50cf5b977f755b675f11d">setup</a>() {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_LILYPAD_USB)    </span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="preprocessor"></span>  pinMode(13, OUTPUT);  <span class="comment">//LED output pin on Lilypad</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_FLORA8)</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="preprocessor"></span>  <span class="comment">//Initialize the LED</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  LED.<a class="code" href="class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7">begin</a>();</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  LED.<a class="code" href="class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7">show</a>();</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  <a class="code" href="max30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b" title="Reset the MAX30102.">maxim_max30102_reset</a>(); <span class="comment">//resets the MAX30102</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  <span class="comment">// initialize serial communication at 115200 bits per second:</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  Serial.begin(115200);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  pinMode(10, INPUT);  <span class="comment">//pin D10 connects to the interrupt output pin of the MAX30102</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  delay(1000);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  <a class="code" href="max30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(<a class="code" href="max30102_8h.html#a7d161a2394a67a2176d549edb94f4191">REG_INTR_STATUS_1</a>,&amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac5e493da8cbdd1414d56e8f08282fcc2">uch_dummy</a>);  <span class="comment">//Reads/clears the interrupt status register</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="keywordflow">while</span>(Serial.available()==0)  <span class="comment">//wait until user presses a key</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    Serial.write(27);       <span class="comment">// ESC command</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    Serial.print(F(<span class="stringliteral">&quot;[2J&quot;</span>));    <span class="comment">// clear screen command</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_LILYPAD_USB)    </span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="preprocessor"></span>    Serial.println(F(<span class="stringliteral">&quot;Lilypad&quot;</span>));</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#if defined(ARDUINO_AVR_FLORA8)</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="preprocessor"></span>    Serial.println(F(<span class="stringliteral">&quot;Adafruit Flora&quot;</span>));</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="preprocessor"></span>    Serial.println(F(<span class="stringliteral">&quot;Press any key to start conversion&quot;</span>));</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    delay(1000);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac5e493da8cbdd1414d56e8f08282fcc2">uch_dummy</a>=Serial.read();</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  <a class="code" href="max30102_8cpp.html#a4113aeee76935425d8a557a79a4193df" title="Initialize the MAX30102.">maxim_max30102_init</a>();  <span class="comment">//initialize the MAX30102</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;}</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment">// the loop routine runs over and over again forever:</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno"><a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#afe461d27b9c48d5921c00d521181f12f">  144</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#afe461d27b9c48d5921c00d521181f12f">loop</a>() {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  uint32_t un_min, un_max, un_prev_data, un_brightness;  <span class="comment">//variables to calculate the on-board LED brightness that reflects the heartbeats</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  int32_t i;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="keywordtype">float</span> f_temp;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  un_brightness=0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  un_min=0x3FFFF;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  un_max=0;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>=100;  <span class="comment">//buffer length of 100 stores 4 seconds of samples running at 25sps</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  <span class="comment">//read the first 100 samples, and determine the signal range</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>;i++)</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">while</span>(digitalRead(10)==1);  <span class="comment">//wait until the interrupt pin asserts</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <a class="code" href="max30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>((<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>+i), (<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>+i));  <span class="comment">//read from MAX30102 FIFO</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <span class="keywordflow">if</span>(un_min&gt;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i])</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      un_min=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i];  <span class="comment">//update signal min</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keywordflow">if</span>(un_max&lt;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i])</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      un_max=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i];  <span class="comment">//update signal max</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    Serial.print(F(<span class="stringliteral">&quot;red=&quot;</span>));</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    Serial.print(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i], DEC);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    Serial.print(F(<span class="stringliteral">&quot;, ir=&quot;</span>));</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    Serial.println(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>[i], DEC);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  un_prev_data=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  <span class="comment">//calculate heart rate and SpO2 after first 100 samples (first 4 seconds of samples)</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  <a class="code" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6" title="Calculate the heart rate and SpO2 level.">maxim_heart_rate_and_oxygen_saturation</a>(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>, n_ir_buffer_length, <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>, &amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a54d8056bd9812e0b8f73f911dcc21dfd">n_spo2</a>, &amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a>, &amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a>, &amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a>); </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;  <span class="comment">//Continuously taking samples from MAX30102.  Heart rate and SpO2 are calculated every 1 second</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  <span class="keywordflow">while</span>(1)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;  {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    i=0;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    un_min=0x3FFFF;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    un_max=0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <span class="comment">//dumping the first 25 sets of samples in the memory and shift the last 75 sets of samples to the top</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    <span class="keywordflow">for</span>(i=25;i&lt;100;i++)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;      <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i-25]=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;      <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>[i-25]=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>[i];</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;      <span class="comment">//update the signal min and max</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      <span class="keywordflow">if</span>(un_min&gt;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i])</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        un_min=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;      <span class="keywordflow">if</span>(un_max&lt;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i])</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        un_max=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    }</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="comment">//take 25 sets of samples before calculating the heart rate.</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="keywordflow">for</span>(i=75;i&lt;100;i++)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;      un_prev_data=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i-1];</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;      <span class="keywordflow">while</span>(digitalRead(10)==1);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;      digitalWrite(9, !digitalRead(9));</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;      <a class="code" href="max30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>((<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>+i), (<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>+i));</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;      <span class="comment">//calculate the brightness of the LED</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;      <span class="keywordflow">if</span>(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i]&gt;un_prev_data)</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;      {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;        f_temp=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i]-un_prev_data;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        f_temp/=(un_max-un_min);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        f_temp*=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        f_temp=un_brightness-f_temp;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        <span class="keywordflow">if</span>(f_temp&lt;0)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;          un_brightness=0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;          un_brightness=(int)f_temp;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;      }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;      <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;      {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        f_temp=un_prev_data-<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        f_temp/=(un_max-un_min);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        f_temp*=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        un_brightness+=(int)f_temp;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        <span class="keywordflow">if</span>(un_brightness&gt;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>)</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;          un_brightness=<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_LILYPAD_USB)  </span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="preprocessor"></span>      analogWrite(13, un_brightness);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_FLORA8)</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="preprocessor"></span>      LED.<a class="code" href="class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1">setPixelColor</a>(0, un_brightness/BRIGHTNESS_DIVISOR, 0, 0);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;      LED.<a class="code" href="class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7">show</a>();</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;      <span class="comment">//send samples and calculation result to terminal program through UART</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;      Serial.print(F(<span class="stringliteral">&quot;red=&quot;</span>));</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;      Serial.print(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>[i], DEC);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;      Serial.print(F(<span class="stringliteral">&quot;, ir=&quot;</span>));</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;      Serial.print(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>[i], DEC);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;      </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;      Serial.print(F(<span class="stringliteral">&quot;, HR=&quot;</span>));</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;      Serial.print(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a>, DEC);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;      </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;      Serial.print(F(<span class="stringliteral">&quot;, HRvalid=&quot;</span>));</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;      Serial.print(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a>, DEC);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;      </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;      Serial.print(F(<span class="stringliteral">&quot;, SPO2=&quot;</span>));</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;      Serial.print(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a54d8056bd9812e0b8f73f911dcc21dfd">n_spo2</a>, DEC);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      Serial.print(F(<span class="stringliteral">&quot;, SPO2Valid=&quot;</span>));</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;      Serial.println(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a>, DEC);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <a class="code" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6" title="Calculate the heart rate and SpO2 level.">maxim_heart_rate_and_oxygen_saturation</a>(<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a602d2fccfb9f55d84f81b0c4d6f01589">aun_ir_buffer</a>, n_ir_buffer_length, <a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#aac1c23af668ef1d6750bfd4a5f6422fe">aun_red_buffer</a>, &amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a54d8056bd9812e0b8f73f911dcc21dfd">n_spo2</a>, &amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a>, &amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a>, &amp;<a class="code" href="_r_d117___a_r_d_u_i_n_o_8ino.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a>); </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  }</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;}</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160; </div>
+</div><!-- fragment --></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="_r_d117___a_r_d_u_i_n_o_8ino.html">RD117_ARDUINO.ino</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h.html
new file mode 100644
index 000000000..7ac8bbe70
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h.html
@@ -0,0 +1,654 @@
+<!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/SoftI2CMaster.h 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('_soft_i2_c_master_8h.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="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">SoftI2CMaster.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;avr/io.h&gt;</code><br/>
+<code>#include &lt;Arduino.h&gt;</code><br/>
+</div>
+<p><a href="_soft_i2_c_master_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ae00bf2b1fa56ce97ea467dc60682022c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#ae00bf2b1fa56ce97ea467dc60682022c">SOFTI2DMASTER_H_</a></td></tr>
+<tr class="separator:ae00bf2b1fa56ce97ea467dc60682022c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa3215f0aa766367f5d34bee80929152"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#afa3215f0aa766367f5d34bee80929152">I2C_TIMEOUT</a>&#160;&#160;&#160;100</td></tr>
+<tr class="separator:afa3215f0aa766367f5d34bee80929152"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a206ca6aa556565db88a5302050eb3936"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a206ca6aa556565db88a5302050eb3936">I2C_NOINTERRUPT</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a206ca6aa556565db88a5302050eb3936"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e1c9e6ca00fe824f98e8b7310589f5f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a0e1c9e6ca00fe824f98e8b7310589f5f">I2C_SLOWMODE</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a0e1c9e6ca00fe824f98e8b7310589f5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c3c7226e23b36189d1ec6b7d3504499"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a8c3c7226e23b36189d1ec6b7d3504499">FAC</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a8c3c7226e23b36189d1ec6b7d3504499"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e64b8013968d3d107154c4044643481"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a9e64b8013968d3d107154c4044643481">I2C_CPUFREQ</a>&#160;&#160;&#160;(F_CPU/<a class="el" href="_soft_i2_c_master_8h.html#a8c3c7226e23b36189d1ec6b7d3504499">FAC</a>)</td></tr>
+<tr class="separator:a9e64b8013968d3d107154c4044643481"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3bf497cc1d59d184775241e80a21085e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a3bf497cc1d59d184775241e80a21085e">_SOFTI2C_H</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a3bf497cc1d59d184775241e80a21085e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a954e80e3d9812f381eb05af7e7081cc2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a954e80e3d9812f381eb05af7e7081cc2">I2C_FASTMODE</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a954e80e3d9812f381eb05af7e7081cc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae704dfa4c0384f5d618fbfd14e0dec80"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#ae704dfa4c0384f5d618fbfd14e0dec80">I2C_TIMEOUT_DELAY_LOOPS</a>&#160;&#160;&#160;(<a class="el" href="_soft_i2_c_master_8h.html#a9e64b8013968d3d107154c4044643481">I2C_CPUFREQ</a>/1000UL)*I2C_TIMEOUT/4000UL</td></tr>
+<tr class="separator:ae704dfa4c0384f5d618fbfd14e0dec80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a970e76c45294e29445ecbf139e6c386a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a970e76c45294e29445ecbf139e6c386a">I2C_MAX_STRETCH</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a970e76c45294e29445ecbf139e6c386a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2af652afc14dc884cb2b42683d45c8df"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a>&#160;&#160;&#160;(((<a class="el" href="_soft_i2_c_master_8h.html#a9e64b8013968d3d107154c4044643481">I2C_CPUFREQ</a>/25000L)/2-19)/3)</td></tr>
+<tr class="separator:a2af652afc14dc884cb2b42683d45c8df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5c0fbe837494c5f9130a5914854250d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#ab5c0fbe837494c5f9130a5914854250d">I2C_READ</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:ab5c0fbe837494c5f9130a5914854250d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9536bf85bced4f4e549a82fb18eb6140"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a9536bf85bced4f4e549a82fb18eb6140">I2C_WRITE</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a9536bf85bced4f4e549a82fb18eb6140"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16bb6708250d17ee2118d29e4865a653"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">SDA_DDR</a>&#160;&#160;&#160;(_SFR_IO_ADDR(SDA_PORT) - 1)</td></tr>
+<tr class="separator:a16bb6708250d17ee2118d29e4865a653"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5020a160f5b8f0a1697cfadbe778424b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b">SCL_DDR</a>&#160;&#160;&#160;(_SFR_IO_ADDR(SCL_PORT) - 1)</td></tr>
+<tr class="separator:a5020a160f5b8f0a1697cfadbe778424b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae154abbe60d159b6f4951ade68cc5fae"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#ae154abbe60d159b6f4951ade68cc5fae">SDA_OUT</a>&#160;&#160;&#160;_SFR_IO_ADDR(SDA_PORT)</td></tr>
+<tr class="separator:ae154abbe60d159b6f4951ade68cc5fae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a07204a69a1872edbb272cde4d0c1e23f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a07204a69a1872edbb272cde4d0c1e23f">SCL_OUT</a>&#160;&#160;&#160;_SFR_IO_ADDR(SCL_PORT)</td></tr>
+<tr class="separator:a07204a69a1872edbb272cde4d0c1e23f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4b553fc156d15aeeeaaf6cfe7695c83"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#ac4b553fc156d15aeeeaaf6cfe7695c83">SDA_IN</a>&#160;&#160;&#160;(_SFR_IO_ADDR(SDA_PORT) - 2)</td></tr>
+<tr class="separator:ac4b553fc156d15aeeeaaf6cfe7695c83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10c618a025b8bdb8ea596fdc24197f49"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>&#160;&#160;&#160;(_SFR_IO_ADDR(SCL_PORT) - 2)</td></tr>
+<tr class="separator:a10c618a025b8bdb8ea596fdc24197f49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0e6fc492b674d6ccceccb06e3bbf907b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a0e6fc492b674d6ccceccb06e3bbf907b">__tmp_reg__</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a0e6fc492b674d6ccceccb06e3bbf907b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a342f1dd5ca489cfb78fffa200fcee9d9"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="el" href="_soft_i2_c_master_8h.html#ad5dc48c57198db1ee444a61405d2ea3d">i2c_init</a>(void)</td></tr>
+<tr class="separator:a342f1dd5ca489cfb78fffa200fcee9d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ccdf1a08647bd236d7988a794dc403c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a2ccdf1a08647bd236d7988a794dc403c">i2c_delay_half</a> (void)</td></tr>
+<tr class="separator:a2ccdf1a08647bd236d7988a794dc403c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55c46a9ce2c4eaec0c5878436a4a6b5b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a55c46a9ce2c4eaec0c5878436a4a6b5b">i2c_wait_scl_high</a> (void)</td></tr>
+<tr class="separator:a55c46a9ce2c4eaec0c5878436a4a6b5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad5dc48c57198db1ee444a61405d2ea3d"><td class="memItemLeft" align="right" valign="top">boolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#ad5dc48c57198db1ee444a61405d2ea3d">i2c_init</a> (void)</td></tr>
+<tr class="separator:ad5dc48c57198db1ee444a61405d2ea3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a876a5d83cf8b5fa662b04a81657d8d30"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a876a5d83cf8b5fa662b04a81657d8d30">i2c_start</a> (uint8_t addr)</td></tr>
+<tr class="separator:a876a5d83cf8b5fa662b04a81657d8d30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68105c3bb259544bcc000c21b8e5d355"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a68105c3bb259544bcc000c21b8e5d355">i2c_rep_start</a> (uint8_t addr)</td></tr>
+<tr class="separator:a68105c3bb259544bcc000c21b8e5d355"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e2e89e9b3cb2a075d3d46bb148a42e9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a5e2e89e9b3cb2a075d3d46bb148a42e9">i2c_start_wait</a> (uint8_t addr)</td></tr>
+<tr class="separator:a5e2e89e9b3cb2a075d3d46bb148a42e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad35d4e4f52ca74b503d5e5e1e0a3f5f3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#ad35d4e4f52ca74b503d5e5e1e0a3f5f3">i2c_stop</a> (void)</td></tr>
+<tr class="separator:ad35d4e4f52ca74b503d5e5e1e0a3f5f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5abe73d680cae254aafa5227e6d87a13"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13">i2c_write</a> (uint8_t value)</td></tr>
+<tr class="separator:a5abe73d680cae254aafa5227e6d87a13"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a717c8440b070832a7d3375cfd5a526ef"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a> (bool last)</td></tr>
+<tr class="separator:a717c8440b070832a7d3375cfd5a526ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a0e6fc492b674d6ccceccb06e3bbf907b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define __tmp_reg__&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00199">199</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3bf497cc1d59d184775241e80a21085e"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define _SOFTI2C_H&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00085">85</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8c3c7226e23b36189d1ec6b7d3504499"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FAC&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00081">81</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9e64b8013968d3d107154c4044643481"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_CPUFREQ&#160;&#160;&#160;(F_CPU/<a class="el" href="_soft_i2_c_master_8h.html#a8c3c7226e23b36189d1ec6b7d3504499">FAC</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00082">82</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2af652afc14dc884cb2b42683d45c8df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_DELAY_COUNTER&#160;&#160;&#160;(((<a class="el" href="_soft_i2_c_master_8h.html#a9e64b8013968d3d107154c4044643481">I2C_CPUFREQ</a>/25000L)/2-19)/3)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00174">174</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a954e80e3d9812f381eb05af7e7081cc2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_FASTMODE&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00129">129</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a970e76c45294e29445ecbf139e6c386a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_MAX_STRETCH&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00161">161</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a206ca6aa556565db88a5302050eb3936"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_NOINTERRUPT&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00079">79</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab5c0fbe837494c5f9130a5914854250d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_READ&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00187">187</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0e1c9e6ca00fe824f98e8b7310589f5f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_SLOWMODE&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00080">80</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa3215f0aa766367f5d34bee80929152"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_TIMEOUT&#160;&#160;&#160;100</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00078">78</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae704dfa4c0384f5d618fbfd14e0dec80"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_TIMEOUT_DELAY_LOOPS&#160;&#160;&#160;(<a class="el" href="_soft_i2_c_master_8h.html#a9e64b8013968d3d107154c4044643481">I2C_CPUFREQ</a>/1000UL)*I2C_TIMEOUT/4000UL</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00159">159</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9536bf85bced4f4e549a82fb18eb6140"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_WRITE&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00188">188</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5020a160f5b8f0a1697cfadbe778424b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SCL_DDR&#160;&#160;&#160;(_SFR_IO_ADDR(SCL_PORT) - 1)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00192">192</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a10c618a025b8bdb8ea596fdc24197f49"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SCL_IN&#160;&#160;&#160;(_SFR_IO_ADDR(SCL_PORT) - 2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00196">196</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a07204a69a1872edbb272cde4d0c1e23f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SCL_OUT&#160;&#160;&#160;_SFR_IO_ADDR(SCL_PORT)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00194">194</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a16bb6708250d17ee2118d29e4865a653"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SDA_DDR&#160;&#160;&#160;(_SFR_IO_ADDR(SDA_PORT) - 1)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00191">191</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4b553fc156d15aeeeaaf6cfe7695c83"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SDA_IN&#160;&#160;&#160;(_SFR_IO_ADDR(SDA_PORT) - 2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00195">195</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae154abbe60d159b6f4951ade68cc5fae"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SDA_OUT&#160;&#160;&#160;_SFR_IO_ADDR(SDA_PORT)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00193">193</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae00bf2b1fa56ce97ea467dc60682022c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define SOFTI2DMASTER_H_</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00059">59</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a342f1dd5ca489cfb78fffa200fcee9d9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void __attribute__ </td>
+          <td>(</td>
+          <td class="paramtype">(noinline)&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2ccdf1a08647bd236d7988a794dc403c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void i2c_delay_half </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00207">207</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad5dc48c57198db1ee444a61405d2ea3d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">boolean i2c_init </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00272">272</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a717c8440b070832a7d3375cfd5a526ef"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t i2c_read </td>
+          <td>(</td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>last</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00462">462</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a68105c3bb259544bcc000c21b8e5d355"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool i2c_rep_start </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>addr</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00313">313</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a876a5d83cf8b5fa662b04a81657d8d30"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool i2c_start </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>addr</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00295">295</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5e2e89e9b3cb2a075d3d46bb148a42e9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void i2c_start_wait </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>addr</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00338">338</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad35d4e4f52ca74b503d5e5e1e0a3f5f3"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void i2c_stop </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00365">365</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a55c46a9ce2c4eaec0c5878436a4a6b5b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void i2c_wait_scl_high </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00225">225</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5abe73d680cae254aafa5227e6d87a13"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool i2c_write </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>value</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_soft_i2_c_master_8h_source.html#l00385">385</a> of file <a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>.</p>
+
+</div>
+</div>
+</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="_soft_i2_c_master_8h.html">SoftI2CMaster.h</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h.js
new file mode 100644
index 000000000..bc44398ce
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h.js
@@ -0,0 +1,33 @@
+var _soft_i2_c_master_8h =
+[
+    [ "__tmp_reg__", "_soft_i2_c_master_8h.html#a0e6fc492b674d6ccceccb06e3bbf907b", null ],
+    [ "_SOFTI2C_H", "_soft_i2_c_master_8h.html#a3bf497cc1d59d184775241e80a21085e", null ],
+    [ "FAC", "_soft_i2_c_master_8h.html#a8c3c7226e23b36189d1ec6b7d3504499", null ],
+    [ "I2C_CPUFREQ", "_soft_i2_c_master_8h.html#a9e64b8013968d3d107154c4044643481", null ],
+    [ "I2C_DELAY_COUNTER", "_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df", null ],
+    [ "I2C_FASTMODE", "_soft_i2_c_master_8h.html#a954e80e3d9812f381eb05af7e7081cc2", null ],
+    [ "I2C_MAX_STRETCH", "_soft_i2_c_master_8h.html#a970e76c45294e29445ecbf139e6c386a", null ],
+    [ "I2C_NOINTERRUPT", "_soft_i2_c_master_8h.html#a206ca6aa556565db88a5302050eb3936", null ],
+    [ "I2C_READ", "_soft_i2_c_master_8h.html#ab5c0fbe837494c5f9130a5914854250d", null ],
+    [ "I2C_SLOWMODE", "_soft_i2_c_master_8h.html#a0e1c9e6ca00fe824f98e8b7310589f5f", null ],
+    [ "I2C_TIMEOUT", "_soft_i2_c_master_8h.html#afa3215f0aa766367f5d34bee80929152", null ],
+    [ "I2C_TIMEOUT_DELAY_LOOPS", "_soft_i2_c_master_8h.html#ae704dfa4c0384f5d618fbfd14e0dec80", null ],
+    [ "I2C_WRITE", "_soft_i2_c_master_8h.html#a9536bf85bced4f4e549a82fb18eb6140", null ],
+    [ "SCL_DDR", "_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b", null ],
+    [ "SCL_IN", "_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49", null ],
+    [ "SCL_OUT", "_soft_i2_c_master_8h.html#a07204a69a1872edbb272cde4d0c1e23f", null ],
+    [ "SDA_DDR", "_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653", null ],
+    [ "SDA_IN", "_soft_i2_c_master_8h.html#ac4b553fc156d15aeeeaaf6cfe7695c83", null ],
+    [ "SDA_OUT", "_soft_i2_c_master_8h.html#ae154abbe60d159b6f4951ade68cc5fae", null ],
+    [ "SOFTI2DMASTER_H_", "_soft_i2_c_master_8h.html#ae00bf2b1fa56ce97ea467dc60682022c", null ],
+    [ "__attribute__", "_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9", null ],
+    [ "i2c_delay_half", "_soft_i2_c_master_8h.html#a2ccdf1a08647bd236d7988a794dc403c", null ],
+    [ "i2c_init", "_soft_i2_c_master_8h.html#ad5dc48c57198db1ee444a61405d2ea3d", null ],
+    [ "i2c_read", "_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef", null ],
+    [ "i2c_rep_start", "_soft_i2_c_master_8h.html#a68105c3bb259544bcc000c21b8e5d355", null ],
+    [ "i2c_start", "_soft_i2_c_master_8h.html#a876a5d83cf8b5fa662b04a81657d8d30", null ],
+    [ "i2c_start_wait", "_soft_i2_c_master_8h.html#a5e2e89e9b3cb2a075d3d46bb148a42e9", null ],
+    [ "i2c_stop", "_soft_i2_c_master_8h.html#ad35d4e4f52ca74b503d5e5e1e0a3f5f3", null ],
+    [ "i2c_wait_scl_high", "_soft_i2_c_master_8h.html#a55c46a9ce2c4eaec0c5878436a4a6b5b", null ],
+    [ "i2c_write", "_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h_source.html
new file mode 100644
index 000000000..c7e7c80fb
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/_soft_i2_c_master_8h_source.html
@@ -0,0 +1,655 @@
+<!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/SoftI2CMaster.h Source File</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('_soft_i2_c_master_8h_source.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">SoftI2CMaster.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="_soft_i2_c_master_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/* Arduino SoftI2C library. </span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * This is a very fast and very light-weight software I2C-master library </span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * written in assembler. It is based on Peter Fleury&#39;s I2C software</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * library: http://homepage.hispeed.ch/peterfleury/avr-software.html</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * This Library is free software: you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * the Free Software Foundation, either version 3 of the License, or</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * This Library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * along with the Arduino I2cMaster Library.  If not, see</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * &lt;http://www.gnu.org/licenses/&gt;.</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment">/* In order to use the library, you need to define SDA_PIN, SCL_PIN,</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * SDA_PORT and SCL_PORT before including this file.  Have a look at</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> * http://www.arduino.cc/en/Reference/PortManipulation for finding out</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> * which values to use. For example, if you use digital pin 3 (corresponding </span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> * to PD3) for SDA and digital pin 13 (corresponding to PB5)</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> * for SCL on a standard Arduino,</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> * you have to use the following definitions: </span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> * #define SDA_PIN 3 </span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> * #define SDA_PORT PORTD</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> * #define SCL_PIN 5</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> * #define SCL_PORT PORTB</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> * You can also define the following constants (see also below):</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> * - I2C_CPUFREQ, when changing CPU clock frequency dynamically</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment"> * - I2C_FASTMODE = 1 meaning that the I2C bus allows speeds up to 400 kHz</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"> * - I2C_SLOWMODE = 1 meaning that the I2C bus will allow only up to 25 kHz </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"> * - I2C_NOINTERRUPT = 1 in order to prohibit interrupts while </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment"> *   communicating (see below). This can be useful if you use the library </span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment"> *   for communicationg with SMbus devices, which have timeouts.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment"> *   Note, however, that interrupts are disabled from issuing a start condition</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment"> *   until issuing a stop condition. So use this option with care!</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment"> * - I2C_TIMEOUT = 0..10000 mssec in order to return from the I2C functions</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment"> *   in case of a I2C bus lockup (i.e., SCL constantly low). 0 means no timeout</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">/* Changelog:</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment"> * Version 1.1: </span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment"> * - removed I2C_CLOCK_STRETCHING</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment"> * - added I2C_TIMEOUT time in msec (0..10000) until timeout or 0 if no timeout</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment"> * - changed i2c_init to return true iff both SDA and SCL are high</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment"> * - changed interrupt disabling so that the previous IRQ state is restored</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment"> * Version 1.0: basic functionality</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#ifndef SOFTI2CMASTER_H_</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#ae00bf2b1fa56ce97ea467dc60682022c">   59</a></span>&#160;<span class="preprocessor">#define SOFTI2DMASTER_H_</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor">#include &lt;avr/io.h&gt;</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#include &lt;Arduino.h&gt;</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_FLORA8) || defined(ARDUINO_AVR_LILYPAD_USB)</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SDA_PORT PORTD</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SDA_PIN 1</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SCL_PORT PORTD</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SCL_PIN 0</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">#ifdef ARDUINO_AVR_UNO</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SDA_PORT PORTC</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SDA_PIN 4</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SCL_PORT PORTC</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SCL_PIN 5</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#afa3215f0aa766367f5d34bee80929152">   78</a></span>&#160;<span class="preprocessor">#define I2C_TIMEOUT 100</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a206ca6aa556565db88a5302050eb3936">   79</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_NOINTERRUPT 0</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a0e1c9e6ca00fe824f98e8b7310589f5f">   80</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_SLOWMODE 1</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a8c3c7226e23b36189d1ec6b7d3504499">   81</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define FAC 1</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a9e64b8013968d3d107154c4044643481">   82</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_CPUFREQ (F_CPU/FAC)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#ifndef _SOFTI2C_H</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a3bf497cc1d59d184775241e80a21085e">   85</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define _SOFTI2C_H   1</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment">// Init function. Needs to be called once in the beginning.</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="comment">// Returns false if SDA or SCL are low, which probably means </span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment">// a I2C bus lockup or that the lines are not pulled up.</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="keywordtype">boolean</span> <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#ad5dc48c57198db1ee444a61405d2ea3d">i2c_init</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment">// Start transfer function: &lt;addr&gt; is the 8-bit I2C address (including the R/W</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment">// bit). </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="comment">// Return: true if the slave replies with an &quot;acknowledge&quot;, false otherwise</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#a876a5d83cf8b5fa662b04a81657d8d30">i2c_start</a>(uint8_t addr); </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment">// Similar to start function, but wait for an ACK! Be careful, this can </span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="comment">// result in an infinite loop!</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="keywordtype">void</span>  <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#a5e2e89e9b3cb2a075d3d46bb148a42e9">i2c_start_wait</a>(uint8_t addr);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="comment">// Repeated start function: After having claimed the bus with a start condition,</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="comment">// you can address another or the same chip again without an intervening </span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="comment">// stop condition.</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="comment">// Return: true if the slave replies with an &quot;acknowledge&quot;, false otherwise</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#a68105c3bb259544bcc000c21b8e5d355">i2c_rep_start</a>(uint8_t addr);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment">// Issue a stop condition, freeing the bus.</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="keywordtype">void</span> <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#ad35d4e4f52ca74b503d5e5e1e0a3f5f3">i2c_stop</a>(<span class="keywordtype">void</span>) asm(&quot;ass_i2c_stop&quot;);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="comment">// Write one byte to the slave chip that had been addressed</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="comment">// by the previous start call. &lt;value&gt; is the byte to be sent.</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="comment">// Return: true if the slave replies with an &quot;acknowledge&quot;, false otherwise</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13">i2c_write</a>(uint8_t value) asm(&quot;ass_i2c_write&quot;);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="comment">// Read one byte. If &lt;last&gt; is true, we send a NAK after having received </span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="comment">// the byte in order to terminate the read sequence. </span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;uint8_t <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keywordtype">bool</span> last);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="comment">// You can set I2C_CPUFREQ independently of F_CPU if you </span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="comment">// change the CPU frequency on the fly. If you do not define it,</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="comment">// it will use the value of F_CPU</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="preprocessor">#ifndef I2C_CPUFREQ</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_CPUFREQ F_CPU</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="comment">// If I2C_FASTMODE is set to 1, then the highest possible frequency below 400kHz</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="comment">// is selected. Be aware that not all slave chips may be able to deal with that!</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor">#ifndef I2C_FASTMODE</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a954e80e3d9812f381eb05af7e7081cc2">  129</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_FASTMODE 0</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="comment">// If I2C_FASTMODE is not defined or defined to be 0, then you can set</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="comment">// I2C_SLOWMODE to 1. In this case, the I2C frequency will not be higher </span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment">// than 25KHz. This could be useful for problematic buses.</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="preprocessor">#ifndef I2C_SLOWMODE</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_SLOWMODE 0</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="comment">// if I2C_NOINTERRUPT is 1, then the I2C routines are not interruptable.</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment">// This is most probably only necessary if you are using a 1MHz system clock,</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="comment">// you are communicating with a SMBus device, and you want to avoid timeouts.</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment">// Be aware that the interrupt bit is enabled after each call. So the</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment">// I2C functions should not be called in interrupt routines or critical regions.</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="preprocessor">#ifndef I2C_NOINTERRUPT</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_NOINTERRUPT 0</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="comment">// I2C_TIMEOUT can be set to a value between 1 and 10000.</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment">// If it is defined and nonzero, it leads to a timeout if the</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment">// SCL is low longer than I2C_TIMEOUT milliseconds, i.e., max timeout is 10 sec</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="preprocessor">#ifndef I2C_TIMEOUT</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_TIMEOUT 0</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#else </span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#if I2C_TIMEOUT &gt; 10000</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#error I2C_TIMEOUT is too large</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00159"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#ae704dfa4c0384f5d618fbfd14e0dec80">  159</a></span>&#160;<span class="preprocessor">#define I2C_TIMEOUT_DELAY_LOOPS (I2C_CPUFREQ/1000UL)*I2C_TIMEOUT/4000UL</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#if I2C_TIMEOUT_DELAY_LOOPS &lt; 1</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a970e76c45294e29445ecbf139e6c386a">  161</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_MAX_STRETCH 1</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#if I2C_TIMEOUT_DELAY_LOOPS &gt; 60000UL</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_MAX_STRETCH 60000UL</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_MAX_STRETCH I2C_TIMEOUT_DELAY_LOOPS</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="preprocessor">#if I2C_FASTMODE</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_DELAY_COUNTER (((I2C_CPUFREQ/400000L)/2-19)/3)</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#if I2C_SLOWMODE</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">  174</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_DELAY_COUNTER (((I2C_CPUFREQ/25000L)/2-19)/3)</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_DELAY_COUNTER (((I2C_CPUFREQ/100000L)/2-19)/3)</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="comment">// Table of I2C bus speed in kbit/sec:</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="comment">// CPU clock:           1MHz   2MHz    4MHz   8MHz   16MHz   20MHz</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="comment">// Fast I2C mode          40     80     150    300     400     400</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="comment">// Standard I2C mode      40     80     100    100     100     100</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="comment">// Slow I2C mode          25     25      25     25      25      25     </span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;<span class="comment">// constants for reading &amp; writing</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#ab5c0fbe837494c5f9130a5914854250d">  187</a></span>&#160;<span class="preprocessor">#define I2C_READ    1</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a9536bf85bced4f4e549a82fb18eb6140">  188</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_WRITE   0</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="comment">// map the IO register back into the IO address space</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">  191</a></span>&#160;<span class="preprocessor">#define SDA_DDR         (_SFR_IO_ADDR(SDA_PORT) - 1)</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b">  192</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SCL_DDR         (_SFR_IO_ADDR(SCL_PORT) - 1)</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#ae154abbe60d159b6f4951ade68cc5fae">  193</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SDA_OUT         _SFR_IO_ADDR(SDA_PORT)</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a07204a69a1872edbb272cde4d0c1e23f">  194</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SCL_OUT         _SFR_IO_ADDR(SCL_PORT)</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#ac4b553fc156d15aeeeaaf6cfe7695c83">  195</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SDA_IN      (_SFR_IO_ADDR(SDA_PORT) - 2)</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">  196</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define SCL_IN      (_SFR_IO_ADDR(SCL_PORT) - 2)</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="preprocessor">#ifndef __tmp_reg__</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a0e6fc492b674d6ccceccb06e3bbf907b">  199</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define __tmp_reg__ 0</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160; </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="comment">// Internal delay functions.</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="keywordtype">void</span> <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#a2ccdf1a08647bd236d7988a794dc403c">i2c_delay_half</a>(<span class="keywordtype">void</span>) asm(&quot;ass_i2c_delay_half&quot;);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="keywordtype">void</span> <a class="code" href="_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9">__attribute__</a> ((noinline)) <a class="code" href="_soft_i2_c_master_8h.html#a55c46a9ce2c4eaec0c5878436a4a6b5b">i2c_wait_scl_high</a>(<span class="keywordtype">void</span>) asm(&quot;ass_i2c_wait_scl_high&quot;);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;</div>
+<div class="line"><a name="l00207"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a2ccdf1a08647bd236d7988a794dc403c">  207</a></span>&#160;<span class="keywordtype">void</span>  <a class="code" href="_soft_i2_c_master_8h.html#a2ccdf1a08647bd236d7988a794dc403c">i2c_delay_half</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;{ <span class="comment">// function call 3 cycles =&gt; 3C</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="preprocessor">#if I2C_DELAY_COUNTER &lt; 1</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="preprocessor"></span>  __asm__ __volatile__ (<span class="stringliteral">&quot; ret&quot;</span>);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;  <span class="comment">// 7 cycles for call and return</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="preprocessor"></span>  __asm__ __volatile__ </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    (</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;     <span class="stringliteral">&quot; ldi      r25, %[DELAY]           ;load delay constant   ;; 4C \n\t&quot;</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;     <span class="stringliteral">&quot;_Lidelay: \n\t&quot;</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;     <span class="stringliteral">&quot; dec r25                          ;decrement counter     ;; 4C+xC \n\t&quot;</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;     <span class="stringliteral">&quot; brne _Lidelay                                           ;;5C+(x-1)2C+xC\n\t&quot;</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;     <span class="stringliteral">&quot; ret                                                     ;; 9C+(x-1)2C+xC = 7C+xC&quot;</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;     : : [DELAY] <span class="stringliteral">&quot;M&quot;</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> : <span class="stringliteral">&quot;r25&quot;</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  <span class="comment">// 7 cycles + 3 times x cycles</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div>
+<div class="line"><a name="l00225"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a55c46a9ce2c4eaec0c5878436a4a6b5b">  225</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_soft_i2_c_master_8h.html#a55c46a9ce2c4eaec0c5878436a4a6b5b">i2c_wait_scl_high</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;{</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="preprocessor">#if I2C_TIMEOUT &lt;= 0</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="preprocessor"></span>  __asm__ __volatile__ </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    (<span class="stringliteral">&quot;_Li2c_wait_stretch: \n\t&quot;</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;     <span class="stringliteral">&quot; sbis %[SCLIN],%[SCLPIN]  ;wait for SCL high \n\t&quot;</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;     <span class="stringliteral">&quot; rjmp _Li2c_wait_stretch \n\t&quot;</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;     <span class="stringliteral">&quot; cln                              ;signal: no timeout \n\t&quot;</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;     <span class="stringliteral">&quot; ret &quot;</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;     : : [SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>), [SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;<span class="preprocessor"></span>  __asm__ __volatile__ </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    ( <span class="stringliteral">&quot; ldi     r27, %[HISTRETCH]       ;load delay counter \n\t&quot;</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;      <span class="stringliteral">&quot; ldi     r26, %[LOSTRETCH] \n\t&quot;</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;      <span class="stringliteral">&quot;_Lwait_stretch: \n\t&quot;</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;      <span class="stringliteral">&quot; clr     __tmp_reg__             ;do next loop 255 times \n\t&quot;</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;      <span class="stringliteral">&quot;_Lwait_stretch_inner_loop: \n\t&quot;</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;      <span class="stringliteral">&quot; rcall   _Lcheck_scl_level       ;call check function   ;; 12C \n\t&quot;</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;      <span class="stringliteral">&quot; brpl    _Lstretch_done          ;done if N=0           ;; +1 = 13C\n\t&quot;</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;      <span class="stringliteral">&quot; dec     __tmp_reg__             ;dec inner loop counter;; +1 = 14C\n\t&quot;</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;      <span class="stringliteral">&quot; brne    _Lwait_stretch_inner_loop                      ;; +2 = 16C\n\t&quot;</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;      <span class="stringliteral">&quot; sbiw    r26,1                   ;dec outer loop counter \n\t&quot;</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      <span class="stringliteral">&quot; brne    _Lwait_stretch          ;continue with outer loop \n\t&quot;</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;      <span class="stringliteral">&quot; sen                             ;timeout -&gt; set N-bit=1 \n\t&quot;</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;      <span class="stringliteral">&quot; rjmp _Lwait_return              ;and return with N=1\n\t&quot;</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;      <span class="stringliteral">&quot;_Lstretch_done:                  ;SCL=1 sensed \n\t&quot;</span>            </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;      <span class="stringliteral">&quot; cln                             ;OK -&gt; clear N-bit \n\t&quot;</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;      <span class="stringliteral">&quot; rjmp _Lwait_return              ; and return with N=0 \n\t&quot;</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;      <span class="stringliteral">&quot;_Lcheck_scl_level:                                      ;; call = 3C\n\t&quot;</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;      <span class="stringliteral">&quot; cln                                                    ;; +1C = 4C \n\t&quot;</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;      <span class="stringliteral">&quot; sbic    %[SCLIN],%[SCLPIN]      ;skip if SCL still low ;; +2C = 6C \n\t&quot;</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;      <span class="stringliteral">&quot; rjmp    _Lscl_high                                     ;; +0C = 6C \n\t&quot;</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;      <span class="stringliteral">&quot; sen                                                    ;; +1 = 7C\n\t &quot;</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;      <span class="stringliteral">&quot;_Lscl_high: &quot;</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;      <span class="stringliteral">&quot; nop                                                    ;; +1C = 8C \n\t&quot;</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;      <span class="stringliteral">&quot; ret                             ;return N-Bit=1 if low ;; +4 = 12C\n\t&quot;</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;      <span class="stringliteral">&quot;_Lwait_return:&quot;</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;      : : [SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>), [SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN), </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    [HISTRETCH] <span class="stringliteral">&quot;M&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a970e76c45294e29445ecbf139e6c386a">I2C_MAX_STRETCH</a>&gt;&gt;8), </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    [LOSTRETCH] <span class="stringliteral">&quot;M&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a970e76c45294e29445ecbf139e6c386a">I2C_MAX_STRETCH</a>&amp;0xFF)</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;      : <span class="stringliteral">&quot;r26&quot;</span>, <span class="stringliteral">&quot;r27&quot;</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;</div>
+<div class="line"><a name="l00272"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#ad5dc48c57198db1ee444a61405d2ea3d">  272</a></span>&#160;<span class="keywordtype">boolean</span> <a class="code" href="_soft_i2_c_master_8h.html#ad5dc48c57198db1ee444a61405d2ea3d">i2c_init</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;{</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  __asm__ __volatile__ </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    (<span class="stringliteral">&quot; cbi      %[SDADDR],%[SDAPIN]     ;release SDA \n\t&quot;</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;     <span class="stringliteral">&quot; cbi      %[SCLDDR],%[SCLPIN]     ;release SCL \n\t&quot;</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;     <span class="stringliteral">&quot; cbi      %[SDAOUT],%[SDAPIN]     ;clear SDA output value \n\t&quot;</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;     <span class="stringliteral">&quot; cbi      %[SCLOUT],%[SCLPIN]     ;clear SCL output value \n\t&quot;</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;     <span class="stringliteral">&quot; clr      r24                     ;set return value to false \n\t&quot;</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;     <span class="stringliteral">&quot; clr      r25                     ;set return value to false \n\t&quot;</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;     <span class="stringliteral">&quot; sbis     %[SDAIN],%[SDAPIN]      ;check for SDA high\n\t&quot;</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;     <span class="stringliteral">&quot; ret                              ;if low return with false \n\t&quot;</span>  </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;     <span class="stringliteral">&quot; sbis     %[SCLIN],%[SCLPIN]      ;check for SCL high \n\t&quot;</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;     <span class="stringliteral">&quot; ret                              ;if low return with false \n\t&quot;</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;     <span class="stringliteral">&quot; ldi      r24,1                   ;set return value to true \n\t&quot;</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;     <span class="stringliteral">&quot; ret &quot;</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;     : :</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;       [SCLDDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b">SCL_DDR</a>), [SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN), </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;       [SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>), [SCLOUT] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a07204a69a1872edbb272cde4d0c1e23f">SCL_OUT</a>),</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;       [SDADDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">SDA_DDR</a>), [SDAPIN] <span class="stringliteral">&quot;I&quot;</span> (SDA_PIN), </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;       [SDAIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#ac4b553fc156d15aeeeaaf6cfe7695c83">SDA_IN</a>), [SDAOUT] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#ae154abbe60d159b6f4951ade68cc5fae">SDA_OUT</a>)); </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;}</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;</div>
+<div class="line"><a name="l00295"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a876a5d83cf8b5fa662b04a81657d8d30">  295</a></span>&#160;<span class="keywordtype">bool</span>  <a class="code" href="_soft_i2_c_master_8h.html#a876a5d83cf8b5fa662b04a81657d8d30">i2c_start</a>(uint8_t addr)</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;{</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;  __asm__ __volatile__ </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    (</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a206ca6aa556565db88a5302050eb3936">I2C_NOINTERRUPT</a></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;     <span class="stringliteral">&quot; cli                              ;clear IRQ bit \n\t&quot;</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;#endif</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;     <span class="stringliteral">&quot; sbis     %[SCLIN],%[SCLPIN]      ;check for clock stretching slave\n\t&quot;</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_wait_scl_high   ;wait until SCL=H\n\t&quot;</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;     <span class="stringliteral">&quot; sbi      %[SDADDR],%[SDAPIN]     ;force SDA low  \n\t&quot;</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half      ;wait T/2 \n\t&quot;</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_write           ;now write address \n\t&quot;</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;     <span class="stringliteral">&quot; ret&quot;</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;     : : [SDADDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">SDA_DDR</a>), [SDAPIN] <span class="stringliteral">&quot;I&quot;</span> (SDA_PIN),</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;       [SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>),[SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN)); </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// we never return here!</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;}</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;</div>
+<div class="line"><a name="l00313"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a68105c3bb259544bcc000c21b8e5d355">  313</a></span>&#160;<span class="keywordtype">bool</span>  <a class="code" href="_soft_i2_c_master_8h.html#a68105c3bb259544bcc000c21b8e5d355">i2c_rep_start</a>(uint8_t addr)</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;{</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;  __asm__ __volatile__ </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    (</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a206ca6aa556565db88a5302050eb3936">I2C_NOINTERRUPT</a></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;     <span class="stringliteral">&quot; cli \n\t&quot;</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;#endif</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;     <span class="stringliteral">&quot; sbi  %[SCLDDR],%[SCLPIN] ;force SCL low \n\t&quot;</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay  T/2 \n\t&quot;</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;     <span class="stringliteral">&quot; cbi  %[SDADDR],%[SDAPIN] ;release SDA \n\t&quot;</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2 \n\t&quot;</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;     <span class="stringliteral">&quot; cbi  %[SCLDDR],%[SCLPIN] ;release SCL \n\t&quot;</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay  T/2 \n\t&quot;</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;     <span class="stringliteral">&quot; sbis     %[SCLIN],%[SCLPIN]      ;check for clock stretching slave\n\t&quot;</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_wait_scl_high   ;wait until SCL=H\n\t&quot;</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;     <span class="stringliteral">&quot; sbi  %[SDADDR],%[SDAPIN] ;force SDA low \n\t&quot;</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay  T/2 \n\t&quot;</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_write       \n\t&quot;</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;     <span class="stringliteral">&quot; ret&quot;</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;     : : [SCLDDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b">SCL_DDR</a>), [SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN),[SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>),</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;         [SDADDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">SDA_DDR</a>), [SDAPIN] <span class="stringliteral">&quot;I&quot;</span> (SDA_PIN)); </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// just to fool the compiler</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;}</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;</div>
+<div class="line"><a name="l00338"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a5e2e89e9b3cb2a075d3d46bb148a42e9">  338</a></span>&#160;<span class="keywordtype">void</span>  <a class="code" href="_soft_i2_c_master_8h.html#a5e2e89e9b3cb2a075d3d46bb148a42e9">i2c_start_wait</a>(uint8_t addr)</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;{</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160; __asm__ __volatile__ </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;   (</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    <span class="stringliteral">&quot; push  r24                     ;save original parameter \n\t&quot;</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <span class="stringliteral">&quot;_Li2c_start_wait1: \n\t&quot;</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <span class="stringliteral">&quot; pop       r24                     ;restore original parameter\n\t&quot;</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <span class="stringliteral">&quot; push      r24                     ;and save again \n\t&quot;</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a206ca6aa556565db88a5302050eb3936">I2C_NOINTERRUPT</a></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="stringliteral">&quot; cli                               ;disable interrupts \n\t&quot;</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;#endif</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <span class="stringliteral">&quot; sbis     %[SCLIN],%[SCLPIN]      ;check for clock stretching slave\n\t&quot;</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <span class="stringliteral">&quot; rcall    ass_i2c_wait_scl_high   ;wait until SCL=H\n\t&quot;</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    <span class="stringliteral">&quot; sbi   %[SDADDR],%[SDAPIN] ;force SDA low \n\t&quot;</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    <span class="stringliteral">&quot; rcall     ass_i2c_delay_half  ;delay T/2 \n\t&quot;</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    <span class="stringliteral">&quot; rcall     ass_i2c_write           ;write address \n\t&quot;</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <span class="stringliteral">&quot; tst   r24             ;if device not busy -&gt; done \n\t&quot;</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="stringliteral">&quot; brne  _Li2c_start_wait_done \n\t&quot;</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <span class="stringliteral">&quot; rcall ass_i2c_stop            ;terminate write &amp; enable IRQ \n\t&quot;</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    <span class="stringliteral">&quot; rjmp  _Li2c_start_wait1   ;device busy, poll ack again \n\t&quot;</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    <span class="stringliteral">&quot;_Li2c_start_wait_done: \n\t&quot;</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    <span class="stringliteral">&quot; pop       __tmp_reg__             ;pop off orig argument \n\t&quot;</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    <span class="stringliteral">&quot; ret &quot;</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    : : [SDADDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">SDA_DDR</a>), [SDAPIN] <span class="stringliteral">&quot;I&quot;</span> (SDA_PIN),</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;      [SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>),[SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN)); </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;}</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;</div>
+<div class="line"><a name="l00365"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#ad35d4e4f52ca74b503d5e5e1e0a3f5f3">  365</a></span>&#160;<span class="keywordtype">void</span>  <a class="code" href="_soft_i2_c_master_8h.html#ad35d4e4f52ca74b503d5e5e1e0a3f5f3">i2c_stop</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;{</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;  __asm__ __volatile__ </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    (</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;     <span class="stringliteral">&quot; sbi      %[SCLDDR],%[SCLPIN]     ;force SCL low \n\t&quot;</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;     <span class="stringliteral">&quot; sbi      %[SDADDR],%[SDAPIN]     ;force SDA low \n\t&quot;</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half      ;T/2 delay \n\t&quot;</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;     <span class="stringliteral">&quot; cbi      %[SCLDDR],%[SCLPIN]     ;release SCL \n\t&quot;</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half      ;T/2 delay \n\t&quot;</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;     <span class="stringliteral">&quot; sbis     %[SCLIN],%[SCLPIN]      ;check for clock stretching slave\n\t&quot;</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_wait_scl_high   ;wait until SCL=H\n\t&quot;</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;     <span class="stringliteral">&quot; cbi      %[SDADDR],%[SDAPIN]     ;release SDA \n\t&quot;</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half \n\t&quot;</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a206ca6aa556565db88a5302050eb3936">I2C_NOINTERRUPT</a></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;     <span class="stringliteral">&quot; sei                              ;enable interrupts again!\n\t&quot;</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;#endif</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;     : : [SCLDDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b">SCL_DDR</a>), [SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN), [SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>),</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;         [SDADDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">SDA_DDR</a>), [SDAPIN] <span class="stringliteral">&quot;I&quot;</span> (SDA_PIN)); </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;}</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;</div>
+<div class="line"><a name="l00385"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13">  385</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13">i2c_write</a>(uint8_t value)</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;{</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;  __asm__ __volatile__ </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    (</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;     <span class="stringliteral">&quot; sec                              ;set carry flag \n\t&quot;</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;     <span class="stringliteral">&quot; rol      r24                     ;shift in carry and shift out MSB \n\t&quot;</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;     <span class="stringliteral">&quot; rjmp _Li2c_write_first \n\t&quot;</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;     <span class="stringliteral">&quot;_Li2c_write_bit:\n\t&quot;</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;     <span class="stringliteral">&quot; lsl      r24                     ;left shift into carry ;; 1C\n\t&quot;</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;     <span class="stringliteral">&quot;_Li2c_write_first:\n\t&quot;</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;     <span class="stringliteral">&quot; breq     _Li2c_get_ack           ;jump if TXreg is empty;; +1 = 2C \n\t&quot;</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;     <span class="stringliteral">&quot; sbi      %[SCLDDR],%[SCLPIN]     ;force SCL low         ;; +2 = 4C \n\t&quot;</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;     <span class="stringliteral">&quot; brcc     _Li2c_write_low                                ;;+1/+2=5/6C\n\t&quot;</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;     <span class="stringliteral">&quot; nop                                                     ;; +1 = 7C \n\t&quot;</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;     <span class="stringliteral">&quot; cbi %[SDADDR],%[SDAPIN]          ;release SDA           ;; +2 = 9C \n\t&quot;</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;     <span class="stringliteral">&quot; rjmp      _Li2c_write_high                              ;; +2 = 11C \n\t&quot;</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;     <span class="stringliteral">&quot;_Li2c_write_low: \n\t&quot;</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;     <span class="stringliteral">&quot; sbi  %[SDADDR],%[SDAPIN] ;force SDA low         ;; +2 = 9C \n\t&quot;</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;     <span class="stringliteral">&quot; rjmp _Li2c_write_high                               ;;+2 = 11C \n\t&quot;</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;     <span class="stringliteral">&quot;_Li2c_write_high: \n\t&quot;</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> &gt;= 1</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2             ;;+X = 11C+X\n\t&quot;</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;#endif</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;     <span class="stringliteral">&quot; cbi  %[SCLDDR],%[SCLPIN] ;release SCL           ;;+2 = 13C+X\n\t&quot;</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;     <span class="stringliteral">&quot; cln                              ;clear N-bit           ;;+1 = 14C+X\n\t&quot;</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;     <span class="stringliteral">&quot; sbis %[SCLIN],%[SCLPIN]  ;check for SCL high    ;;+2 = 16C+X\n\t&quot;</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_wait_scl_high \n\t&quot;</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;     <span class="stringliteral">&quot; brpl     _Ldelay_scl_high                              ;;+2 = 18C+X\n\t&quot;</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;     <span class="stringliteral">&quot;_Li2c_write_return_false: \n\t&quot;</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;     <span class="stringliteral">&quot; clr      r24                     ; return false because of timeout \n\t&quot;</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;     <span class="stringliteral">&quot; rjmp     _Li2c_write_return \n\t&quot;</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;     <span class="stringliteral">&quot;_Ldelay_scl_high: \n\t&quot;</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> &gt;= 1</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2             ;;+X= 18C+2X\n\t&quot;</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;#endif</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;     <span class="stringliteral">&quot; rjmp _Li2c_write_bit \n\t&quot;</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;     <span class="stringliteral">&quot;              ;; +2 = 20C +2X for one bit-loop \n\t&quot;</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;     <span class="stringliteral">&quot;_Li2c_get_ack: \n\t&quot;</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;     <span class="stringliteral">&quot; sbi  %[SCLDDR],%[SCLPIN] ;force SCL low ;; +2 = 5C \n\t&quot;</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;     <span class="stringliteral">&quot; cbi  %[SDADDR],%[SDAPIN] ;release SDA ;;+2 = 7C \n\t&quot;</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> &gt;= 1</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2 ;; +X = 7C+X \n\t&quot;</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;#endif</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;     <span class="stringliteral">&quot; clr  r25                                            ;; 17C+2X \n\t&quot;</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;     <span class="stringliteral">&quot; clr  r24             ;return 0              ;; 14C + X \n\t&quot;</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;     <span class="stringliteral">&quot; cbi  %[SCLDDR],%[SCLPIN] ;release SCL ;; +2 = 9C+X\n\t&quot;</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;     <span class="stringliteral">&quot;_Li2c_ack_wait: \n\t&quot;</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;     <span class="stringliteral">&quot; cln                              ; clear N-bit          ;; 10C + X\n\t&quot;</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;     <span class="stringliteral">&quot; sbis %[SCLIN],%[SCLPIN]  ;wait SCL high         ;; 12C + X \n\t&quot;</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_wait_scl_high \n\t&quot;</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;     <span class="stringliteral">&quot; brmi     _Li2c_write_return_false                       ;; 13C + X \n\t &quot;</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;     <span class="stringliteral">&quot; sbis %[SDAIN],%[SDAPIN]      ;if SDA hi -&gt; return 0 ;; 15C + X \n\t&quot;</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;     <span class="stringliteral">&quot; ldi  r24,1                   ;return true           ;; 16C + X \n\t&quot;</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> &gt;= 1</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2             ;; 16C + 2X \n\t&quot;</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;#endif</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;     <span class="stringliteral">&quot;_Li2c_write_return: \n\t&quot;</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;     <span class="stringliteral">&quot; sbi  %[SCLDDR],%[SCLPIN] ;force SCL low so SCL=H is short\n\t&quot;</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;     <span class="stringliteral">&quot; ret \n\t&quot;</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;     <span class="stringliteral">&quot;              ;; + 4 = 17C + 2X for acknowldge bit&quot;</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;     ::</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;      [SCLDDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b">SCL_DDR</a>), [SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN), [SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>),</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;      [SDADDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">SDA_DDR</a>), [SDAPIN] <span class="stringliteral">&quot;I&quot;</span> (SDA_PIN), [SDAIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#ac4b553fc156d15aeeeaaf6cfe7695c83">SDA_IN</a>)); </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// fooling the compiler</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;}</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;</div>
+<div class="line"><a name="l00462"></a><span class="lineno"><a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">  462</a></span>&#160;uint8_t <a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keywordtype">bool</span> last)</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;{</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  __asm__ __volatile__ </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    (</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;     <span class="stringliteral">&quot; ldi  r23,0x01 \n\t&quot;</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;     <span class="stringliteral">&quot;_Li2c_read_bit: \n\t&quot;</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;     <span class="stringliteral">&quot; sbi  %[SCLDDR],%[SCLPIN] ;force SCL low         ;; 2C \n\t&quot;</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;     <span class="stringliteral">&quot; cbi  %[SDADDR],%[SDAPIN] ;release SDA(prev. ACK);; 4C \n\t&quot;</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;     <span class="stringliteral">&quot; nop \n\t&quot;</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> &gt;= 1</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2             ;; 4C+X \n\t&quot;</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;#endif</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;     <span class="stringliteral">&quot; cbi  %[SCLDDR],%[SCLPIN] ;release SCL           ;; 6C + X \n\t&quot;</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> &gt;= 1</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2             ;; 6C + 2X \n\t&quot;</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;#endif</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;     <span class="stringliteral">&quot; cln                              ; clear N-bit          ;; 7C + 2X \n\t&quot;</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;     <span class="stringliteral">&quot; sbis     %[SCLIN], %[SCLPIN]     ;check for SCL high    ;; 9C +2X \n\t&quot;</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_wait_scl_high \n\t&quot;</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;     <span class="stringliteral">&quot; brmi     _Li2c_read_return       ;return if timeout     ;; 10C + 2X\n\t&quot;</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;     <span class="stringliteral">&quot; clc                  ;clear carry flag      ;; 11C + 2X\n\t&quot;</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;     <span class="stringliteral">&quot; sbic %[SDAIN],%[SDAPIN]  ;if SDA is high        ;; 11C + 2X\n\t&quot;</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;     <span class="stringliteral">&quot; sec                  ;set carry flag        ;; 12C + 2X\n\t&quot;</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;     <span class="stringliteral">&quot; rol  r23             ;store bit             ;; 13C + 2X\n\t&quot;</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;     <span class="stringliteral">&quot; brcc _Li2c_read_bit          ;while receiv reg not full \n\t&quot;</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;     <span class="stringliteral">&quot;                         ;; 15C + 2X for one bit loop \n\t&quot;</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;     </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;     <span class="stringliteral">&quot;_Li2c_put_ack: \n\t&quot;</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;     <span class="stringliteral">&quot; sbi  %[SCLDDR],%[SCLPIN] ;force SCL low         ;; 2C \n\t&quot;</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;     <span class="stringliteral">&quot; cpi  r24,0                                          ;; 3C \n\t&quot;</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;     <span class="stringliteral">&quot; breq _Li2c_put_ack_low   ;if (ack=0) ;; 5C \n\t&quot;</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;     <span class="stringliteral">&quot; cbi  %[SDADDR],%[SDAPIN] ;release SDA \n\t&quot;</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;     <span class="stringliteral">&quot; rjmp _Li2c_put_ack_high \n\t&quot;</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;     <span class="stringliteral">&quot;_Li2c_put_ack_low:                ;else \n\t&quot;</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;     <span class="stringliteral">&quot; sbi  %[SDADDR],%[SDAPIN] ;force SDA low         ;; 7C \n\t&quot;</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;     <span class="stringliteral">&quot;_Li2c_put_ack_high: \n\t&quot;</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> &gt;= 1</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2             ;; 7C + X \n\t&quot;</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;#endif</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;     <span class="stringliteral">&quot; cbi  %[SCLDDR],%[SCLPIN] ;release SCL           ;; 9C +X \n\t&quot;</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;     <span class="stringliteral">&quot; cln                              ;clear N               ;; +1 = 10C\n\t&quot;</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;     <span class="stringliteral">&quot; sbis %[SCLIN],%[SCLPIN]  ;wait SCL high         ;; 12C + X\n\t&quot;</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_wait_scl_high \n\t&quot;</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;#<span class="keywordflow">if</span> <a class="code" href="_soft_i2_c_master_8h.html#a2af652afc14dc884cb2b42683d45c8df">I2C_DELAY_COUNTER</a> &gt;= 1</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;     <span class="stringliteral">&quot; rcall    ass_i2c_delay_half  ;delay T/2             ;; 11C + 2X\n\t&quot;</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;#endif</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;     <span class="stringliteral">&quot;_Li2c_read_return: \n\t&quot;</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;     <span class="stringliteral">&quot; nop \n\t &quot;</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;     <span class="stringliteral">&quot;sbi   %[SCLDDR],%[SCLPIN] ;force SCL low so SCL=H is short\n\t&quot;</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;     <span class="stringliteral">&quot; mov  r24,r23                                        ;; 12C + 2X \n\t&quot;</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;     <span class="stringliteral">&quot; clr  r25                                            ;; 13 C + 2X\n\t&quot;</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;     <span class="stringliteral">&quot; ret                                                     ;; 17C + X&quot;</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;     ::</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;      [SCLDDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b">SCL_DDR</a>), [SCLPIN] <span class="stringliteral">&quot;I&quot;</span> (SCL_PIN), [SCLIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49">SCL_IN</a>),</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;      [SDADDR] <span class="stringliteral">&quot;I&quot;</span>  (<a class="code" href="_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653">SDA_DDR</a>), [SDAPIN] <span class="stringliteral">&quot;I&quot;</span> (SDA_PIN), [SDAIN] <span class="stringliteral">&quot;I&quot;</span> (<a class="code" href="_soft_i2_c_master_8h.html#ac4b553fc156d15aeeeaaf6cfe7695c83">SDA_IN</a>) </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;     ); </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;  <span class="keywordflow">return</span> <span class="charliteral">&#39; &#39;</span>; <span class="comment">// fool the compiler!</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;}</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;<span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></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="_soft_i2_c_master_8h.html">SoftI2CMaster.h</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp.html
new file mode 100644
index 000000000..aa358edcd
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp.html
@@ -0,0 +1,485 @@
+<!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/algorithm/algorithm.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">
+$(document).ready(function(){initNavTree('algorithm_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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">algorithm.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="algorithm_8h_source.html">algorithm.h</a>&quot;</code><br/>
+<code>#include &quot;mbed.h&quot;</code><br/>
+</div>
+<p><a href="algorithm_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a62050365673e666cd0d661a3664c26e6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6">maxim_heart_rate_and_oxygen_saturation</a> (uint32_t *pun_ir_buffer, int32_t <a class="el" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid, int32_t *pn_heart_rate, int8_t *pch_hr_valid)</td></tr>
+<tr class="memdesc:a62050365673e666cd0d661a3664c26e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the heart rate and SpO2 level.  <a href="#a62050365673e666cd0d661a3664c26e6"></a><br/></td></tr>
+<tr class="separator:a62050365673e666cd0d661a3664c26e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a4e5ddbe0e04c48b166f2ff176667a9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9">maxim_find_peaks</a> (int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num)</td></tr>
+<tr class="memdesc:a2a4e5ddbe0e04c48b166f2ff176667a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find peaks.  <a href="#a2a4e5ddbe0e04c48b166f2ff176667a9"></a><br/></td></tr>
+<tr class="separator:a2a4e5ddbe0e04c48b166f2ff176667a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab95338e44281c269f0b9b0f529741bf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf">maxim_peaks_above_min_height</a> (int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height)</td></tr>
+<tr class="memdesc:aab95338e44281c269f0b9b0f529741bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find peaks above n_min_height.  <a href="#aab95338e44281c269f0b9b0f529741bf"></a><br/></td></tr>
+<tr class="separator:aab95338e44281c269f0b9b0f529741bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc6be68be81530d67a25c1a9905bec3a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a">maxim_remove_close_peaks</a> (int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_min_distance)</td></tr>
+<tr class="memdesc:adc6be68be81530d67a25c1a9905bec3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove peaks.  <a href="#adc6be68be81530d67a25c1a9905bec3a"></a><br/></td></tr>
+<tr class="separator:adc6be68be81530d67a25c1a9905bec3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6cae46e51640b712afc2ebeefd2d51ff"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff">maxim_sort_ascend</a> (int32_t *pn_x, int32_t n_size)</td></tr>
+<tr class="memdesc:a6cae46e51640b712afc2ebeefd2d51ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort array.  <a href="#a6cae46e51640b712afc2ebeefd2d51ff"></a><br/></td></tr>
+<tr class="separator:a6cae46e51640b712afc2ebeefd2d51ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44b6312f81810d4deb64071d12ab0060"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060">maxim_sort_indices_descend</a> (int32_t *pn_x, int32_t *pn_indx, int32_t n_size)</td></tr>
+<tr class="memdesc:a44b6312f81810d4deb64071d12ab0060"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort indices.  <a href="#a44b6312f81810d4deb64071d12ab0060"></a><br/></td></tr>
+<tr class="separator:a44b6312f81810d4deb64071d12ab0060"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><hr/>
+<p>Project: MAXREFDES117# Filename: <a class="el" href="algorithm_8cpp.html">algorithm.cpp</a> Description: This module calculates the heart rate/SpO2 level <hr/>
+<p>This code follows the following naming conventions:</p>
+<p>char ch_pmod_value char (array) s_pmod_s_string[16] float f_pmod_value int32_t n_pmod_value int32_t (array) an_pmod_value[16] int16_t w_pmod_value int16_t (array) aw_pmod_value[16] uint16_t uw_pmod_value uint16_t (array) auw_pmod_value[16] uint8_t uch_pmod_value uint8_t (array) auch_pmod_buffer[16] uint32_t un_pmod_value int32_t * pn_pmod_value <hr/>
+
+<p>Definition in file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2a4e5ddbe0e04c48b166f2ff176667a9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_find_peaks </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_locs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_npks</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_min_height</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_min_distance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_max_num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Find peaks. </p>
+<dl class="section user"><dt>Details</dt><dd>Find at most MAX_NUM peaks above MIN_HEIGHT separated by at least MIN_DISTANCE</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00254">254</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a62050365673e666cd0d661a3664c26e6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_heart_rate_and_oxygen_saturation </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_ir_buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_ir_buffer_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_red_buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_spo2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8_t *&#160;</td>
+          <td class="paramname"><em>pch_spo2_valid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_heart_rate</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8_t *&#160;</td>
+          <td class="paramname"><em>pch_hr_valid</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calculate the heart rate and SpO2 level. </p>
+<dl class="section user"><dt>Details</dt><dd>By detecting peaks of PPG cycle and corresponding AC/DC of red/infra-red signal, the ratio for the SPO2 is computed. Since this algorithm is aiming for Arm M0/M3. formaula for SPO2 did not achieve the accuracy due to register overflow. Thus, accurate SPO2 is precalculated and save longo uch_spo2_table[] per each ratio.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">*pun_ir_buffer</td><td>- IR sensor data buffer </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">n_ir_buffer_length</td><td>- IR sensor data buffer length </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">*pun_red_buffer</td><td>- Red sensor data buffer </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pn_spo2</td><td>- Calculated SpO2 value </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pch_spo2_valid</td><td>- 1 if the calculated SpO2 value is valid </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pn_heart_rate</td><td>- Calculated heart rate value </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pch_hr_valid</td><td>- 1 if the calculated heart rate value is valid</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00062">62</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aab95338e44281c269f0b9b0f529741bf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_peaks_above_min_height </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_locs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_npks</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_min_height</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Find peaks above n_min_height. </p>
+<dl class="section user"><dt>Details</dt><dd>Find all peaks above MIN_HEIGHT</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00268">268</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adc6be68be81530d67a25c1a9905bec3a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_remove_close_peaks </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_locs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_npks</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_min_distance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Remove peaks. </p>
+<dl class="section user"><dt>Details</dt><dd>Remove peaks separated by less than MIN_DISTANCE</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00299">299</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6cae46e51640b712afc2ebeefd2d51ff"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_sort_ascend </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sort array. </p>
+<dl class="section user"><dt>Details</dt><dd>Sort array in ascending order (insertion sort algorithm)</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00328">328</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a44b6312f81810d4deb64071d12ab0060"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_sort_indices_descend </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_indx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sort indices. </p>
+<dl class="section user"><dt>Details</dt><dd>Sort indices according to descending order (insertion sort algorithm)</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00346">346</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+</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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_19b53f07f52837a342947cc20e6d978f.html">algorithm</a></li><li class="navelem"><a class="el" href="algorithm_8cpp.html">algorithm.cpp</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp.js
new file mode 100644
index 000000000..75ef92fa1
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp.js
@@ -0,0 +1,9 @@
+var algorithm_8cpp =
+[
+    [ "maxim_find_peaks", "algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9", null ],
+    [ "maxim_heart_rate_and_oxygen_saturation", "algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6", null ],
+    [ "maxim_peaks_above_min_height", "algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf", null ],
+    [ "maxim_remove_close_peaks", "algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a", null ],
+    [ "maxim_sort_ascend", "algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff", null ],
+    [ "maxim_sort_indices_descend", "algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp_source.html
new file mode 100644
index 000000000..14c4cce0f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8cpp_source.html
@@ -0,0 +1,406 @@
+<!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/algorithm/algorithm.cpp Source File</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">
+$(document).ready(function(){initNavTree('algorithm_8cpp_source.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">algorithm.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="algorithm_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">* Permission is hereby granted, free of charge, to any person obtaining a</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">* copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">* to deal in the Software without restriction, including without limitation</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">* the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">* and/or sell copies of the Software, and to permit persons to whom the</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">* Software is furnished to do so, subject to the following conditions:</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">* The above copyright notice and this permission notice shall be included</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">* in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">* THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">* OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">* Except as contained in this notice, the name of Maxim Integrated</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">* Products, Inc. shall not be used except as stated in the Maxim Integrated</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">* Products, Inc. Branding Policy.</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">* The mere transfer of this software does not imply any licenses</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">* of trade secrets, proprietary technology, copyrights, patents,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">* trademarks, maskwork rights, or any other form of intellectual</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">* property whatsoever. Maxim Integrated Products, Inc. retains all</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">* ownership rights.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">*******************************************************************************</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="algorithm_8h.html">algorithm.h</a>&quot;</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#include &quot;mbed.h&quot;</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a62050365673e666cd0d661a3664c26e6">   62</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6" title="Calculate the heart rate and SpO2 level.">maxim_heart_rate_and_oxygen_saturation</a>(uint32_t *pun_ir_buffer,  int32_t <a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid, </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;                              int32_t *pn_heart_rate, int8_t  *pch_hr_valid)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;{</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    uint32_t un_ir_mean ,un_only_once ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    int32_t k ,n_i_ratio_count;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    int32_t i, s, m, n_exact_ir_valley_locs_count ,n_middle_idx;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    int32_t n_th1, n_npks,n_c_min;      </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    int32_t an_ir_valley_locs[15] ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    int32_t an_exact_ir_valley_locs[15] ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    int32_t an_dx_peak_locs[15] ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    int32_t n_peak_interval_sum;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    int32_t n_y_ac, n_x_ac;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    int32_t n_spo2_calc; </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    int32_t n_y_dc_max, n_x_dc_max; </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    int32_t n_y_dc_max_idx, n_x_dc_max_idx; </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    int32_t an_ratio[5],n_ratio_average; </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    int32_t n_nume,  n_denom ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="comment">// remove DC of ir signal    </span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    un_ir_mean =0; </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="keywordflow">for</span> (k=0 ; k&lt;<a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a> ; k++ ) un_ir_mean += pun_ir_buffer[k] ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    un_ir_mean =un_ir_mean/<a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a> ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">for</span> (k=0 ; k&lt;<a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a> ; k++ )  an_x[k] =  pun_ir_buffer[k] - un_ir_mean ; </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="comment">// 4 pt Moving Average</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="keywordflow">for</span>(k=0; k&lt; <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-<a class="code" href="algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae">MA4_SIZE</a>; k++){</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        n_denom= ( an_x[k]+an_x[k+1]+ an_x[k+2]+ an_x[k+3]);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        an_x[k]=  n_denom/(int32_t)4; </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <span class="comment">// get difference of smoothed IR signal</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="keywordflow">for</span>( k=0; k&lt;<a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-MA4_SIZE-1;  k++)</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        an_dx[k]= (an_x[k+1]- an_x[k]);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="comment">// 2-pt Moving Average to an_dx</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="keywordflow">for</span>(k=0; k&lt; <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-MA4_SIZE-2; k++){</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        an_dx[k] =  ( an_dx[k]+an_dx[k+1])/2 ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="comment">// hamming window</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="comment">// flip wave form so that we can detect valley with peak detector</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <span class="keywordflow">for</span> ( i=0 ; i&lt;<a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-<a class="code" href="algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8">HAMMING_SIZE</a>-MA4_SIZE-2 ;i++){</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        s= 0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <span class="keywordflow">for</span>( k=i; k&lt;i+ <a class="code" href="algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8">HAMMING_SIZE</a> ;k++){</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;            s -= an_dx[k] *<a class="code" href="algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929">auw_hamm</a>[k-i] ; </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;                     }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        an_dx[i]= s/ (int32_t)1146; <span class="comment">// divide by sum of auw_hamm </span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    n_th1=0; <span class="comment">// threshold calculation</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">for</span> ( k=0 ; k&lt;<a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-<a class="code" href="algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8">HAMMING_SIZE</a> ;k++){</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        n_th1 += ((an_dx[k]&gt;0)? an_dx[k] : ((int32_t)0-an_dx[k])) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    n_th1= n_th1/ ( <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-<a class="code" href="algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8">HAMMING_SIZE</a>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="comment">// peak location is acutally index for sharpest location of raw signal since we flipped the signal         </span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <a class="code" href="algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9" title="Find peaks.">maxim_find_peaks</a>( an_dx_peak_locs, &amp;n_npks, an_dx, <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-HAMMING_SIZE, n_th1, 8, 5 );<span class="comment">//peak_height, peak_distance, max_num_peaks </span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    n_peak_interval_sum =0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keywordflow">if</span> (n_npks&gt;=2){</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        <span class="keywordflow">for</span> (k=1; k&lt;n_npks; k++)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;            n_peak_interval_sum += (an_dx_peak_locs[k]-an_dx_peak_locs[k -1]);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        n_peak_interval_sum=n_peak_interval_sum/(n_npks-1);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        *pn_heart_rate=(int32_t)(6000/n_peak_interval_sum);<span class="comment">// beats per minutes</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        *pch_hr_valid  = 1;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keywordflow">else</span>  {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        *pn_heart_rate = -999;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        *pch_hr_valid  = 0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;            </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <span class="keywordflow">for</span> ( k=0 ; k&lt;n_npks ;k++)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        an_ir_valley_locs[k]=an_dx_peak_locs[k]+HAMMING_SIZE/2; </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="comment">// raw value : RED(=y) and IR(=X)</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="comment">// we need to assess DC and AC value of ir and red PPG. </span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="keywordflow">for</span> (k=0 ; k&lt;<a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a> ; k++ )  {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        an_x[k] =  pun_ir_buffer[k] ; </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        an_y[k] =  pun_red_buffer[k] ; </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    <span class="comment">// find precise min near an_ir_valley_locs</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    n_exact_ir_valley_locs_count =0; </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    <span class="keywordflow">for</span>(k=0 ; k&lt;n_npks ;k++){</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        un_only_once =1;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        m=an_ir_valley_locs[k];</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        n_c_min= 16777216;<span class="comment">//2^24;</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        <span class="keywordflow">if</span> (m+5 &lt;  <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-HAMMING_SIZE  &amp;&amp; m-5 &gt;0){</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;            <span class="keywordflow">for</span>(i= m-5;i&lt;m+5; i++)</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;                <span class="keywordflow">if</span> (an_x[i]&lt;n_c_min){</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;                    <span class="keywordflow">if</span> (un_only_once &gt;0){</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;                       un_only_once =0;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;                   } </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;                   n_c_min= an_x[i] ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;                   an_exact_ir_valley_locs[k]=i;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;                }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;            <span class="keywordflow">if</span> (un_only_once ==0)</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;                n_exact_ir_valley_locs_count ++ ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;        }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <span class="keywordflow">if</span> (n_exact_ir_valley_locs_count &lt;2 ){</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;       *pn_spo2 =  -999 ; <span class="comment">// do not use SPO2 since signal ratio is out of range</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;       *pch_spo2_valid  = 0; </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    <span class="comment">// 4 pt MA</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="keywordflow">for</span>(k=0; k&lt; <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-<a class="code" href="algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae">MA4_SIZE</a>; k++){</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        an_x[k]=( an_x[k]+an_x[k+1]+ an_x[k+2]+ an_x[k+3])/(int32_t)4;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        an_y[k]=( an_y[k]+an_y[k+1]+ an_y[k+2]+ an_y[k+3])/(int32_t)4;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <span class="comment">//using an_exact_ir_valley_locs , find ir-red DC andir-red AC for SPO2 calibration ratio</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="comment">//finding AC/DC maximum of raw ir * red between two valley locations</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    n_ratio_average =0; </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    n_i_ratio_count =0; </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keywordflow">for</span>(k=0; k&lt; 5; k++) an_ratio[k]=0;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keywordflow">for</span> (k=0; k&lt; n_exact_ir_valley_locs_count; k++){</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;        <span class="keywordflow">if</span> (an_exact_ir_valley_locs[k] &gt; <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a> ){             </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;            *pn_spo2 =  -999 ; <span class="comment">// do not use SPO2 since valley loc is out of range</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;            *pch_spo2_valid  = 0; </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;        }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <span class="comment">// find max between two valley locations </span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <span class="comment">// and use ratio betwen AC compoent of Ir &amp; Red and DC compoent of Ir &amp; Red for SPO2 </span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordflow">for</span> (k=0; k&lt; n_exact_ir_valley_locs_count-1; k++){</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        n_y_dc_max= -16777216 ; </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        n_x_dc_max= - 16777216; </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;        <span class="keywordflow">if</span> (an_exact_ir_valley_locs[k+1]-an_exact_ir_valley_locs[k] &gt;10){</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;            <span class="keywordflow">for</span> (i=an_exact_ir_valley_locs[k]; i&lt; an_exact_ir_valley_locs[k+1]; i++){</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;                <span class="keywordflow">if</span> (an_x[i]&gt; n_x_dc_max) {n_x_dc_max =an_x[i];n_x_dc_max_idx =i; }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                <span class="keywordflow">if</span> (an_y[i]&gt; n_y_dc_max) {n_y_dc_max =an_y[i];n_y_dc_max_idx=i;}</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;            }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;            n_y_ac= (an_y[an_exact_ir_valley_locs[k+1]] - an_y[an_exact_ir_valley_locs[k] ] )*(n_y_dc_max_idx -an_exact_ir_valley_locs[k]); <span class="comment">//red</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;            n_y_ac=  an_y[an_exact_ir_valley_locs[k]] + n_y_ac/ (an_exact_ir_valley_locs[k+1] - an_exact_ir_valley_locs[k])  ; </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;            n_y_ac=  an_y[n_y_dc_max_idx] - n_y_ac;    <span class="comment">// subracting linear DC compoenents from raw </span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;            n_x_ac= (an_x[an_exact_ir_valley_locs[k+1]] - an_x[an_exact_ir_valley_locs[k] ] )*(n_x_dc_max_idx -an_exact_ir_valley_locs[k]); <span class="comment">// ir</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;            n_x_ac=  an_x[an_exact_ir_valley_locs[k]] + n_x_ac/ (an_exact_ir_valley_locs[k+1] - an_exact_ir_valley_locs[k]); </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;            n_x_ac=  an_x[n_y_dc_max_idx] - n_x_ac;      <span class="comment">// subracting linear DC compoenents from raw </span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;            n_nume=( n_y_ac *n_x_dc_max)&gt;&gt;7 ; <span class="comment">//prepare X100 to preserve floating value</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;            n_denom= ( n_x_ac *n_y_dc_max)&gt;&gt;7;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;            <span class="keywordflow">if</span> (n_denom&gt;0  &amp;&amp; n_i_ratio_count &lt;5 &amp;&amp;  n_nume != 0)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;            {   </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;                an_ratio[n_i_ratio_count]= (n_nume*100)/n_denom ; <span class="comment">//formular is ( n_y_ac *n_x_dc_max) / ( n_x_ac *n_y_dc_max) ;</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;                n_i_ratio_count++;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;            }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        }</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <a class="code" href="algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff" title="Sort array.">maxim_sort_ascend</a>(an_ratio, n_i_ratio_count);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    n_middle_idx= n_i_ratio_count/2;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    <span class="keywordflow">if</span> (n_middle_idx &gt;1)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        n_ratio_average =( an_ratio[n_middle_idx-1] +an_ratio[n_middle_idx])/2; <span class="comment">// use median</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        n_ratio_average = an_ratio[n_middle_idx ];</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="keywordflow">if</span>( n_ratio_average&gt;2 &amp;&amp; n_ratio_average &lt;184){</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        n_spo2_calc= <a class="code" href="algorithm_8h.html#adfeeb6b08271807492803acc50347108">uch_spo2_table</a>[n_ratio_average] ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        *pn_spo2 = n_spo2_calc ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        *pch_spo2_valid  = 1;<span class="comment">//  float_SPO2 =  -45.060*n_ratio_average* n_ratio_average/10000 + 30.354 *n_ratio_average/100 + 94.845 ;  // for comparison with table</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        *pn_spo2 =  -999 ; <span class="comment">// do not use SPO2 since signal ratio is out of range</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        *pch_spo2_valid  = 0; </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;}</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div>
+<div class="line"><a name="l00254"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a2a4e5ddbe0e04c48b166f2ff176667a9">  254</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9" title="Find peaks.">maxim_find_peaks</a>(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num)</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;{</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <a class="code" href="algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf" title="Find peaks above n_min_height.">maxim_peaks_above_min_height</a>( pn_locs, pn_npks, pn_x, n_size, n_min_height );</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <a class="code" href="algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a" title="Remove peaks.">maxim_remove_close_peaks</a>( pn_locs, pn_npks, pn_x, n_min_distance );</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    *pn_npks = <a class="code" href="algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384">min</a>( *pn_npks, n_max_num );</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;}</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div>
+<div class="line"><a name="l00268"></a><span class="lineno"><a class="code" href="algorithm_8h.html#aab95338e44281c269f0b9b0f529741bf">  268</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf" title="Find peaks above n_min_height.">maxim_peaks_above_min_height</a>(int32_t *pn_locs, int32_t *pn_npks, int32_t  *pn_x, int32_t n_size, int32_t n_min_height)</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;{</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    int32_t i = 1, n_width;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    *pn_npks = 0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordflow">while</span> (i &lt; n_size-1){</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        <span class="keywordflow">if</span> (pn_x[i] &gt; n_min_height &amp;&amp; pn_x[i] &gt; pn_x[i-1]){            <span class="comment">// find left edge of potential peaks</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;            n_width = 1;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;            <span class="keywordflow">while</span> (i+n_width &lt; n_size &amp;&amp; pn_x[i] == pn_x[i+n_width])    <span class="comment">// find flat peaks</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;                n_width++;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;            <span class="keywordflow">if</span> (pn_x[i] &gt; pn_x[i+n_width] &amp;&amp; (*pn_npks) &lt; 15 ){                            <span class="comment">// find right edge of peaks</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;                pn_locs[(*pn_npks)++] = i;        </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;                <span class="comment">// for flat peaks, peak location is left edge</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;                i += n_width+1;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;            }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                i += n_width;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;            i++;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    }</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;}</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;</div>
+<div class="line"><a name="l00299"></a><span class="lineno"><a class="code" href="algorithm_8h.html#adc6be68be81530d67a25c1a9905bec3a">  299</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a" title="Remove peaks.">maxim_remove_close_peaks</a>(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_min_distance)</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;{</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    int32_t i, j, n_old_npks, n_dist;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="comment">/* Order peaks from large to small */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    <a class="code" href="algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060" title="Sort indices.">maxim_sort_indices_descend</a>( pn_x, pn_locs, *pn_npks );</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    <span class="keywordflow">for</span> ( i = -1; i &lt; *pn_npks; i++ ){</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        n_old_npks = *pn_npks;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        *pn_npks = i+1;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;        <span class="keywordflow">for</span> ( j = i+1; j &lt; n_old_npks; j++ ){</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;            n_dist =  pn_locs[j] - ( i == -1 ? -1 : pn_locs[i] ); <span class="comment">// lag-zero peak of autocorr is at index -1</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;            <span class="keywordflow">if</span> ( n_dist &gt; n_min_distance || n_dist &lt; -n_min_distance )</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;                pn_locs[(*pn_npks)++] = pn_locs[j];</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="comment">// Resort indices longo ascending order</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <a class="code" href="algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff" title="Sort array.">maxim_sort_ascend</a>( pn_locs, *pn_npks );</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;}</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a6cae46e51640b712afc2ebeefd2d51ff">  328</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff" title="Sort array.">maxim_sort_ascend</a>(int32_t *pn_x,int32_t n_size) </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;{</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    int32_t i, j, n_temp;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <span class="keywordflow">for</span> (i = 1; i &lt; n_size; i++) {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;        n_temp = pn_x[i];</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        <span class="keywordflow">for</span> (j = i; j &gt; 0 &amp;&amp; n_temp &lt; pn_x[j-1]; j--)</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;            pn_x[j] = pn_x[j-1];</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        pn_x[j] = n_temp;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;}</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;</div>
+<div class="line"><a name="l00346"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a44b6312f81810d4deb64071d12ab0060">  346</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060" title="Sort indices.">maxim_sort_indices_descend</a>(int32_t *pn_x, int32_t *pn_indx, int32_t n_size)</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;{</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    int32_t i, j, n_temp;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <span class="keywordflow">for</span> (i = 1; i &lt; n_size; i++) {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;        n_temp = pn_indx[i];</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;        <span class="keywordflow">for</span> (j = i; j &gt; 0 &amp;&amp; pn_x[n_temp] &gt; pn_x[pn_indx[j-1]]; j--)</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;            pn_indx[j] = pn_indx[j-1];</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        pn_indx[j] = n_temp;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;}</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;</div>
+</div><!-- fragment --></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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_19b53f07f52837a342947cc20e6d978f.html">algorithm</a></li><li class="navelem"><a class="el" href="algorithm_8cpp.html">algorithm.cpp</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h.html
new file mode 100644
index 000000000..1d4d38cdb
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h.html
@@ -0,0 +1,694 @@
+<!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/algorithm/algorithm.h 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">
+$(document).ready(function(){initNavTree('algorithm_8h.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">algorithm.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br/>
+</div>
+<p><a href="algorithm_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a41f9c5fb8b08eb5dc3edce4dcb37fee7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">true</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a41f9c5fb8b08eb5dc3edce4dcb37fee7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65e9886d74aaee76545e83dd09011727"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a65e9886d74aaee76545e83dd09011727">false</a>&#160;&#160;&#160;0</td></tr>
+<tr class="separator:a65e9886d74aaee76545e83dd09011727"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a30588c5eca7c9cb6ebba02a0236f0119"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119">FS</a>&#160;&#160;&#160;100</td></tr>
+<tr class="separator:a30588c5eca7c9cb6ebba02a0236f0119"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b20d41d6252e9871430c242cb1a56e7"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>&#160;&#160;&#160;(<a class="el" href="algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119">FS</a>* 5)</td></tr>
+<tr class="separator:a6b20d41d6252e9871430c242cb1a56e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa03906cc2e2d27ef4f3fa4db4312b524"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#aa03906cc2e2d27ef4f3fa4db4312b524">HR_FIFO_SIZE</a>&#160;&#160;&#160;7</td></tr>
+<tr class="separator:aa03906cc2e2d27ef4f3fa4db4312b524"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af8c3cbac49a22022b17cc7b34d42cbae"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae">MA4_SIZE</a>&#160;&#160;&#160;4</td></tr>
+<tr class="separator:af8c3cbac49a22022b17cc7b34d42cbae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35be9e52c9110f5d91a4064e2f7b73c8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8">HAMMING_SIZE</a>&#160;&#160;&#160;5</td></tr>
+<tr class="separator:a35be9e52c9110f5d91a4064e2f7b73c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb702d8b501669a23aa0ab3b281b9384"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384">min</a>(x, y)&#160;&#160;&#160;((x) &lt; (y) ? (x) : (y))</td></tr>
+<tr class="separator:abb702d8b501669a23aa0ab3b281b9384"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a62050365673e666cd0d661a3664c26e6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a62050365673e666cd0d661a3664c26e6">maxim_heart_rate_and_oxygen_saturation</a> (uint32_t *pun_ir_buffer, int32_t <a class="el" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid, int32_t *pn_heart_rate, int8_t *pch_hr_valid)</td></tr>
+<tr class="memdesc:a62050365673e666cd0d661a3664c26e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate the heart rate and SpO2 level.  <a href="#a62050365673e666cd0d661a3664c26e6"></a><br/></td></tr>
+<tr class="separator:a62050365673e666cd0d661a3664c26e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a4e5ddbe0e04c48b166f2ff176667a9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a2a4e5ddbe0e04c48b166f2ff176667a9">maxim_find_peaks</a> (int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num)</td></tr>
+<tr class="memdesc:a2a4e5ddbe0e04c48b166f2ff176667a9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find peaks.  <a href="#a2a4e5ddbe0e04c48b166f2ff176667a9"></a><br/></td></tr>
+<tr class="separator:a2a4e5ddbe0e04c48b166f2ff176667a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aab95338e44281c269f0b9b0f529741bf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#aab95338e44281c269f0b9b0f529741bf">maxim_peaks_above_min_height</a> (int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height)</td></tr>
+<tr class="memdesc:aab95338e44281c269f0b9b0f529741bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Find peaks above n_min_height.  <a href="#aab95338e44281c269f0b9b0f529741bf"></a><br/></td></tr>
+<tr class="separator:aab95338e44281c269f0b9b0f529741bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc6be68be81530d67a25c1a9905bec3a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#adc6be68be81530d67a25c1a9905bec3a">maxim_remove_close_peaks</a> (int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_min_distance)</td></tr>
+<tr class="memdesc:adc6be68be81530d67a25c1a9905bec3a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove peaks.  <a href="#adc6be68be81530d67a25c1a9905bec3a"></a><br/></td></tr>
+<tr class="separator:adc6be68be81530d67a25c1a9905bec3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6cae46e51640b712afc2ebeefd2d51ff"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a6cae46e51640b712afc2ebeefd2d51ff">maxim_sort_ascend</a> (int32_t *pn_x, int32_t n_size)</td></tr>
+<tr class="memdesc:a6cae46e51640b712afc2ebeefd2d51ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort array.  <a href="#a6cae46e51640b712afc2ebeefd2d51ff"></a><br/></td></tr>
+<tr class="separator:a6cae46e51640b712afc2ebeefd2d51ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44b6312f81810d4deb64071d12ab0060"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a44b6312f81810d4deb64071d12ab0060">maxim_sort_indices_descend</a> (int32_t *pn_x, int32_t *pn_indx, int32_t n_size)</td></tr>
+<tr class="memdesc:a44b6312f81810d4deb64071d12ab0060"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sort indices.  <a href="#a44b6312f81810d4deb64071d12ab0060"></a><br/></td></tr>
+<tr class="separator:a44b6312f81810d4deb64071d12ab0060"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a1c25ffb675bce0db6a32fbf6ad514929"><td class="memItemLeft" align="right" valign="top">const uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929">auw_hamm</a> [31] ={ 41, 276, 512, 276, 41 }</td></tr>
+<tr class="separator:a1c25ffb675bce0db6a32fbf6ad514929"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adfeeb6b08271807492803acc50347108"><td class="memItemLeft" align="right" valign="top">const uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html#adfeeb6b08271807492803acc50347108">uch_spo2_table</a> [184]</td></tr>
+<tr class="separator:adfeeb6b08271807492803acc50347108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><pre class="fragment">******************************************************
+</pre><p>Project: MAXREFDES117# Filename: <a class="el" href="algorithm_8h.html">algorithm.h</a> Description: This module is the heart rate/SpO2 calculation algorithm header file</p>
+<p>Revision History: <br/>
+ 1-18-2016 Rev 01.00 SK Initial release. <br/>
+ <hr/>
+<p>This code follows the following naming conventions:</p>
+<p><br/>
+ char ch_pmod_value <br/>
+ char (array) s_pmod_s_string[16] <br/>
+ float f_pmod_value <br/>
+ int32_t n_pmod_value <br/>
+ int32_t (array) an_pmod_value[16] <br/>
+ int16_t w_pmod_value <br/>
+ int16_t (array) aw_pmod_value[16] <br/>
+ uint16_t uw_pmod_value <br/>
+ uint16_t (array) auw_pmod_value[16] <br/>
+ uint8_t uch_pmod_value <br/>
+ uint8_t (array) auch_pmod_buffer[16] <br/>
+ uint32_t un_pmod_value <br/>
+ int32_t * pn_pmod_value <hr/>
+
+<p>Definition in file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a6b20d41d6252e9871430c242cb1a56e7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define BUFFER_SIZE&#160;&#160;&#160;(<a class="el" href="algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119">FS</a>* 5)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00070">70</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a65e9886d74aaee76545e83dd09011727"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define false&#160;&#160;&#160;0</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00068">68</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a30588c5eca7c9cb6ebba02a0236f0119"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define FS&#160;&#160;&#160;100</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00069">69</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35be9e52c9110f5d91a4064e2f7b73c8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HAMMING_SIZE&#160;&#160;&#160;5</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00073">73</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa03906cc2e2d27ef4f3fa4db4312b524"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HR_FIFO_SIZE&#160;&#160;&#160;7</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00071">71</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af8c3cbac49a22022b17cc7b34d42cbae"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MA4_SIZE&#160;&#160;&#160;4</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00072">72</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abb702d8b501669a23aa0ab3b281b9384"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define min</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">x, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">y&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>&#160;&#160;&#160;((x) &lt; (y) ? (x) : (y))</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00074">74</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a41f9c5fb8b08eb5dc3edce4dcb37fee7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define true&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00067">67</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a2a4e5ddbe0e04c48b166f2ff176667a9"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_find_peaks </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_locs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_npks</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_min_height</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_min_distance</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_max_num</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Find peaks. </p>
+<dl class="section user"><dt>Details</dt><dd>Find at most MAX_NUM peaks above MIN_HEIGHT separated by at least MIN_DISTANCE</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00254">254</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a62050365673e666cd0d661a3664c26e6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_heart_rate_and_oxygen_saturation </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_ir_buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_ir_buffer_length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_red_buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_spo2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8_t *&#160;</td>
+          <td class="paramname"><em>pch_spo2_valid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_heart_rate</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int8_t *&#160;</td>
+          <td class="paramname"><em>pch_hr_valid</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Calculate the heart rate and SpO2 level. </p>
+<dl class="section user"><dt>Details</dt><dd>By detecting peaks of PPG cycle and corresponding AC/DC of red/infra-red signal, the ratio for the SPO2 is computed. Since this algorithm is aiming for Arm M0/M3. formaula for SPO2 did not achieve the accuracy due to register overflow. Thus, accurate SPO2 is precalculated and save longo uch_spo2_table[] per each ratio.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">*pun_ir_buffer</td><td>- IR sensor data buffer </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">n_ir_buffer_length</td><td>- IR sensor data buffer length </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">*pun_red_buffer</td><td>- Red sensor data buffer </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pn_spo2</td><td>- Calculated SpO2 value </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pch_spo2_valid</td><td>- 1 if the calculated SpO2 value is valid </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pn_heart_rate</td><td>- Calculated heart rate value </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pch_hr_valid</td><td>- 1 if the calculated heart rate value is valid</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00062">62</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aab95338e44281c269f0b9b0f529741bf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_peaks_above_min_height </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_locs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_npks</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_min_height</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Find peaks above n_min_height. </p>
+<dl class="section user"><dt>Details</dt><dd>Find all peaks above MIN_HEIGHT</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00268">268</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adc6be68be81530d67a25c1a9905bec3a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_remove_close_peaks </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_locs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_npks</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_min_distance</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Remove peaks. </p>
+<dl class="section user"><dt>Details</dt><dd>Remove peaks separated by less than MIN_DISTANCE</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00299">299</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6cae46e51640b712afc2ebeefd2d51ff"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_sort_ascend </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sort array. </p>
+<dl class="section user"><dt>Details</dt><dd>Sort array in ascending order (insertion sort algorithm)</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00328">328</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a44b6312f81810d4deb64071d12ab0060"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void maxim_sort_indices_descend </td>
+          <td>(</td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t *&#160;</td>
+          <td class="paramname"><em>pn_indx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int32_t&#160;</td>
+          <td class="paramname"><em>n_size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Sort indices. </p>
+<dl class="section user"><dt>Details</dt><dd>Sort indices according to descending order (insertion sort algorithm)</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="algorithm_8cpp_source.html#l00346">346</a> of file <a class="el" href="algorithm_8cpp_source.html">algorithm.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a1c25ffb675bce0db6a32fbf6ad514929"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint16_t auw_hamm[31] ={ 41, 276, 512, 276, 41 }</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00076">76</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adfeeb6b08271807492803acc50347108"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const uint8_t uch_spo2_table[184]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">={ 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 99, 99, 99, 99, </div>
+<div class="line">                            99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, </div>
+<div class="line">                            100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, </div>
+<div class="line">                            97, 97, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, </div>
+<div class="line">                            90, 90, 89, 89, 89, 88, 88, 87, 87, 86, 86, 85, 85, 84, 84, 83, 82, 82, 81, 81, </div>
+<div class="line">                            80, 80, 79, 78, 78, 77, 76, 76, 75, 74, 74, 73, 72, 72, 71, 70, 69, 69, 68, 67, </div>
+<div class="line">                            66, 66, 65, 64, 63, 62, 62, 61, 60, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, </div>
+<div class="line">                            49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 31, 30, 29, </div>
+<div class="line">                            28, 27, 26, 25, 23, 22, 21, 20, 19, 17, 16, 15, 14, 12, 11, 10, 9, 7, 6, 5, </div>
+<div class="line">                            3, 2, 1 }</div>
+</div><!-- fragment -->
+<p>Definition at line <a class="el" href="algorithm_8h_source.html#l00078">78</a> of file <a class="el" href="algorithm_8h_source.html">algorithm.h</a>.</p>
+
+</div>
+</div>
+</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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_19b53f07f52837a342947cc20e6d978f.html">algorithm</a></li><li class="navelem"><a class="el" href="algorithm_8h.html">algorithm.h</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h.js
new file mode 100644
index 000000000..44c96bb30
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h.js
@@ -0,0 +1,22 @@
+var algorithm_8h =
+[
+    [ "BUFFER_SIZE", "algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7", null ],
+    [ "false", "algorithm_8h.html#a65e9886d74aaee76545e83dd09011727", null ],
+    [ "FS", "algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119", null ],
+    [ "HAMMING_SIZE", "algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8", null ],
+    [ "HR_FIFO_SIZE", "algorithm_8h.html#aa03906cc2e2d27ef4f3fa4db4312b524", null ],
+    [ "MA4_SIZE", "algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae", null ],
+    [ "min", "algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384", null ],
+    [ "true", "algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7", null ],
+    [ "maxim_find_peaks", "algorithm_8h.html#a2a4e5ddbe0e04c48b166f2ff176667a9", null ],
+    [ "maxim_heart_rate_and_oxygen_saturation", "algorithm_8h.html#a62050365673e666cd0d661a3664c26e6", null ],
+    [ "maxim_peaks_above_min_height", "algorithm_8h.html#aab95338e44281c269f0b9b0f529741bf", null ],
+    [ "maxim_remove_close_peaks", "algorithm_8h.html#adc6be68be81530d67a25c1a9905bec3a", null ],
+    [ "maxim_sort_ascend", "algorithm_8h.html#a6cae46e51640b712afc2ebeefd2d51ff", null ],
+    [ "maxim_sort_indices_descend", "algorithm_8h.html#a44b6312f81810d4deb64071d12ab0060", null ],
+    [ "an_dx", "algorithm_8h.html#aea73b3b76ec2f4743e97452ee93c9cd2", null ],
+    [ "an_x", "algorithm_8h.html#a7d4e0b0915b58092f3b4bb2fbd252f3f", null ],
+    [ "an_y", "algorithm_8h.html#a72c76142c07186ae6d7200ec3c9a4f76", null ],
+    [ "auw_hamm", "algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929", null ],
+    [ "uch_spo2_table", "algorithm_8h.html#adfeeb6b08271807492803acc50347108", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h_source.html
new file mode 100644
index 000000000..1d98e0c3a
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/algorithm_8h_source.html
@@ -0,0 +1,191 @@
+<!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/algorithm/algorithm.h Source File</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">
+$(document).ready(function(){initNavTree('algorithm_8h_source.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">algorithm.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="algorithm_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">* Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">* Permission is hereby granted, free of charge, to any person obtaining a</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">* copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">* to deal in the Software without restriction, including without limitation</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">* the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">* and/or sell copies of the Software, and to permit persons to whom the</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">* Software is furnished to do so, subject to the following conditions:</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">* The above copyright notice and this permission notice shall be included</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">* in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">* THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">* OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">* Except as contained in this notice, the name of Maxim Integrated</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">* Products, Inc. shall not be used except as stated in the Maxim Integrated</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">* Products, Inc. Branding Policy.</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">* The mere transfer of this software does not imply any licenses</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">* of trade secrets, proprietary technology, copyrights, patents,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">* trademarks, maskwork rights, or any other form of intellectual</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">* property whatsoever. Maxim Integrated Products, Inc. retains all</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">* ownership rights.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">*******************************************************************************</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#ifndef ALGORITHM_H_</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define ALGORITHM_H_</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#include &quot;mbed.h&quot;</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">   67</a></span>&#160;<span class="preprocessor">#define true 1</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a65e9886d74aaee76545e83dd09011727">   68</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define false 0</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119">   69</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define FS 100</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">   70</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define BUFFER_SIZE  (FS* 5) </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="algorithm_8h.html#aa03906cc2e2d27ef4f3fa4db4312b524">   71</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define HR_FIFO_SIZE 7</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae">   72</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define MA4_SIZE  4 // DO NOT CHANGE</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8">   73</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define HAMMING_SIZE  5// DO NOT CHANGE</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="code" href="algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384">   74</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define min(x,y) ((x) &lt; (y) ? (x) : (y))</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="code" href="algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929">   76</a></span>&#160;<span class="keyword">const</span> uint16_t <a class="code" href="algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929">auw_hamm</a>[31]={ 41,    276,    512,    276,     41 }; <span class="comment">//Hamm=  long16(512* hamming(5)&#39;);</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment">//uch_spo2_table is computed as  -45.060*ratioAverage* ratioAverage + 30.354 *ratioAverage + 94.845 ;</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="algorithm_8h.html#adfeeb6b08271807492803acc50347108">   78</a></span>&#160;<span class="keyword">const</span> uint8_t <a class="code" href="algorithm_8h.html#adfeeb6b08271807492803acc50347108">uch_spo2_table</a>[184]={ 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 99, 99, 99, 99, </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;                            99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;                            100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;                            97, 97, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;                            90, 90, 89, 89, 89, 88, 88, 87, 87, 86, 86, 85, 85, 84, 84, 83, 82, 82, 81, 81, </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;                            80, 80, 79, 78, 78, 77, 76, 76, 75, 74, 74, 73, 72, 72, 71, 70, 69, 69, 68, 67, </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                            66, 66, 65, 64, 63, 62, 62, 61, 60, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                            49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 31, 30, 29, </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                            28, 27, 26, 25, 23, 22, 21, 20, 19, 17, 16, 15, 14, 12, 11, 10, 9, 7, 6, 5, </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                            3, 2, 1 } ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="keyword">static</span>  int32_t an_dx[ <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>-<a class="code" href="algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae">MA4_SIZE</a>]; <span class="comment">// delta</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="keyword">static</span>  int32_t an_x[ <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>]; <span class="comment">//ir</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="keyword">static</span>  int32_t an_y[ <a class="code" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">BUFFER_SIZE</a>]; <span class="comment">//red</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6" title="Calculate the heart rate and SpO2 level.">maxim_heart_rate_and_oxygen_saturation</a>(uint32_t *pun_ir_buffer ,  int32_t <a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>, uint32_t *pun_red_buffer ,   int32_t *pn_spo2, int8_t *pch_spo2_valid ,  int32_t *pn_heart_rate , int8_t  *pch_hr_valid);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9" title="Find peaks.">maxim_find_peaks</a>( int32_t *pn_locs, int32_t *pn_npks,  int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num );</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf" title="Find peaks above n_min_height.">maxim_peaks_above_min_height</a>( int32_t *pn_locs, int32_t *pn_npks,  int32_t *pn_x, int32_t n_size, int32_t n_min_height );</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a" title="Remove peaks.">maxim_remove_close_peaks</a>( int32_t *pn_locs, int32_t *pn_npks,   int32_t  *pn_x, int32_t n_min_distance );</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff" title="Sort array.">maxim_sort_ascend</a>( int32_t *pn_x, int32_t n_size );</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="keywordtype">void</span> <a class="code" href="algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060" title="Sort indices.">maxim_sort_indices_descend</a>(  int32_t  *pn_x, int32_t *pn_indx, int32_t n_size);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* ALGORITHM_H_ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_19b53f07f52837a342947cc20e6d978f.html">algorithm</a></li><li class="navelem"><a class="el" href="algorithm_8h.html">algorithm.h</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/annotated.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/annotated.html
new file mode 100644
index 000000000..8c8bbce7f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/annotated.html
@@ -0,0 +1,125 @@
+<!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: Data Structures</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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><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 class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Data&#160;Fields</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('annotated.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">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="class_adafruit___neo_pixel.html" target="_self">Adafruit_NeoPixel</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/annotated.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/annotated.js
new file mode 100644
index 000000000..a2cf5a0fd
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/annotated.js
@@ -0,0 +1,4 @@
+var annotated =
+[
+    [ "Adafruit_NeoPixel", "class_adafruit___neo_pixel.html", "class_adafruit___neo_pixel" ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/bc_s.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/bc_s.png
new file mode 100644
index 0000000000000000000000000000000000000000..6da883dbb2fc7d439acc68a313049a8ee8cb6461
GIT binary patch
literal 668
zcmeAS@N?(olHy`uVBq!ia0y~yVBlb2V36ZrV_;wqY>4M&U|>r2ba4!+V0=6Ge73No
z$npDc-sG9hPT4#=>#tx|ZcffyOOX~Q$B!EG-ndRSGv!?oAgHOO<f^ggk>kSeTuWbs
zE{%%L&Aq&Atte}zbnd0*uIXksbM$5_h}7<WG^z6+_u=n`*1P9_e|C2E_VP~;4tu@y
zSio0cvR?GlZH5CK^E|$7-N`ynT=VJnQ)yBR5)*&FpMG0)UVYVx_5Y5Pax8vhaNzD#
z)oj0ZQ{UpkFR!u`|F22wZZVC%=e~E*jcu`J?lU>c|G5Zo9@rkH>tN|*b^XhsUBVA5
z?ptQx`^mb1Ys$MrHQ#b)KJ!*T^tRmZk)ziRpKdV+F}^jge@^1%(bW&h|G6aaV|!|x
z#K{*w6Qy@-HHqgfsj5iiS!m?O@t=RgvEv(7Y1$l*J@cZK(`d&GCI&apv#PN-UVp4{
zeIT-P<~(Kww>+Cy{b`|(H53Jlk{`++kox|u+GcLoX;bfYXZN!*tk^o)&hZU@Rqg#u
z_k4Z^hqbZyl~4CFJq=1xFlA=w`6Dy!?*_3A)h#hIXR|T5O@F1L8K-{oCa<%-uip86
zj0|q`ox1LKmwMz#9L>CBZyfq}qqA7cao)K2r{00vwLNcFCtW=du=mYG);?*?5Up-A
zftP(vrL`H1Iu{D|Mqm4|Q$JpF_O)uM&bfbI*T$84^5)HpKeTu5I;E4>{qk$_f<nyI
z%GI)8oa3EzWD2j0^Lh6OOXGBr=$Z50%&kd0o9wuLJL|%Wa}sS*8h$+ak>{f)9u$&&
zcZ#-XDcg%WQ@e(#uMe?=n|r&-Fi1>%apdzG$D{g*hs$!Ob$z=zQ(j%DTkY>6Z}<0(
e3=L7gd7stn<5{{Zbs7T$1B0ilpUXO@geCxU4lS<$

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/bdwn.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/bdwn.png
new file mode 100644
index 0000000000000000000000000000000000000000..4aa5b3ecd3a1548be883d8a5e8c53588936578bf
GIT binary patch
literal 146
zcmeAS@N?(olHy`uVBq!ia0y~yU|?rpVBp|jV_;w~WqAssB0XIkLn;{G&OOcBpdjEf
z|H9->bN*?ITq~UXrnw~rpOU!1+qrGS<l4>iS29*)+h5Au%lzZge<Sx?hP5Ww(=+(H
z`0Jvc`33xns0|abnf}aj-QR-aN*503v51@flCjUZd`g9Zfq}u()z4*}Q$iB}hv735

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/class_adafruit___neo_pixel.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/class_adafruit___neo_pixel.html
new file mode 100644
index 000000000..2e17a0010
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/class_adafruit___neo_pixel.html
@@ -0,0 +1,668 @@
+<!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: Adafruit_NeoPixel Class 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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Data&#160;Fields</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('class_adafruit___neo_pixel.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="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Adafruit_NeoPixel Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac314debe6917c8c9b320b785139c6e58"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#ac314debe6917c8c9b320b785139c6e58">Adafruit_NeoPixel</a> (uint16_t n, uint8_t p=6, <a class="el" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a> t=<a class="el" href="_adafruit___neo_pixel_8h.html#a95d0d6b0a1f52bc72d9dcea2b3a48e3f">NEO_GRB</a>+<a class="el" href="_adafruit___neo_pixel_8h.html#a475fef7028a743310aa4311a97899d5d">NEO_KHZ800</a>)</td></tr>
+<tr class="separator:ac314debe6917c8c9b320b785139c6e58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1ac0c48cf3fd9185e40308c37f1d320"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#ab1ac0c48cf3fd9185e40308c37f1d320">Adafruit_NeoPixel</a> (void)</td></tr>
+<tr class="separator:ab1ac0c48cf3fd9185e40308c37f1d320"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16d970aa16f9d0128800346f4ca567db"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db">~Adafruit_NeoPixel</a> ()</td></tr>
+<tr class="separator:a16d970aa16f9d0128800346f4ca567db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad78931e44ce43c9b9c460dba7c9bbb7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7">begin</a> (void)</td></tr>
+<tr class="separator:aad78931e44ce43c9b9c460dba7c9bbb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae335a7c214036a6c1734969f2bc3f4f7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7">show</a> (void)</td></tr>
+<tr class="separator:ae335a7c214036a6c1734969f2bc3f4f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a345b7a6f550461926ed5187b2df42d6b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b">setPin</a> (uint8_t p)</td></tr>
+<tr class="separator:a345b7a6f550461926ed5187b2df42d6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0ec91c90f337e806cd98956514257cf1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1">setPixelColor</a> (uint16_t n, uint8_t r, uint8_t g, uint8_t b)</td></tr>
+<tr class="separator:a0ec91c90f337e806cd98956514257cf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35eda2252e3ed976a11d35cb8f4b2e41"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a35eda2252e3ed976a11d35cb8f4b2e41">setPixelColor</a> (uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w)</td></tr>
+<tr class="separator:a35eda2252e3ed976a11d35cb8f4b2e41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbf243cce591dc37be507cf173485bc8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#abbf243cce591dc37be507cf173485bc8">setPixelColor</a> (uint16_t n, uint32_t c)</td></tr>
+<tr class="separator:abbf243cce591dc37be507cf173485bc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa1740af1d8eec971eada06d53901c53"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53">setBrightness</a> (uint8_t)</td></tr>
+<tr class="separator:afa1740af1d8eec971eada06d53901c53"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8bb3912a3ce86b15842e79d0b421204"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#ac8bb3912a3ce86b15842e79d0b421204">clear</a> ()</td></tr>
+<tr class="separator:ac8bb3912a3ce86b15842e79d0b421204"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05542d574f1a9a73f9e3547990321944"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944">updateLength</a> (uint16_t n)</td></tr>
+<tr class="separator:a05542d574f1a9a73f9e3547990321944"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a65e59263e0f5a04c7202d4385d3a539b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b">updateType</a> (<a class="el" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a> t)</td></tr>
+<tr class="separator:a65e59263e0f5a04c7202d4385d3a539b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a18bc91d2bad52cf603814d4df6f33067"><td class="memItemLeft" align="right" valign="top">uint8_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067">getPixels</a> (void) const </td></tr>
+<tr class="separator:a18bc91d2bad52cf603814d4df6f33067"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a553bf1a0513094c73cb54a235f74ac7f"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f">getBrightness</a> (void) const </td></tr>
+<tr class="separator:a553bf1a0513094c73cb54a235f74ac7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac893a5c07c41604539022af84665c04b"><td class="memItemLeft" align="right" valign="top">uint16_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#ac893a5c07c41604539022af84665c04b">numPixels</a> (void) const </td></tr>
+<tr class="separator:ac893a5c07c41604539022af84665c04b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9846704aaabd4e102beba5a5484d5738"><td class="memItemLeft" align="right" valign="top">static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a9846704aaabd4e102beba5a5484d5738">Color</a> (uint8_t r, uint8_t g, uint8_t b, uint8_t w)</td></tr>
+<tr class="separator:a9846704aaabd4e102beba5a5484d5738"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10a836ddc4ebd3e26b1e71a5875764fa"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa">getPixelColor</a> (uint16_t n) const </td></tr>
+<tr class="separator:a10a836ddc4ebd3e26b1e71a5875764fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad38ce8112667b70ad7c411a98892af0e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#ad38ce8112667b70ad7c411a98892af0e">canShow</a> (void)</td></tr>
+<tr class="separator:ad38ce8112667b70ad7c411a98892af0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:ae3e6c2fabbee89d19487424acd8d9fec"><td class="memItemLeft" align="right" valign="top">static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec">Color</a> (uint8_t r, uint8_t g, uint8_t b)</td></tr>
+<tr class="separator:ae3e6c2fabbee89d19487424acd8d9fec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00116">116</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="ac314debe6917c8c9b320b785139c6e58"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</a> </td>
+          <td>(</td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>p</em> = <code>6</code>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a>&#160;</td>
+          <td class="paramname"><em>t</em> = <code><a class="el" href="_adafruit___neo_pixel_8h.html#a95d0d6b0a1f52bc72d9dcea2b3a48e3f">NEO_GRB</a>&#160;+&#160;<a class="el" href="_adafruit___neo_pixel_8h.html#a475fef7028a743310aa4311a97899d5d">NEO_KHZ800</a></code>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l00038">38</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab1ac0c48cf3fd9185e40308c37f1d320"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</a> </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l00051">51</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a16d970aa16f9d0128800346f4ca567db"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">~<a class="el" href="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</a> </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l00060">60</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="aad78931e44ce43c9b9c460dba7c9bbb7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void begin </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l00065">65</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad38ce8112667b70ad7c411a98892af0e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool canShow </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8h_source.html#l00147">147</a> of file <a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac8bb3912a3ce86b15842e79d0b421204"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void clear </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01198">1198</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae3e6c2fabbee89d19487424acd8d9fec"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t Color </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>g</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>b</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01096">1096</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9846704aaabd4e102beba5a5484d5738"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t Color </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>g</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>w</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01102">1102</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a553bf1a0513094c73cb54a235f74ac7f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t getBrightness </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01194">1194</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a10a836ddc4ebd3e26b1e71a5875764fa"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t getPixelColor </td>
+          <td>(</td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>n</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01107">1107</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a18bc91d2bad52cf603814d4df6f33067"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t * getPixels </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01148">1148</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac893a5c07c41604539022af84665c04b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint16_t numPixels </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01152">1152</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa1740af1d8eec971eada06d53901c53"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void setBrightness </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>b</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01168">1168</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a345b7a6f550461926ed5187b2df42d6b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void setPin </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>p</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01031">1031</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ec91c90f337e806cd98956514257cf1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void setPixelColor </td>
+          <td>(</td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>g</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>b</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01047">1047</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35eda2252e3ed976a11d35cb8f4b2e41"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void setPixelColor </td>
+          <td>(</td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>g</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>b</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>w</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abbf243cce591dc37be507cf173485bc8"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void setPixelColor </td>
+          <td>(</td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>c</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l01070">1070</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae335a7c214036a6c1734969f2bc3f4f7"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void show </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l00111">111</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a05542d574f1a9a73f9e3547990321944"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void updateLength </td>
+          <td>(</td>
+          <td class="paramtype">uint16_t&#160;</td>
+          <td class="paramname"><em>n</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l00073">73</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a65e59263e0f5a04c7202d4385d3a539b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void updateType </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">neoPixelType</a>&#160;</td>
+          <td class="paramname"><em>t</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="_adafruit___neo_pixel_8cpp_source.html#l00086">86</a> of file <a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>RD117_ARDUINO/<a class="el" href="_adafruit___neo_pixel_8h_source.html">Adafruit_NeoPixel.h</a></li>
+<li>RD117_ARDUINO/<a class="el" href="_adafruit___neo_pixel_8cpp_source.html">Adafruit_NeoPixel.cpp</a></li>
+</ul>
+</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="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/class_adafruit___neo_pixel.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/class_adafruit___neo_pixel.js
new file mode 100644
index 000000000..521850e40
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/class_adafruit___neo_pixel.js
@@ -0,0 +1,23 @@
+var class_adafruit___neo_pixel =
+[
+    [ "Adafruit_NeoPixel", "class_adafruit___neo_pixel.html#ac314debe6917c8c9b320b785139c6e58", null ],
+    [ "Adafruit_NeoPixel", "class_adafruit___neo_pixel.html#ab1ac0c48cf3fd9185e40308c37f1d320", null ],
+    [ "~Adafruit_NeoPixel", "class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db", null ],
+    [ "begin", "class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7", null ],
+    [ "canShow", "class_adafruit___neo_pixel.html#ad38ce8112667b70ad7c411a98892af0e", null ],
+    [ "clear", "class_adafruit___neo_pixel.html#ac8bb3912a3ce86b15842e79d0b421204", null ],
+    [ "Color", "class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec", null ],
+    [ "Color", "class_adafruit___neo_pixel.html#a9846704aaabd4e102beba5a5484d5738", null ],
+    [ "getBrightness", "class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f", null ],
+    [ "getPixelColor", "class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa", null ],
+    [ "getPixels", "class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067", null ],
+    [ "numPixels", "class_adafruit___neo_pixel.html#ac893a5c07c41604539022af84665c04b", null ],
+    [ "setBrightness", "class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53", null ],
+    [ "setPin", "class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b", null ],
+    [ "setPixelColor", "class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1", null ],
+    [ "setPixelColor", "class_adafruit___neo_pixel.html#a35eda2252e3ed976a11d35cb8f4b2e41", null ],
+    [ "setPixelColor", "class_adafruit___neo_pixel.html#abbf243cce591dc37be507cf173485bc8", null ],
+    [ "show", "class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7", null ],
+    [ "updateLength", "class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944", null ],
+    [ "updateType", "class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/classes.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/classes.html
new file mode 100644
index 000000000..4ccf6040c
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/classes.html
@@ -0,0 +1,129 @@
+<!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: Data Structure Index</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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li class="current"><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li><a href="functions.html"><span>Data&#160;Fields</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('classes.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">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_A">A</a></div>
+<table style="margin: 10px; white-space: nowrap;" align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td rowspan="2" valign="bottom"><a name="letter_A"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;A&#160;&#160;</div></td></tr></table>
+</td><td></td></tr>
+<tr><td></td></tr>
+<tr><td valign="top"><a class="el" href="class_adafruit___neo_pixel.html">Adafruit_NeoPixel</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_A">A</a></div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/closed.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/closed.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea7139c41d9c1c05f5a466f99cec8d705066ba4b
GIT binary patch
literal 131
zcmeAS@N?(olHy`uVBq!ia0y~yVBiE{4mJh`h6fYb1Q-|?ygXeTLn;{G&V9()pvd78
z&ns#YC0w(ZRX0?kW<ikI!NTvSm*3-HP`m#^*x($4ot#g@Mz*Mx)pdKGh#&G!RM)MP
ibUN>6U(jlz5GDFsgnxIxtO5fA1B0ilpUXO@geCx-aVDVv

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_1496e1f9c0637ae9073f7370a2521bf1.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_1496e1f9c0637ae9073f7370a2521bf1.html
new file mode 100644
index 000000000..e591b400c
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_1496e1f9c0637ae9073f7370a2521bf1.html
@@ -0,0 +1,134 @@
+<!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 Directory 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><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><!-- 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('dir_1496e1f9c0637ae9073f7370a2521bf1.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">RD117_ARDUINO Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:_adafruit___neo_pixel_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8cpp.html">Adafruit_NeoPixel.cpp</a> <a href="_adafruit___neo_pixel_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:_adafruit___neo_pixel_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_adafruit___neo_pixel_8h.html">Adafruit_NeoPixel.h</a> <a href="_adafruit___neo_pixel_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:algorithm_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8cpp.html">algorithm.cpp</a> <a href="algorithm_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:algorithm_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html">algorithm.h</a> <a href="algorithm_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:max30102_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8cpp.html">max30102.cpp</a> <a href="max30102_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:max30102_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html">max30102.h</a> <a href="max30102_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:_r_d117___a_r_d_u_i_n_o_8ino"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_r_d117___a_r_d_u_i_n_o_8ino.html">RD117_ARDUINO.ino</a> <a href="_r_d117___a_r_d_u_i_n_o_8ino_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:_soft_i2_c_master_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_soft_i2_c_master_8h.html">SoftI2CMaster.h</a> <a href="_soft_i2_c_master_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</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="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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_1496e1f9c0637ae9073f7370a2521bf1.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_1496e1f9c0637ae9073f7370a2521bf1.js
new file mode 100644
index 000000000..ea015b1af
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_1496e1f9c0637ae9073f7370a2521bf1.js
@@ -0,0 +1,11 @@
+var dir_1496e1f9c0637ae9073f7370a2521bf1 =
+[
+    [ "Adafruit_NeoPixel.cpp", "_adafruit___neo_pixel_8cpp.html", null ],
+    [ "Adafruit_NeoPixel.h", "_adafruit___neo_pixel_8h.html", "_adafruit___neo_pixel_8h" ],
+    [ "algorithm.cpp", "algorithm_8cpp.html", "algorithm_8cpp" ],
+    [ "algorithm.h", "algorithm_8h.html", "algorithm_8h" ],
+    [ "max30102.cpp", "max30102_8cpp.html", "max30102_8cpp" ],
+    [ "max30102.h", "max30102_8h.html", "max30102_8h" ],
+    [ "RD117_ARDUINO.ino", "_r_d117___a_r_d_u_i_n_o_8ino.html", "_r_d117___a_r_d_u_i_n_o_8ino" ],
+    [ "SoftI2CMaster.h", "_soft_i2_c_master_8h.html", "_soft_i2_c_master_8h" ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_19b53f07f52837a342947cc20e6d978f.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_19b53f07f52837a342947cc20e6d978f.html
new file mode 100644
index 000000000..013cb4fa8
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_19b53f07f52837a342947cc20e6d978f.html
@@ -0,0 +1,121 @@
+<!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/algorithm Directory 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="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><!-- 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('dir_19b53f07f52837a342947cc20e6d978f.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">algorithm Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:algorithm_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8cpp.html">algorithm.cpp</a> <a href="algorithm_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:algorithm_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="algorithm_8h.html">algorithm.h</a> <a href="algorithm_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_19b53f07f52837a342947cc20e6d978f.html">algorithm</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_19b53f07f52837a342947cc20e6d978f.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_19b53f07f52837a342947cc20e6d978f.js
new file mode 100644
index 000000000..1f23c8ffa
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_19b53f07f52837a342947cc20e6d978f.js
@@ -0,0 +1,5 @@
+var dir_19b53f07f52837a342947cc20e6d978f =
+[
+    [ "algorithm.cpp", "algorithm_8cpp.html", "algorithm_8cpp" ],
+    [ "algorithm.h", "algorithm_8h.html", "algorithm_8h" ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_70c5cd4c8bba287fe799894cc0903ca4.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_70c5cd4c8bba287fe799894cc0903ca4.html
new file mode 100644
index 000000000..d05f997d7
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_70c5cd4c8bba287fe799894cc0903ca4.html
@@ -0,0 +1,126 @@
+<!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 Directory 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="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><!-- 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('dir_70c5cd4c8bba287fe799894cc0903ca4.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">RD117_MBED Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_19b53f07f52837a342947cc20e6d978f"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_19b53f07f52837a342947cc20e6d978f.html">algorithm</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_d4a9a7556cca61907ce453116086a23a"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d4a9a7556cca61907ce453116086a23a.html">MAX30102</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:main_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html">main.cpp</a> <a href="main_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_70c5cd4c8bba287fe799894cc0903ca4.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_70c5cd4c8bba287fe799894cc0903ca4.js
new file mode 100644
index 000000000..893afb2a3
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_70c5cd4c8bba287fe799894cc0903ca4.js
@@ -0,0 +1,6 @@
+var dir_70c5cd4c8bba287fe799894cc0903ca4 =
+[
+    [ "algorithm", "dir_19b53f07f52837a342947cc20e6d978f.html", "dir_19b53f07f52837a342947cc20e6d978f" ],
+    [ "MAX30102", "dir_d4a9a7556cca61907ce453116086a23a.html", "dir_d4a9a7556cca61907ce453116086a23a" ],
+    [ "main.cpp", "main_8cpp.html", "main_8cpp" ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_d4a9a7556cca61907ce453116086a23a.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_d4a9a7556cca61907ce453116086a23a.html
new file mode 100644
index 000000000..ef5be6001
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_d4a9a7556cca61907ce453116086a23a.html
@@ -0,0 +1,121 @@
+<!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 Directory 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="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><!-- 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('dir_d4a9a7556cca61907ce453116086a23a.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">MAX30102 Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:_m_a_x30102_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8cpp.html">MAX30102.cpp</a> <a href="_m_a_x30102_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:_m_a_x30102_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_m_a_x30102_8h.html">MAX30102.h</a> <a href="_m_a_x30102_8h_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="dir_d4a9a7556cca61907ce453116086a23a.html">MAX30102</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_d4a9a7556cca61907ce453116086a23a.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_d4a9a7556cca61907ce453116086a23a.js
new file mode 100644
index 000000000..4c09eec2b
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dir_d4a9a7556cca61907ce453116086a23a.js
@@ -0,0 +1,5 @@
+var dir_d4a9a7556cca61907ce453116086a23a =
+[
+    [ "MAX30102.cpp", "_m_a_x30102_8cpp.html", "_m_a_x30102_8cpp" ],
+    [ "MAX30102.h", "_m_a_x30102_8h.html", "_m_a_x30102_8h" ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/doxygen.css b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/doxygen.css
new file mode 100644
index 000000000..2df37ac8d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/doxygen.css
@@ -0,0 +1,1172 @@
+/* The standard CSS for doxygen */
+
+body, table, div, p, dl {
+	font: 400 14px/19px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+	font-size: 150%;
+}
+
+.title {
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
+h2.groupheader {
+	border-bottom: 1px solid #94D0CD;
+	color: #3D8C88;
+	font-size: 150%;
+	font-weight: normal;
+	margin-top: 1.75em;
+	padding-top: 8px;
+	padding-bottom: 4px;
+	width: 100%;
+}
+
+h3.groupheader {
+	font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
+dt {
+	font-weight: bold;
+}
+
+div.multicol {
+	-moz-column-gap: 1em;
+	-webkit-column-gap: 1em;
+	-moz-column-count: 3;
+	-webkit-column-count: 3;
+}
+
+p.startli, p.startdd, p.starttd {
+	margin-top: 2px;
+}
+
+p.endli {
+	margin-bottom: 0px;
+}
+
+p.enddd {
+	margin-bottom: 4px;
+}
+
+p.endtd {
+	margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+	font-weight: bold;
+}
+
+span.legend {
+        font-size: 70%;
+        text-align: center;
+}
+
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
+div.qindex, div.navtab{
+	background-color: #EEF7F7;
+	border: 1px solid #ADDBD9;
+	text-align: center;
+}
+
+div.qindex, div.navpath {
+	width: 100%;
+	line-height: 140%;
+}
+
+div.navtab {
+	margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+	color: #449D99;
+	font-weight: normal;
+	text-decoration: none;
+}
+
+.contents a:visited {
+	color: #4FB2AD;
+}
+
+a:hover {
+	text-decoration: underline;
+}
+
+a.qindex {
+	font-weight: bold;
+}
+
+a.qindexHL {
+	font-weight: bold;
+	background-color: #A7D8D6;
+	color: #ffffff;
+	border: 1px double #93CFCC;
+}
+
+.contents a.qindexHL:visited {
+        color: #ffffff;
+}
+
+a.el {
+	font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited {
+	color: #4665A2; 
+}
+
+a.codeRef, a.codeRef:visited {
+	color: #4665A2; 
+}
+
+/* @end */
+
+dl.el {
+	margin-left: -1cm;
+}
+
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px;
+        margin: 4px;
+	background-color: #FCFDFD;
+	border: 1px solid #CBE8E7;
+}
+
+div.line {
+	font-family: monospace, fixed;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
+}
+
+div.ah {
+	background-color: black;
+	font-weight: bold;
+	color: #ffffff;
+	margin-bottom: 3px;
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
+}
+
+div.groupHeader {
+	margin-left: 16px;
+	margin-top: 12px;
+	font-weight: bold;
+}
+
+div.groupText {
+	margin-left: 16px;
+	font-style: italic;
+}
+
+body {
+	background-color: white;
+	color: black;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
+}
+
+td.indexkey {
+	background-color: #EEF7F7;
+	font-weight: bold;
+	border: 1px solid #CBE8E7;
+	margin: 2px 0px 2px 0;
+	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
+}
+
+td.indexvalue {
+	background-color: #EEF7F7;
+	border: 1px solid #CBE8E7;
+	padding: 2px 10px;
+	margin: 2px 0px;
+}
+
+tr.memlist {
+	background-color: #F0F8F8;
+}
+
+p.formulaDsp {
+	text-align: center;
+}
+
+img.formulaDsp {
+	
+}
+
+img.formulaInl {
+	vertical-align: middle;
+}
+
+div.center {
+	text-align: center;
+        margin-top: 0px;
+        margin-bottom: 0px;
+        padding: 0px;
+}
+
+div.center img {
+	border: 0px;
+}
+
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
+img.footer {
+	border: 0px;
+	vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+	color: #008000
+}
+
+span.keywordtype {
+	color: #604020
+}
+
+span.keywordflow {
+	color: #e08000
+}
+
+span.comment {
+	color: #800000
+}
+
+span.preprocessor {
+	color: #806020
+}
+
+span.stringliteral {
+	color: #002080
+}
+
+span.charliteral {
+	color: #008080
+}
+
+span.vhdldigit { 
+	color: #ff00ff 
+}
+
+span.vhdlchar { 
+	color: #000000 
+}
+
+span.vhdlkeyword { 
+	color: #700070 
+}
+
+span.vhdllogic { 
+	color: #ff0000 
+}
+
+blockquote {
+        background-color: #F8FCFB;
+        border-left: 2px solid #A7D8D6;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+	color: #003399;
+	font-weight: bold;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+	font-size: 75%;
+}
+
+.dirtab {
+	padding: 4px;
+	border-collapse: collapse;
+	border: 1px solid #ADDBD9;
+}
+
+th.dirtab {
+	background: #EEF7F7;
+	font-weight: bold;
+}
+
+hr {
+	height: 0px;
+	border: none;
+	border-top: 1px solid #56B5B0;
+}
+
+hr.footer {
+	height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+	background-color: #FAFCFC;
+	border: none;
+	margin: 4px;
+	padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+	padding: 0px 8px 4px 8px;
+	color: #555;
+}
+
+.memSeparator {
+        border-bottom: 1px solid #DEE4F0;
+        line-height: 1px;
+        margin: 0px;
+        padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+        white-space: nowrap;
+}
+
+.memItemRight {
+	width: 100%;
+}
+
+.memTemplParams {
+	color: #4FB2AD;
+        white-space: nowrap;
+	font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+	font-size: 80%;
+	color: #4FB2AD;
+	font-weight: normal;
+	margin-left: 9px;
+}
+
+.memnav {
+	background-color: #EEF7F7;
+	border: 1px solid #ADDBD9;
+	text-align: center;
+	margin: 2px;
+	margin-right: 15px;
+	padding: 2px;
+}
+
+.mempage {
+	width: 100%;
+}
+
+.memitem {
+	padding: 0;
+	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
+}
+
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #B2DDDB;
+        border-left: 1px solid #B2DDDB;
+        border-right: 1px solid #B2DDDB;
+        padding: 6px 0px 6px 0px;
+        color: #2C6663;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E6F4F3;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
+        /* webkit specific markup */
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #B2DDDB;      
+        border-left: 1px solid #B2DDDB;      
+        border-right: 1px solid #B2DDDB; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FCFDFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+        padding: 5px;
+}
+
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
+}
+
+.paramkey {
+	text-align: right;
+}
+
+.paramtype {
+	white-space: nowrap;
+}
+
+.paramname {
+	color: #602020;
+	white-space: nowrap;
+}
+.paramname em {
+	font-style: normal;
+}
+.paramname code {
+        line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
+
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
+
+table.mlabels {
+	border-spacing: 0px;
+}
+
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
+}
+
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
+
+span.mlabels {
+        margin-left: 8px;
+}
+
+span.mlabel {
+        background-color: #80C7C4;
+        border-top:1px solid #63BBB6;
+        border-left:1px solid #63BBB6;
+        border-right:1px solid #CBE8E7;
+        border-bottom:1px solid #CBE8E7;
+	text-shadow: none;
+	color: white;
+	margin-right: 4px;
+	padding: 2px 3px;
+	border-radius: 3px;
+	font-size: 7pt;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view when not used as main index */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        width: 100%;
+}
+
+.directory table {
+        border-collapse:collapse;
+}
+
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
+}
+
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
+}
+
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 3px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F8FCFB;
+}
+
+.directory img {
+	vertical-align: -30%;
+}
+
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
+
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #449D99;
+}
+
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #32736F;
+}
+
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+	border: 1px solid #347975;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #3F918C;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        width: 100%;
+        margin-bottom: 10px;
+        border: 1px solid #B2DDDB;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #B2DDDB;
+        border-bottom: 1px solid #B2DDDB;
+        vertical-align: top;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #B2DDDB;
+        width: 100%;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E6F4F3;
+        font-size: 90%;
+        color: #2C6663;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #B2DDDB;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	background-position: 0 -5px;
+	height:30px;
+	line-height:30px;
+	color:#96D1CE;
+	border:solid 1px #C9E7E6;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#3E8E8A;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+	color: #306E6B;
+	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+	text-decoration: none;        
+}
+
+.navpath li.navelem a:hover
+{
+	color:#77C3BF;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#3E8E8A;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
+	white-space: nowrap;
+}
+
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #FAFCFC;
+	margin:  0px;
+	border-bottom: 1px solid #CBE8E7;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
+}
+
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #63BBB6;
+}
+
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #9CD3D1;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#3A8683;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
+}
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F6FBFA;
+        border: 1px solid #DDF0EF;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 20px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4FB2AD;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+@media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/doxygen.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/doxygen.png
new file mode 100644
index 0000000000000000000000000000000000000000..b47584814dd4fd0b9b4978d1e74c3c0ae8dceb40
GIT binary patch
literal 3812
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

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dynsections.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dynsections.js
new file mode 100644
index 000000000..116542f18
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/dynsections.js
@@ -0,0 +1,78 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function(){ 
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.attr('src','ftv2folderopen.png');
+      a.attr('src','ftv2mnode.png');
+      $(this).show();
+    } else if (l==level+1) {
+      i.attr('src','ftv2folderclosed.png');
+      a.attr('src','ftv2pnode.png');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+function toggleFolder(id) 
+{
+  var n = $('[id^=row_'+id+']');
+  var i = $('[id^=img_'+id+']');
+  var a = $('[id^=arr_'+id+']');
+  var c = n.slice(1);
+  if (c.filter(':first').is(':visible')===true) {
+    i.attr('src','ftv2folderclosed.png');
+    a.attr('src','ftv2pnode.png');
+    c.hide();
+  } else {
+    i.attr('src','ftv2folderopen.png');
+    a.attr('src','ftv2mnode.png');
+    c.show();
+  }
+  updateStripes();
+}
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/files.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/files.html
new file mode 100644
index 000000000..ddca97aee
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/files.html
@@ -0,0 +1,130 @@
+<!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: File List</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 class="current"><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('files.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('0_')"/><img id="img_0_" src="ftv2folderopen.png" alt="-" width="24" height="22" onclick="toggleFolder('0_')"/><a class="el" href="dir_70c5cd4c8bba287fe799894cc0903ca4.html" target="_self">RD117_MBED</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img id="arr_0_0_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('0_0_')"/><img id="img_0_0_" src="ftv2folderopen.png" alt="-" width="24" height="22" onclick="toggleFolder('0_0_')"/><a class="el" href="dir_19b53f07f52837a342947cc20e6d978f.html" target="_self">algorithm</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="algorithm_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="algorithm_8cpp.html" target="_self">algorithm.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="algorithm_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="algorithm_8h.html" target="_self">algorithm.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img id="arr_0_1_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('0_1_')"/><img id="img_0_1_" src="ftv2folderopen.png" alt="-" width="24" height="22" onclick="toggleFolder('0_1_')"/><a class="el" href="dir_d4a9a7556cca61907ce453116086a23a.html" target="_self">MAX30102</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_0_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="_m_a_x30102_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="_m_a_x30102_8cpp.html" target="_self">MAX30102.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="_m_a_x30102_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="_m_a_x30102_8h.html" target="_self">MAX30102.h</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="main_8cpp_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><a class="el" href="main_8cpp.html" target="_self">main.cpp</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/files.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/files.js
new file mode 100644
index 000000000..0b50c07c5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/files.js
@@ -0,0 +1,4 @@
+var files =
+[
+    [ "RD117_MBED", "dir_70c5cd4c8bba287fe799894cc0903ca4.html", "dir_70c5cd4c8bba287fe799894cc0903ca4" ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2blank.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2blank.png
new file mode 100644
index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48
GIT binary patch
literal 86
zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq_BR)5S5Qg7NL$jSLJ7
o42L)T2<A`r@2_xB5a3{uV`H7hz__APvKA!g>FVdQ&MBb@0Ppk@y8r+H

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2cl.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2cl.png
new file mode 100644
index 0000000000000000000000000000000000000000..2bc4fdbf6f8b775f3742d1175be5049388a0a68c
GIT binary patch
literal 456
zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`)q=>Eakt!T5IWL2qeC
zk#>92ETLAF1vdneJ3Nj$8!Va<BqqqewEfY|<b@Beu0AfuviI4OldJ0;&o46JaO$4t
zs$t40r<J9s*3tOGXvgi?<g!f{Z7U?6J+^JDeZT$ly*F>Ru8v#J{KL(>Vg3(20fV_)
z|IAZ-);)o>;9<m#TP9+4j4uMLCp_^^s^f@njO6W2=Tm(q+`zZl<u!xc3qdo6k{L|N
z-;N$l>B@i4yM(9f>P*W`hm{+Wmob)@nEouTYU*EUa<Jj5+#}{@9e+PtRi+20{_7aE
zIVJWSS@G$7{;4N@bwXTUHcgtTc1>O-N0>E(-Tlbzj5D9UceAFh-fFGNa)DEKe{<Ga
zwhuW`TrE}_><5x%nAER_Py7GQ_s*wqqsY=(c1MI6<`wLD=DO8sUr0!=T)#_b(C-cN
zbsEYtx_<ooJ*CT}%x>Zqp?|ygPF*&?upo}<LyKmCrpuY5cMr+4HgMN7mdvm{!B~+Z
z?9hIz@rsrD^zfe#m0mL!Ec{h4`yIoJ4OI$^x09q8_DHP%-~Vj)0b3J>h#<+N^BfEe
O3=E#GelF{r5}E)>G{&F+

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2doc.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2doc.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba5e6c1631f064d0a1942010874a3047be703a37
GIT binary patch
literal 730
zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`(T7)5S5Qg7NKK-)!MT
zk=FS$Qzn_*_n7T7>&tGhg-e5uhJ9$(JL-Cu>y_6Z_B<BxLd6{)*?+{}*|nibBP#HX
zQ|7_2ODegSmwDdm{O%`xAtg=mQfs#)U%uL&;`6rO@BBV@Eo1v_hUIL+4@?SQu{bv5
z)vTRzyFIu4*u=+n@>YD-XW6!<O^(oTQ4vtcYdzt%_{PQ^j1Sr!Hb$`gV4i<!X;OXs
zlo_dlyli(HYIm{eu3~3jawzdl#+?4ALemn(p8n))5V!FbG4Sy@T(EF^DqG8mNo#aB
zZIqC%uFm^*IsI3p;H3A~xA)C`^!ng?m97PuyR@dH<dz@5yIAG<Z{wPkQ#7xBxApwP
z>ErBSvSE$-e&@WEI%}=<?e;wWdE0zX%<p6O61&${$u3}@C%5M9J2B%&jcIXqD|WA*
zmJ!_(7Qd<1kWJ-xiHeic8NF`(Sw}LAu0C!}7cUig@i+2`^_HDE{GaxHnf&ac;LCy|
zx;G<?T-RPL`fmQDz9H|&v=dVv%=(#>I78CVSm$Zv8UEtpk|yuS*{wN!b0p?X*><%r
z+f$pl<ZyT++x6_q&+X@0Po?h-EA9=Ote>(;$mUFiR;%)H-^)L}S!E}^{>ijm?Oajm
zh68VlgBN9Vw2MEVxxJW2eUg#1qtGIz1Kj(#LK>2`Mx~~%KC-XGYwN{=(?*j#Htvd@
zcx_E_eO1^g_6NN2tX46r76|wom`_N|teI3DeEE)qWV+GZw9K4I?8cinJ+DY(*z;iZ
z0^^+1vtKV-^r%YV?d``0W7L$b|Mu7X*Rz_L@YP}S{z<2+t1ir}V9>7+$_Rhq{mYQc
zi@{pT+U^I7<;*1B<;>G2Ccai#{GOrY@MagQi0kugQy+gdT38`-K-@PowmNa%qq(~o
tY(J>%m?v)(XIsVd;rx&P_A~c0h)>&lB`zSSh=GBD!PC{xWt~$(69CtfR3rcZ

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2folderclosed.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2folderclosed.png
new file mode 100644
index 0000000000000000000000000000000000000000..1dea9569a3cc4a3856a3270f82d1e706cc71580d
GIT binary patch
literal 567
zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`*#=)5S5Qg7Iza>AcGh
zBDR;=CvpTOwcqHwD_Xm>Yr-w3)!RPEuKB@Yr}S6Su8}u8Y;&iB(+20zR+r1|EF4?A
zjvu}w>HkQ4;nWXJt;PK{wa<Ue+sW_0&Bu$AVQV5I!z-7!EZz(OM|Q7Y{^{>ei32`z
z<-026)*3ME;MU^Q__6Hqxl1WL@_NTy7#PZ#w9S5gUEcrc%X9vmowAP?ILOUkuUCBj
zXvhgMli3wF<)2IwYd@^mFmsRXPotWR_uTz0FLVF<yX+eKJLjBT>(rLLxps^1nk;+&
zt=u)+WO6iaXVkPUHn94a-MP;{FF|<o?xnv~1ijL|rguzsS+9O7P(|o;_tnoqN(&~%
z9(Q8jc(CU#%VKX2;W=`dv6H!znI}v>#iJq6xG}OoR^x2fwVdY}&Qbpl*Gx6`V7?(F
zF`IKbua3ug9u8lrn+#8uxH$M-SJHcH<egU?q_V=QOsl#;xkb^#bJJo^=@qNkl$%~o
zdnVu$l390ja>;VFDOKCAaA$8WJEahInMFZ;s_(L2!W|7ACBI&V+?+Ro*TGFJZ#rYF
z$+DY)EDcIJFTZrBZvV@7CEw)VwDq}dt@AebZhu{pe>a=Kfp6(zCt2pZ>4``9s}%2l
zcm8*U-(+3|<NdES`yN+D-Tz!&V{c#)vd?{QM}E2Oy)2V^XU-~Q*j2DH{O9`r-#+Rs
c%YMe!`x#8a)M_>{FfcH9y85}Sb4q9e0CMsAzW@LL

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2folderopen.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2folderopen.png
new file mode 100644
index 0000000000000000000000000000000000000000..45ef3e2e68b6c14ec6474049fe1d19e8081c42b3
GIT binary patch
literal 621
zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`$hU>Eakt!T2`zY?g4K
z$iHXD)n;ZTO$zJEO}=a&^lDqk>tzZ}9d|W4xNDi^9mG$q;I3`_&1Kh8UGF6x%b~;}
z>L|WcP&j(Fi&e4hbH6-mb7M}uH%<n{_UHc2{5|*c+~P?&x|*sCGSWE=7Jh$z^TjZD
z9KOCccIVX`g(Xt50!;=krtt@2Hl{Ehn7?Q}vzq+bN{J$w9bqaZ#p%-T_gxJQ_o&jT
zk~!Vv8!>yHZ|R#K`}i3+YjSG7$KDQ{KJ((%+$ozar)-LBJruxJ+4Ov#!{=~z?xmlS
z8D6wry}eA|ZqM{yzvzjpJa#`<Y<_0tbML9?{MY5j+u944Z_Ci|)TsFRbF%-%6&dat
zt~sZ7E<T|wYB^`wi|#Gw(v36(x@PL^d-FEw>6;x3RkpItRR~yVC{m)#d&2GW3Aa@`
zn-<PuHgG${D7>YaSt~9i;@e{VO`IJaYwtb&ZkcGsz;Mjt%7dTBq9ZM*hI7q`kzYMy
zYV*3ydMlLzxm31&uYdIK66<0%PWJO=_f8nTU-D{}bJL8jEhZnttnXyLeSGlJ(Sv;R
z*6p8`ZsY&8+(kn9l_%5vt$g<<uh<?{v15<Xjf0cFh8MN$YAJuLE4lyb?rZa_cDK5p
zp5C)~-+tGR+kZ`Tf7;8ykm-?od9A!JgS+!`r`5i*H$TlcXGm5Nxie#~czJgBqi=tj
zc6ff?`l@G#+m4`_LetgHcV6x6ijbWj@_Kdf<wsU?KhBLVHjN5r1!<b2-+zy}VSnrY
g{}~Jh0{a;)(*BEFKcn}Xfq{X+)78&qol`;+0JRhv0RR91

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2lastnode.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2lastnode.png
new file mode 100644
index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48
GIT binary patch
literal 86
zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq_BR)5S5Qg7NL$jSLJ7
o42L)T2<A`r@2_xB5a3{uV`H7hz__APvKA!g>FVdQ&MBb@0Ppk@y8r+H

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2link.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2link.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba5e6c1631f064d0a1942010874a3047be703a37
GIT binary patch
literal 730
zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`(T7)5S5Qg7NKK-)!MT
zk=FS$Qzn_*_n7T7>&tGhg-e5uhJ9$(JL-Cu>y_6Z_B<BxLd6{)*?+{}*|nibBP#HX
zQ|7_2ODegSmwDdm{O%`xAtg=mQfs#)U%uL&;`6rO@BBV@Eo1v_hUIL+4@?SQu{bv5
z)vTRzyFIu4*u=+n@>YD-XW6!<O^(oTQ4vtcYdzt%_{PQ^j1Sr!Hb$`gV4i<!X;OXs
zlo_dlyli(HYIm{eu3~3jawzdl#+?4ALemn(p8n))5V!FbG4Sy@T(EF^DqG8mNo#aB
zZIqC%uFm^*IsI3p;H3A~xA)C`^!ng?m97PuyR@dH<dz@5yIAG<Z{wPkQ#7xBxApwP
z>ErBSvSE$-e&@WEI%}=<?e;wWdE0zX%<p6O61&${$u3}@C%5M9J2B%&jcIXqD|WA*
zmJ!_(7Qd<1kWJ-xiHeic8NF`(Sw}LAu0C!}7cUig@i+2`^_HDE{GaxHnf&ac;LCy|
zx;G<?T-RPL`fmQDz9H|&v=dVv%=(#>I78CVSm$Zv8UEtpk|yuS*{wN!b0p?X*><%r
z+f$pl<ZyT++x6_q&+X@0Po?h-EA9=Ote>(;$mUFiR;%)H-^)L}S!E}^{>ijm?Oajm
zh68VlgBN9Vw2MEVxxJW2eUg#1qtGIz1Kj(#LK>2`Mx~~%KC-XGYwN{=(?*j#Htvd@
zcx_E_eO1^g_6NN2tX46r76|wom`_N|teI3DeEE)qWV+GZw9K4I?8cinJ+DY(*z;iZ
z0^^+1vtKV-^r%YV?d``0W7L$b|Mu7X*Rz_L@YP}S{z<2+t1ir}V9>7+$_Rhq{mYQc
zi@{pT+U^I7<;*1B<;>G2Ccai#{GOrY@MagQi0kugQy+gdT38`-K-@PowmNa%qq(~o
tY(J>%m?v)(XIsVd;rx&P_A~c0h)>&lB`zSSh=GBD!PC{xWt~$(69CtfR3rcZ

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mlastnode.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mlastnode.png
new file mode 100644
index 0000000000000000000000000000000000000000..0599622a5d11ab58f3a6d81f08176522f10f26b3
GIT binary patch
literal 244
zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq`MSr;B4q1>@Vhihj(F
z5=TGEFKK_k;UT1V$WS4+@!%EHha3ehU9Y4jb;UKPMF>RL?0WghL#r&Yj3p$*r1Jls
z8sp9RYM;;kn!GLd;rTg->MhvbC?;Idm5aM3ztLFY!PcESY}U_xAf|O^!SXnVOV2l|
zip)r@Yn|s+exZeT*Ds#(50m2=Z$8y6>tClP`G24Mi@-NdV*bhRcNfk5CFphKmIdGK
z0$yhxwv_A3Z-oAlY+GTsq-IZp)baT*1(^0R@Mg>JGJSKek%57M!PC{xWt~$(696}z
BWtsp0

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mnode.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mnode.png
new file mode 100644
index 0000000000000000000000000000000000000000..0599622a5d11ab58f3a6d81f08176522f10f26b3
GIT binary patch
literal 244
zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq`MSr;B4q1>@Vhihj(F
z5=TGEFKK_k;UT1V$WS4+@!%EHha3ehU9Y4jb;UKPMF>RL?0WghL#r&Yj3p$*r1Jls
z8sp9RYM;;kn!GLd;rTg->MhvbC?;Idm5aM3ztLFY!PcESY}U_xAf|O^!SXnVOV2l|
zip)r@Yn|s+exZeT*Ds#(50m2=Z$8y6>tClP`G24Mi@-NdV*bhRcNfk5CFphKmIdGK
z0$yhxwv_A3Z-oAlY+GTsq-IZp)baT*1(^0R@Mg>JGJSKek%57M!PC{xWt~$(696}z
BWtsp0

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mo.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2mo.png
new file mode 100644
index 0000000000000000000000000000000000000000..2cb8cd206f118cb2383574b661d5ca560c7ab1d7
GIT binary patch
literal 401
zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`z*c>Eakt!T5IWey_s;
zBJKOHXoN-k9(CQaXxbx%jt5ak0>$S$eo?JqIJj=^oS0fZM{)Lpp?@~7*l{yMxm4pw
zasK3hg)dDPO3LWfSWcfj=g&J!^Y1BJYwok3=#g=lmZF!?K6&x#?pZTx6PXhjwjave
zyRDWv!6{uq|GsdsrVP_;wkyWhg*G!MDCt}@bYOC85oQoxcwo^kk6VJfy|sV2-IM$K
z)IK7bKY2Q%&yl=OIdx9AuU_JD$oj=qQ*ITqOx8ADLqu8LA?O#EP2G;3+h$K6iHI)O
zUQ)y0`BMACtF2qsTB$x$<K9zSxut#P!M(Sylx6R`6T5eI-q(#x=hynj7Kf^t#x?aY
zOcMGn`t{nMbwBwgbVW24$cOwbp2j+X%X@3K<v0I&TMOIAj(l;V2?B|1ybUc^7=2#E
zPMK<=!mXc?lFY!I!G8CP%mJ4x>r@~3^e`o4{P}Mm^^D1W+v8ZriQD!HF)%PNc)I$z
JtaD0e0stJ}r+5GW

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2node.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2node.png
new file mode 100644
index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48
GIT binary patch
literal 86
zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq_BR)5S5Qg7NL$jSLJ7
o42L)T2<A`r@2_xB5a3{uV`H7hz__APvKA!g>FVdQ&MBb@0Ppk@y8r+H

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2ns.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2ns.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b65524618818dfc650ee3b833ed6568115838ce
GIT binary patch
literal 392
zcmeAS@N?(olHy`uVBq!ia0y~yV31&7U=ZVAV_;yoRU6a6z`*G5>Eakt!T9#Bq4!}2
zkpmz1U)$Dv<x1eegsDxlgB%5{EG#TaOT=ViW&bcV#aeevUfsNSzQYAqmy5m{uP(R>
zZZT~t>3ZL%5};VFV%mK8V!YlI@A&(BAE(NGtd&<VUd#}A%H}{s#pd$LxapbRI*bx`
zIv1zazGXY$mabrbZ^BEb9OlzvS!bu(Y-UUl&bw&mz+_p-kRZ%faCPaUDHE@3oqIHD
z%L>Er-hJWOO@WLXI(0w!WHyzSizR3r3*KU7+8eCHv?PtkV4nVl$XEssU8`jW4lI9M
z`zm*qzCY6vvDuEtKUch|d+|H5=}6jwW0}7j@8072Imc=$!%4~P3$MTLtgB`8I6I?J
zD&0SKrK{(4W`&go2X+_CtB$>D#=s_X?>^I?Z)^#|d4b#t3)LEW&pAXnc>ntue&GZc
z1KWK^b6ds@ommR}GN+d?{F(XxzuRe>1N=*^oL>|#m2YHVU|{fc^>bP0l+XkK+IFP+

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2plastnode.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2plastnode.png
new file mode 100644
index 0000000000000000000000000000000000000000..f35d64c4b69adc64a0f61b1ec1808e04e5116bc0
GIT binary patch
literal 231
zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq`M2r;B4q1>@Vfwp@oC
zMA+OpD|mHTxewmDr&iJY#Yu|)0qd5pN=Y`3IjtfuCuc{jy)V|Jm$zxwF(v-C<6`+g
zzO9#+NM@)@<G9co$8hoWqli0NTTSNb>oF+q;S5Qh=vfkU-z%k+Aui_N=4(l+7yTwN
zH}KCtaLwb5s^=ARp;*QkC%!_pqRu3S=>m?L)4U4U3NmjUirq4=QNM9-Yv%0_%UMd7
mmoGTTdBFV3{*Ur3{DF7Wx;u8tl`$|dFnGH9xvX<aXaWEv999+p

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2pnode.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2pnode.png
new file mode 100644
index 0000000000000000000000000000000000000000..f35d64c4b69adc64a0f61b1ec1808e04e5116bc0
GIT binary patch
literal 231
zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq`M2r;B4q1>@Vfwp@oC
zMA+OpD|mHTxewmDr&iJY#Yu|)0qd5pN=Y`3IjtfuCuc{jy)V|Jm$zxwF(v-C<6`+g
zzO9#+NM@)@<G9co$8hoWqli0NTTSNb>oF+q;S5Qh=vfkU-z%k+Aui_N=4(l+7yTwN
zH}KCtaLwb5s^=ARp;*QkC%!_pqRu3S=>m?L)4U4U3NmjUirq4=QNM9-Yv%0_%UMd7
mmoGTTdBFV3{*Ur3{DF7Wx;u8tl`$|dFnGH9xvX<aXaWEv999+p

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2splitbar.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2splitbar.png
new file mode 100644
index 0000000000000000000000000000000000000000..412a7a64a0cb8b4281d893eecd4447fe0b00c9a8
GIT binary patch
literal 309
zcmeAS@N?(olHy`uVBq!ia0y~yU|?flU}4~3VqjqK-LYSgfq~(Vr;B4q1>@Vh8+}C+
zL>wOSdum*q<i1?2jn!k$!H63#S-d<p95hT}^^R$f^pIfK7+@{08nusY-mzz9WhLsC
z|8@8MIqLh4Y4-B)>GSR8?fF~q=h@$js}DC%XMZnupeC>-P$W^rRl-%!jTmN0f62Z-
zJLl~WUtPcD;OC?7{+&yz&VK!M^WNUet51vf&!6}A$G0aB7r)=1_wN67`CWf^-#YrW
y$kx98@1=`MJ&QONYaG((GUy_X`NF=0{VK2ZjA<?59~l@J7(8A5T-G@yGywp#hk^nC

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2vertline.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/ftv2vertline.png
new file mode 100644
index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48
GIT binary patch
literal 86
zcmeAS@N?(olHy`uVBq!ia0y~yU=UznU=ZVAV_;x7xk{#nfq_BR)5S5Qg7NL$jSLJ7
o42L)T2<A`r@2_xB5a3{uV`H7hz__APvKA!g>FVdQ&MBb@0Ppk@y8r+H

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/functions.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/functions.html
new file mode 100644
index 000000000..52b6db98d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/functions.html
@@ -0,0 +1,172 @@
+<!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: Data Fields</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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="functions.html"><span>All</span></a></li>
+      <li><a href="functions_func.html"><span>Functions</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('functions.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="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div><ul>
+<li>Adafruit_NeoPixel()
+: <a class="el" href="class_adafruit___neo_pixel.html#ac314debe6917c8c9b320b785139c6e58">Adafruit_NeoPixel</a>
+</li>
+<li>begin()
+: <a class="el" href="class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7">Adafruit_NeoPixel</a>
+</li>
+<li>canShow()
+: <a class="el" href="class_adafruit___neo_pixel.html#ad38ce8112667b70ad7c411a98892af0e">Adafruit_NeoPixel</a>
+</li>
+<li>clear()
+: <a class="el" href="class_adafruit___neo_pixel.html#ac8bb3912a3ce86b15842e79d0b421204">Adafruit_NeoPixel</a>
+</li>
+<li>Color()
+: <a class="el" href="class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec">Adafruit_NeoPixel</a>
+</li>
+<li>getBrightness()
+: <a class="el" href="class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f">Adafruit_NeoPixel</a>
+</li>
+<li>getPixelColor()
+: <a class="el" href="class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa">Adafruit_NeoPixel</a>
+</li>
+<li>getPixels()
+: <a class="el" href="class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067">Adafruit_NeoPixel</a>
+</li>
+<li>numPixels()
+: <a class="el" href="class_adafruit___neo_pixel.html#ac893a5c07c41604539022af84665c04b">Adafruit_NeoPixel</a>
+</li>
+<li>setBrightness()
+: <a class="el" href="class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53">Adafruit_NeoPixel</a>
+</li>
+<li>setPin()
+: <a class="el" href="class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b">Adafruit_NeoPixel</a>
+</li>
+<li>setPixelColor()
+: <a class="el" href="class_adafruit___neo_pixel.html#abbf243cce591dc37be507cf173485bc8">Adafruit_NeoPixel</a>
+</li>
+<li>show()
+: <a class="el" href="class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7">Adafruit_NeoPixel</a>
+</li>
+<li>updateLength()
+: <a class="el" href="class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944">Adafruit_NeoPixel</a>
+</li>
+<li>updateType()
+: <a class="el" href="class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b">Adafruit_NeoPixel</a>
+</li>
+<li>~Adafruit_NeoPixel()
+: <a class="el" href="class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db">Adafruit_NeoPixel</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/functions_func.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/functions_func.html
new file mode 100644
index 000000000..bb6045f8c
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/functions_func.html
@@ -0,0 +1,172 @@
+<!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: Data Fields - Functions</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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><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="annotated.html"><span>Data&#160;Structures</span></a></li>
+      <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+      <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="functions.html"><span>All</span></a></li>
+      <li class="current"><a href="functions_func.html"><span>Functions</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('functions_func.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="contents">
+&#160;<ul>
+<li>Adafruit_NeoPixel()
+: <a class="el" href="class_adafruit___neo_pixel.html#ac314debe6917c8c9b320b785139c6e58">Adafruit_NeoPixel</a>
+</li>
+<li>begin()
+: <a class="el" href="class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7">Adafruit_NeoPixel</a>
+</li>
+<li>canShow()
+: <a class="el" href="class_adafruit___neo_pixel.html#ad38ce8112667b70ad7c411a98892af0e">Adafruit_NeoPixel</a>
+</li>
+<li>clear()
+: <a class="el" href="class_adafruit___neo_pixel.html#ac8bb3912a3ce86b15842e79d0b421204">Adafruit_NeoPixel</a>
+</li>
+<li>Color()
+: <a class="el" href="class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec">Adafruit_NeoPixel</a>
+</li>
+<li>getBrightness()
+: <a class="el" href="class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f">Adafruit_NeoPixel</a>
+</li>
+<li>getPixelColor()
+: <a class="el" href="class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa">Adafruit_NeoPixel</a>
+</li>
+<li>getPixels()
+: <a class="el" href="class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067">Adafruit_NeoPixel</a>
+</li>
+<li>numPixels()
+: <a class="el" href="class_adafruit___neo_pixel.html#ac893a5c07c41604539022af84665c04b">Adafruit_NeoPixel</a>
+</li>
+<li>setBrightness()
+: <a class="el" href="class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53">Adafruit_NeoPixel</a>
+</li>
+<li>setPin()
+: <a class="el" href="class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b">Adafruit_NeoPixel</a>
+</li>
+<li>setPixelColor()
+: <a class="el" href="class_adafruit___neo_pixel.html#abbf243cce591dc37be507cf173485bc8">Adafruit_NeoPixel</a>
+</li>
+<li>show()
+: <a class="el" href="class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7">Adafruit_NeoPixel</a>
+</li>
+<li>updateLength()
+: <a class="el" href="class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944">Adafruit_NeoPixel</a>
+</li>
+<li>updateType()
+: <a class="el" href="class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b">Adafruit_NeoPixel</a>
+</li>
+<li>~Adafruit_NeoPixel()
+: <a class="el" href="class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db">Adafruit_NeoPixel</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals.html
new file mode 100644
index 000000000..4821639f1
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals.html
@@ -0,0 +1,368 @@
+<!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: Globals</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 class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li class="current"><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_a"><span>a</span></a></li>
+      <li><a href="#index_b"><span>b</span></a></li>
+      <li><a href="#index_c"><span>c</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_h"><span>h</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_n"><span>n</span></a></li>
+      <li><a href="#index_p"><span>p</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_t"><span>t</span></a></li>
+      <li><a href="#index_u"><span>u</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('globals.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>aun_ir_buffer
+: <a class="el" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">main.cpp</a>
+</li>
+<li>aun_red_buffer
+: <a class="el" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">main.cpp</a>
+</li>
+<li>auw_hamm
+: <a class="el" href="algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BUFFER_SIZE
+: <a class="el" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>ch_hr_valid
+: <a class="el" href="main_8cpp.html#a43fb8ea97a26647405ca359095323280">main.cpp</a>
+</li>
+<li>ch_spo2_valid
+: <a class="el" href="main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024">main.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>false
+: <a class="el" href="algorithm_8h.html#a65e9886d74aaee76545e83dd09011727">algorithm.h</a>
+</li>
+<li>FS
+: <a class="el" href="algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>HAMMING_SIZE
+: <a class="el" href="algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8">algorithm.h</a>
+</li>
+<li>HR_FIFO_SIZE
+: <a class="el" href="algorithm_8h.html#aa03906cc2e2d27ef4f3fa4db4312b524">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>i2c()
+: <a class="el" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">MAX30102.cpp</a>
+</li>
+<li>I2C_READ_ADDR
+: <a class="el" href="_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37">MAX30102.h</a>
+</li>
+<li>I2C_WRITE_ADDR
+: <a class="el" href="_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">MAX30102.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MA4_SIZE
+: <a class="el" href="algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae">algorithm.h</a>
+</li>
+<li>main()
+: <a class="el" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main.cpp</a>
+</li>
+<li>MAX_BRIGHTNESS
+: <a class="el" href="main_8cpp.html#a2134a5a06f0865c945543a1f07eba387">main.cpp</a>
+</li>
+<li>maxim_find_peaks()
+: <a class="el" href="algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#a2a4e5ddbe0e04c48b166f2ff176667a9">algorithm.h</a>
+</li>
+<li>maxim_heart_rate_and_oxygen_saturation()
+: <a class="el" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#a62050365673e666cd0d661a3664c26e6">algorithm.h</a>
+</li>
+<li>maxim_max30102_init()
+: <a class="el" href="_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df">MAX30102.cpp</a>
+, <a class="el" href="_m_a_x30102_8h.html#a4113aeee76935425d8a557a79a4193df">MAX30102.h</a>
+</li>
+<li>maxim_max30102_read_fifo()
+: <a class="el" href="_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968">MAX30102.cpp</a>
+, <a class="el" href="_m_a_x30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968">MAX30102.h</a>
+</li>
+<li>maxim_max30102_read_reg()
+: <a class="el" href="_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f">MAX30102.cpp</a>
+, <a class="el" href="_m_a_x30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f">MAX30102.h</a>
+</li>
+<li>maxim_max30102_reset()
+: <a class="el" href="_m_a_x30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd">MAX30102.h</a>
+, <a class="el" href="_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b">MAX30102.cpp</a>
+</li>
+<li>maxim_max30102_write_reg()
+: <a class="el" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">MAX30102.cpp</a>
+, <a class="el" href="_m_a_x30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">MAX30102.h</a>
+</li>
+<li>maxim_peaks_above_min_height()
+: <a class="el" href="algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#aab95338e44281c269f0b9b0f529741bf">algorithm.h</a>
+</li>
+<li>maxim_remove_close_peaks()
+: <a class="el" href="algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#adc6be68be81530d67a25c1a9905bec3a">algorithm.h</a>
+</li>
+<li>maxim_sort_ascend()
+: <a class="el" href="algorithm_8h.html#a6cae46e51640b712afc2ebeefd2d51ff">algorithm.h</a>
+, <a class="el" href="algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff">algorithm.cpp</a>
+</li>
+<li>maxim_sort_indices_descend()
+: <a class="el" href="algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#a44b6312f81810d4deb64071d12ab0060">algorithm.h</a>
+</li>
+<li>min
+: <a class="el" href="algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>n_heart_rate
+: <a class="el" href="main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f">main.cpp</a>
+</li>
+<li>n_ir_buffer_length
+: <a class="el" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">main.cpp</a>
+</li>
+<li>n_sp02
+: <a class="el" href="main_8cpp.html#a786e6c57c793d9af51360154ef90eb93">main.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>pc()
+: <a class="el" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">main.cpp</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>REG_FIFO_CONFIG
+: <a class="el" href="_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca">MAX30102.h</a>
+</li>
+<li>REG_FIFO_DATA
+: <a class="el" href="_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd">MAX30102.h</a>
+</li>
+<li>REG_FIFO_RD_PTR
+: <a class="el" href="_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f">MAX30102.h</a>
+</li>
+<li>REG_FIFO_WR_PTR
+: <a class="el" href="_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115">MAX30102.h</a>
+</li>
+<li>REG_INTR_ENABLE_1
+: <a class="el" href="_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d">MAX30102.h</a>
+</li>
+<li>REG_INTR_ENABLE_2
+: <a class="el" href="_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1">MAX30102.h</a>
+</li>
+<li>REG_INTR_STATUS_1
+: <a class="el" href="_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191">MAX30102.h</a>
+</li>
+<li>REG_INTR_STATUS_2
+: <a class="el" href="_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a">MAX30102.h</a>
+</li>
+<li>REG_LED1_PA
+: <a class="el" href="_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b">MAX30102.h</a>
+</li>
+<li>REG_LED2_PA
+: <a class="el" href="_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21">MAX30102.h</a>
+</li>
+<li>REG_MODE_CONFIG
+: <a class="el" href="_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">MAX30102.h</a>
+</li>
+<li>REG_MULTI_LED_CTRL1
+: <a class="el" href="_m_a_x30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c">MAX30102.h</a>
+</li>
+<li>REG_MULTI_LED_CTRL2
+: <a class="el" href="_m_a_x30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10">MAX30102.h</a>
+</li>
+<li>REG_OVF_COUNTER
+: <a class="el" href="_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707">MAX30102.h</a>
+</li>
+<li>REG_PART_ID
+: <a class="el" href="_m_a_x30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163">MAX30102.h</a>
+</li>
+<li>REG_PILOT_PA
+: <a class="el" href="_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1">MAX30102.h</a>
+</li>
+<li>REG_PROX_INT_THRESH
+: <a class="el" href="_m_a_x30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab">MAX30102.h</a>
+</li>
+<li>REG_REV_ID
+: <a class="el" href="_m_a_x30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23">MAX30102.h</a>
+</li>
+<li>REG_SPO2_CONFIG
+: <a class="el" href="_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0">MAX30102.h</a>
+</li>
+<li>REG_TEMP_CONFIG
+: <a class="el" href="_m_a_x30102_8h.html#ad16bc92e2f92e516ca396214861a6379">MAX30102.h</a>
+</li>
+<li>REG_TEMP_FRAC
+: <a class="el" href="_m_a_x30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d">MAX30102.h</a>
+</li>
+<li>REG_TEMP_INTR
+: <a class="el" href="_m_a_x30102_8h.html#a579a9e43d89bdda85d9ccb206339d681">MAX30102.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>true
+: <a class="el" href="algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>uch_dummy
+: <a class="el" href="main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2">main.cpp</a>
+</li>
+<li>uch_spo2_table
+: <a class="el" href="algorithm_8h.html#adfeeb6b08271807492803acc50347108">algorithm.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_defs.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_defs.html
new file mode 100644
index 000000000..06240b814
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_defs.html
@@ -0,0 +1,260 @@
+<!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: Globals</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 class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li class="current"><a href="globals_defs.html"><span>Macros</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow4" class="tabs3">
+    <ul class="tablist">
+      <li><a href="#index_b"><span>b</span></a></li>
+      <li><a href="#index_f"><span>f</span></a></li>
+      <li><a href="#index_h"><span>h</span></a></li>
+      <li><a href="#index_i"><span>i</span></a></li>
+      <li><a href="#index_m"><span>m</span></a></li>
+      <li><a href="#index_r"><span>r</span></a></li>
+      <li><a href="#index_t"><span>t</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('globals_defs.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="contents">
+&#160;
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BUFFER_SIZE
+: <a class="el" href="algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>false
+: <a class="el" href="algorithm_8h.html#a65e9886d74aaee76545e83dd09011727">algorithm.h</a>
+</li>
+<li>FS
+: <a class="el" href="algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>HAMMING_SIZE
+: <a class="el" href="algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8">algorithm.h</a>
+</li>
+<li>HR_FIFO_SIZE
+: <a class="el" href="algorithm_8h.html#aa03906cc2e2d27ef4f3fa4db4312b524">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>I2C_READ_ADDR
+: <a class="el" href="_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37">MAX30102.h</a>
+</li>
+<li>I2C_WRITE_ADDR
+: <a class="el" href="_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">MAX30102.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MA4_SIZE
+: <a class="el" href="algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae">algorithm.h</a>
+</li>
+<li>MAX_BRIGHTNESS
+: <a class="el" href="main_8cpp.html#a2134a5a06f0865c945543a1f07eba387">main.cpp</a>
+</li>
+<li>min
+: <a class="el" href="algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384">algorithm.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>REG_FIFO_CONFIG
+: <a class="el" href="_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca">MAX30102.h</a>
+</li>
+<li>REG_FIFO_DATA
+: <a class="el" href="_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd">MAX30102.h</a>
+</li>
+<li>REG_FIFO_RD_PTR
+: <a class="el" href="_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f">MAX30102.h</a>
+</li>
+<li>REG_FIFO_WR_PTR
+: <a class="el" href="_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115">MAX30102.h</a>
+</li>
+<li>REG_INTR_ENABLE_1
+: <a class="el" href="_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d">MAX30102.h</a>
+</li>
+<li>REG_INTR_ENABLE_2
+: <a class="el" href="_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1">MAX30102.h</a>
+</li>
+<li>REG_INTR_STATUS_1
+: <a class="el" href="_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191">MAX30102.h</a>
+</li>
+<li>REG_INTR_STATUS_2
+: <a class="el" href="_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a">MAX30102.h</a>
+</li>
+<li>REG_LED1_PA
+: <a class="el" href="_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b">MAX30102.h</a>
+</li>
+<li>REG_LED2_PA
+: <a class="el" href="_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21">MAX30102.h</a>
+</li>
+<li>REG_MODE_CONFIG
+: <a class="el" href="_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">MAX30102.h</a>
+</li>
+<li>REG_MULTI_LED_CTRL1
+: <a class="el" href="_m_a_x30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c">MAX30102.h</a>
+</li>
+<li>REG_MULTI_LED_CTRL2
+: <a class="el" href="_m_a_x30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10">MAX30102.h</a>
+</li>
+<li>REG_OVF_COUNTER
+: <a class="el" href="_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707">MAX30102.h</a>
+</li>
+<li>REG_PART_ID
+: <a class="el" href="_m_a_x30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163">MAX30102.h</a>
+</li>
+<li>REG_PILOT_PA
+: <a class="el" href="_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1">MAX30102.h</a>
+</li>
+<li>REG_PROX_INT_THRESH
+: <a class="el" href="_m_a_x30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab">MAX30102.h</a>
+</li>
+<li>REG_REV_ID
+: <a class="el" href="_m_a_x30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23">MAX30102.h</a>
+</li>
+<li>REG_SPO2_CONFIG
+: <a class="el" href="_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0">MAX30102.h</a>
+</li>
+<li>REG_TEMP_CONFIG
+: <a class="el" href="_m_a_x30102_8h.html#ad16bc92e2f92e516ca396214861a6379">MAX30102.h</a>
+</li>
+<li>REG_TEMP_FRAC
+: <a class="el" href="_m_a_x30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d">MAX30102.h</a>
+</li>
+<li>REG_TEMP_INTR
+: <a class="el" href="_m_a_x30102_8h.html#a579a9e43d89bdda85d9ccb206339d681">MAX30102.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>true
+: <a class="el" href="algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">algorithm.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_func.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_func.html
new file mode 100644
index 000000000..e6ac928f3
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_func.html
@@ -0,0 +1,177 @@
+<!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: Globals</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 class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</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('globals_func.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="contents">
+&#160;<ul>
+<li>i2c()
+: <a class="el" href="_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976">MAX30102.cpp</a>
+</li>
+<li>main()
+: <a class="el" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main.cpp</a>
+</li>
+<li>maxim_find_peaks()
+: <a class="el" href="algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#a2a4e5ddbe0e04c48b166f2ff176667a9">algorithm.h</a>
+</li>
+<li>maxim_heart_rate_and_oxygen_saturation()
+: <a class="el" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#a62050365673e666cd0d661a3664c26e6">algorithm.h</a>
+</li>
+<li>maxim_max30102_init()
+: <a class="el" href="_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df">MAX30102.cpp</a>
+, <a class="el" href="_m_a_x30102_8h.html#a4113aeee76935425d8a557a79a4193df">MAX30102.h</a>
+</li>
+<li>maxim_max30102_read_fifo()
+: <a class="el" href="_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968">MAX30102.cpp</a>
+, <a class="el" href="_m_a_x30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968">MAX30102.h</a>
+</li>
+<li>maxim_max30102_read_reg()
+: <a class="el" href="_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f">MAX30102.cpp</a>
+, <a class="el" href="_m_a_x30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f">MAX30102.h</a>
+</li>
+<li>maxim_max30102_reset()
+: <a class="el" href="_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b">MAX30102.cpp</a>
+, <a class="el" href="_m_a_x30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd">MAX30102.h</a>
+</li>
+<li>maxim_max30102_write_reg()
+: <a class="el" href="_m_a_x30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">MAX30102.h</a>
+, <a class="el" href="_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">MAX30102.cpp</a>
+</li>
+<li>maxim_peaks_above_min_height()
+: <a class="el" href="algorithm_8h.html#aab95338e44281c269f0b9b0f529741bf">algorithm.h</a>
+, <a class="el" href="algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf">algorithm.cpp</a>
+</li>
+<li>maxim_remove_close_peaks()
+: <a class="el" href="algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#adc6be68be81530d67a25c1a9905bec3a">algorithm.h</a>
+</li>
+<li>maxim_sort_ascend()
+: <a class="el" href="algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff">algorithm.cpp</a>
+, <a class="el" href="algorithm_8h.html#a6cae46e51640b712afc2ebeefd2d51ff">algorithm.h</a>
+</li>
+<li>maxim_sort_indices_descend()
+: <a class="el" href="algorithm_8h.html#a44b6312f81810d4deb64071d12ab0060">algorithm.h</a>
+, <a class="el" href="algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060">algorithm.cpp</a>
+</li>
+<li>pc()
+: <a class="el" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">main.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_type.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_type.html
new file mode 100644
index 000000000..953402275
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_type.html
@@ -0,0 +1,129 @@
+<!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: Globals</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 class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</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('globals_type.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="contents">
+&#160;<ul>
+<li>neoPixelType
+: <a class="el" href="_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff">Adafruit_NeoPixel.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_vars.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_vars.html
new file mode 100644
index 000000000..9e5173c39
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/globals_vars.html
@@ -0,0 +1,154 @@
+<!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: Globals</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 class="current"><a href="globals.html"><span>Globals</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow3" class="tabs2">
+    <ul class="tablist">
+      <li><a href="globals.html"><span>All</span></a></li>
+      <li><a href="globals_func.html"><span>Functions</span></a></li>
+      <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+      <li><a href="globals_defs.html"><span>Macros</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('globals_vars.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="contents">
+&#160;<ul>
+<li>aun_ir_buffer
+: <a class="el" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">main.cpp</a>
+</li>
+<li>aun_red_buffer
+: <a class="el" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">main.cpp</a>
+</li>
+<li>auw_hamm
+: <a class="el" href="algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929">algorithm.h</a>
+</li>
+<li>ch_hr_valid
+: <a class="el" href="main_8cpp.html#a43fb8ea97a26647405ca359095323280">main.cpp</a>
+</li>
+<li>ch_spo2_valid
+: <a class="el" href="main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024">main.cpp</a>
+</li>
+<li>n_heart_rate
+: <a class="el" href="main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f">main.cpp</a>
+</li>
+<li>n_ir_buffer_length
+: <a class="el" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">main.cpp</a>
+</li>
+<li>n_sp02
+: <a class="el" href="main_8cpp.html#a786e6c57c793d9af51360154ef90eb93">main.cpp</a>
+</li>
+<li>uch_dummy
+: <a class="el" href="main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2">main.cpp</a>
+</li>
+<li>uch_spo2_table
+: <a class="el" href="algorithm_8h.html#adfeeb6b08271807492803acc50347108">algorithm.h</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/index.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/index.html
new file mode 100644
index 000000000..de51293c7
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/index.html
@@ -0,0 +1,125 @@
+<!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: Main Page</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 class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><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><!-- 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('index.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">Main Page </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1><a class="anchor" id="intro_sec"></a>
+Introduction</h1>
+<p>This is the code documentation for the MAXREFDES117# subsystem reference design.</p>
+<p>The Files page contains the File List page and the Globals page.</p>
+<p>The Globals page contains the Functions, Variables, and Macros sub-pages.</p>
+<div class="image">
+<img src="MAXREFDES117_Block_Diagram.png" alt="MAXREFDES117_Block_Diagram.png"/>
+<div class="caption">
+MAXREFDES117# System Block Diagram</div></div>
+ <div class="image">
+<img src="MAXREFDES117_firmware_Flowchart.png" alt="MAXREFDES117_firmware_Flowchart.png"/>
+<div class="caption">
+MAXREFDES117# Firmware Flowchart</div></div>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+  <ul>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/jquery.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/jquery.js
new file mode 100644
index 000000000..78ad0bdff
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/jquery.js
@@ -0,0 +1,77 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function()
+{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d
+&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),
+f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c)
+{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
+/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,b){function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;if(!b.href||!g||f.nodeName.toLowerCase()!=="map")return!1;h=a("img[usemap=#"+g+"]")[0];return!!h&&d(h)}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}a.ui=a.ui||{};a.ui.version||(a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a.each(["Width","Height"],function(c,d){function h(b,c,d,f){a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)});return c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){if(c===b)return g["inner"+d].call(this);return this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){if(typeof b!="number")return g["outer"+d].call(this,b);return this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!!d&&!!a.element[0].parentNode)for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;if(b[d]>0)return!0;b[d]=1,e=b[d]>0,b[d]=0;return e},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}}))})(jQuery);
+/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}});return d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e;if(f&&e.charAt(0)==="_")return h;f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b){h=f;return!1}}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))});return h}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}this._setOptions(e);return this},_setOptions:function(b){var c=this;a.each(b,function(a,b){c._setOption(a,b)});return this},_setOption:function(a,b){this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b);return this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);this.element.trigger(c,d);return!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);
+/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ *	jquery.ui.widget.js
+ */
+(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent")){a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation();return!1}}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(b){if(!c){this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted){b.preventDefault();return!0}}!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0;return!0}},_mouseMove:function(b){if(a.browser.msie&&!(document.documentMode>=9)&&!b.button)return this._mouseUp(b);if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b));return!this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b));return!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);
+/*
+ * jQuery UI Resizable 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ *	jquery.ui.core.js
+ *	jquery.ui.mouse.js
+ *	jquery.ui.widget.js
+ */
+(function(a,b){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var b=this,c=this.options;this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!c.aspectRatio,aspectRatio:c.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:c.helper||c.ghost||c.animate?c.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=c.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var d=this.handles.split(",");this.handles={};for(var e=0;e<d.length;e++){var f=a.trim(d[e]),g="ui-resizable-"+f,h=a('<div class="ui-resizable-handle '+g+'"></div>');/sw|se|ne|nw/.test(f)&&h.css({zIndex:++c.zIndex}),"se"==f&&h.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[f]=".ui-resizable-"+f,this.element.append(h)}}this._renderAxis=function(b){b=b||this.element;for(var c in this.handles){this.handles[c].constructor==String&&(this.handles[c]=a(this.handles[c],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var d=a(this.handles[c],this.element),e=0;e=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth();var f=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join("");b.css(f,e),this._proportionallyResize()}if(!a(this.handles[c]).length)continue}},this._renderAxis(this.element),this._handles=a(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!b.resizing){if(this.className)var a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=a&&a[1]?a[1]:"se"}}),c.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").hover(function(){c.disabled||(a(this).removeClass("ui-resizable-autohide"),b._handles.show())},function(){c.disabled||b.resizing||(a(this).addClass("ui-resizable-autohide"),b._handles.hide())})),this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var c=this.element;c.after(this.originalElement.css({position:c.css("position"),width:c.outerWidth(),height:c.outerHeight(),top:c.css("top"),left:c.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle),b(this.originalElement);return this},_mouseCapture:function(b){var c=!1;for(var d in this.handles)a(this.handles[d])[0]==b.target&&(c=!0);return!this.options.disabled&&c},_mouseStart:function(b){var d=this.options,e=this.element.position(),f=this.element;this.resizing=!0,this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()},(f.is(".ui-draggable")||/absolute/.test(f.css("position")))&&f.css({position:"absolute",top:e.top,left:e.left}),this._renderProxy();var g=c(this.helper.css("left")),h=c(this.helper.css("top"));d.containment&&(g+=a(d.containment).scrollLeft()||0,h+=a(d.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:g,top:h},this.size=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalSize=this._helper?{width:f.outerWidth(),height:f.outerHeight()}:{width:f.width(),height:f.height()},this.originalPosition={left:g,top:h},this.sizeDiff={width:f.outerWidth()-f.width(),height:f.outerHeight()-f.height()},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio=typeof d.aspectRatio=="number"?d.aspectRatio:this.originalSize.width/this.originalSize.height||1;var i=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",i=="auto"?this.axis+"-resize":i),f.addClass("ui-resizable-resizing"),this._propagate("start",b);return!0},_mouseDrag:function(b){var c=this.helper,d=this.options,e={},f=this,g=this.originalMousePosition,h=this.axis,i=b.pageX-g.left||0,j=b.pageY-g.top||0,k=this._change[h];if(!k)return!1;var l=k.apply(this,[b,i,j]),m=a.browser.msie&&a.browser.version<7,n=this.sizeDiff;this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)l=this._updateRatio(l,b);l=this._respectSize(l,b),this._propagate("resize",b),c.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",b,this.ui());return!1},_mouseStop:function(b){this.resizing=!1;var c=this.options,d=this;if(this._helper){var e=this._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&a.ui.hasScroll(e[0],"left")?0:d.sizeDiff.height,h=f?0:d.sizeDiff.width,i={width:d.helper.width()-h,height:d.helper.height()-g},j=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,k=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;c.animate||this.element.css(a.extend(i,{top:k,left:j})),d.helper.height(d.size.height),d.helper.width(d.size.width),this._helper&&!c.animate&&this._proportionallyResize()}a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove();return!1},_updateVirtualBoundaries:function(a){var b=this.options,c,e,f,g,h;h={minWidth:d(b.minWidth)?b.minWidth:0,maxWidth:d(b.maxWidth)?b.maxWidth:Infinity,minHeight:d(b.minHeight)?b.minHeight:0,maxHeight:d(b.maxHeight)?b.maxHeight:Infinity};if(this._aspectRatio||a)c=h.minHeight*this.aspectRatio,f=h.minWidth/this.aspectRatio,e=h.maxHeight*this.aspectRatio,g=h.maxWidth/this.aspectRatio,c>h.minWidth&&(h.minWidth=c),f>h.minHeight&&(h.minHeight=f),e<h.maxWidth&&(h.maxWidth=e),g<h.maxHeight&&(h.maxHeight=g);this._vBoundaries=h},_updateCache:function(a){var b=this.options;this.offset=this.helper.offset(),d(a.left)&&(this.position.left=a.left),d(a.top)&&(this.position.top=a.top),d(a.height)&&(this.size.height=a.height),d(a.width)&&(this.size.width=a.width)},_updateRatio:function(a,b){var c=this.options,e=this.position,f=this.size,g=this.axis;d(a.height)?a.width=a.height*this.aspectRatio:d(a.width)&&(a.height=a.width/this.aspectRatio),g=="sw"&&(a.left=e.left+(f.width-a.width),a.top=null),g=="nw"&&(a.top=e.top+(f.height-a.height),a.left=e.left+(f.width-a.width));return a},_respectSize:function(a,b){var c=this.helper,e=this._vBoundaries,f=this._aspectRatio||b.shiftKey,g=this.axis,h=d(a.width)&&e.maxWidth&&e.maxWidth<a.width,i=d(a.height)&&e.maxHeight&&e.maxHeight<a.height,j=d(a.width)&&e.minWidth&&e.minWidth>a.width,k=d(a.height)&&e.minHeight&&e.minHeight>a.height;j&&(a.width=e.minWidth),k&&(a.height=e.minHeight),h&&(a.width=e.maxWidth),i&&(a.height=e.maxHeight);var l=this.originalPosition.left+this.originalSize.width,m=this.position.top+this.size.height,n=/sw|nw|w/.test(g),o=/nw|ne|n/.test(g);j&&n&&(a.left=l-e.minWidth),h&&n&&(a.left=l-e.maxWidth),k&&o&&(a.top=m-e.minHeight),i&&o&&(a.top=m-e.maxHeight);var p=!a.width&&!a.height;p&&!a.left&&a.top?a.top=null:p&&!a.top&&a.left&&(a.left=null);return a},_proportionallyResize:function(){var b=this.options;if(!!this._proportionallyResizeElements.length){var c=this.helper||this.element;for(var d=0;d<this._proportionallyResizeElements.length;d++){var e=this._proportionallyResizeElements[d];if(!this.borderDif){var f=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],g=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];this.borderDif=a.map(f,function(a,b){var c=parseInt(a,10)||0,d=parseInt(g[b],10)||0;return c+d})}if(a.browser.msie&&(!!a(c).is(":hidden")||!!a(c).parents(":hidden").length))continue;e.css({height:c.height()-this.borderDif[0]-this.borderDif[2]||0,width:c.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var d=a.browser.msie&&a.browser.version<7,e=d?1:0,f=d?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-e+"px",top:this.elementOffset.top-e+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(a,b,c){return{width:this.originalSize.width+b}},w:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{left:f.left+b,width:e.width-b}},n:function(a,b,c){var d=this.options,e=this.originalSize,f=this.originalPosition;return{top:f.top+c,height:e.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),b!="resize"&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.extend(a.ui.resizable,{version:"1.8.18"}),a.ui.plugin.add("resizable","alsoResize",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=function(b){a(b).each(function(){var b=a(this);b.data("resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})};typeof e.alsoResize=="object"&&!e.alsoResize.parentNode?e.alsoResize.length?(e.alsoResize=e.alsoResize[0],f(e.alsoResize)):a.each(e.alsoResize,function(a){f(a)}):f(e.alsoResize)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0},i=function(b,d){a(b).each(function(){var b=a(this),e=a(this).data("resizable-alsoresize"),f={},g=d&&d.length?d:b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(g,function(a,b){var c=(e[b]||0)+(h[b]||0);c&&c>=0&&(f[b]=c||null)}),b.css(f)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?a.each(e.alsoResize,function(a,b){i(a,b)}):i(e.alsoResize)},stop:function(b,c){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","animate",{stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d._proportionallyResizeElements,g=f.length&&/textarea/i.test(f[0].nodeName),h=g&&a.ui.hasScroll(f[0],"left")?0:d.sizeDiff.height,i=g?0:d.sizeDiff.width,j={width:d.size.width-i,height:d.size.height-h},k=parseInt(d.element.css("left"),10)+(d.position.left-d.originalPosition.left)||null,l=parseInt(d.element.css("top"),10)+(d.position.top-d.originalPosition.top)||null;d.element.animate(a.extend(j,l&&k?{top:l,left:k}:{}),{duration:e.animateDuration,easing:e.animateEasing,step:function(){var c={width:parseInt(d.element.css("width"),10),height:parseInt(d.element.css("height"),10),top:parseInt(d.element.css("top"),10),left:parseInt(d.element.css("left"),10)};f&&f.length&&a(f[0]).css({width:c.width,height:c.height}),d._updateCache(c),d._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(b,d){var e=a(this).data("resizable"),f=e.options,g=e.element,h=f.containment,i=h instanceof a?h.get(0):/parent/.test(h)?g.parent().get(0):h;if(!!i){e.containerElement=a(i);if(/document/.test(h)||h==document)e.containerOffset={left:0,top:0},e.containerPosition={left:0,top:0},e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight};else{var j=a(i),k=[];a(["Top","Right","Left","Bottom"]).each(function(a,b){k[a]=c(j.css("padding"+b))}),e.containerOffset=j.offset(),e.containerPosition=j.position(),e.containerSize={height:j.innerHeight()-k[3],width:j.innerWidth()-k[1]};var l=e.containerOffset,m=e.containerSize.height,n=e.containerSize.width,o=a.ui.hasScroll(i,"left")?i.scrollWidth:n,p=a.ui.hasScroll(i)?i.scrollHeight:m;e.parentData={element:i,left:l.left,top:l.top,width:o,height:p}}}},resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.containerSize,g=d.containerOffset,h=d.size,i=d.position,j=d._aspectRatio||b.shiftKey,k={top:0,left:0},l=d.containerElement;l[0]!=document&&/static/.test(l.css("position"))&&(k=g),i.left<(d._helper?g.left:0)&&(d.size.width=d.size.width+(d._helper?d.position.left-g.left:d.position.left-k.left),j&&(d.size.height=d.size.width/e.aspectRatio),d.position.left=e.helper?g.left:0),i.top<(d._helper?g.top:0)&&(d.size.height=d.size.height+(d._helper?d.position.top-g.top:d.position.top),j&&(d.size.width=d.size.height*e.aspectRatio),d.position.top=d._helper?g.top:0),d.offset.left=d.parentData.left+d.position.left,d.offset.top=d.parentData.top+d.position.top;var m=Math.abs((d._helper?d.offset.left-k.left:d.offset.left-k.left)+d.sizeDiff.width),n=Math.abs((d._helper?d.offset.top-k.top:d.offset.top-g.top)+d.sizeDiff.height),o=d.containerElement.get(0)==d.element.parent().get(0),p=/relative|absolute/.test(d.containerElement.css("position"));o&&p
+&&(m-=d.parentData.left),m+d.size.width>=d.parentData.width&&(d.size.width=d.parentData.width-m,j&&(d.size.height=d.size.width/d.aspectRatio)),n+d.size.height>=d.parentData.height&&(d.size.height=d.parentData.height-n,j&&(d.size.width=d.size.height*d.aspectRatio))},stop:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.position,g=d.containerOffset,h=d.containerPosition,i=d.containerElement,j=a(d.helper),k=j.offset(),l=j.outerWidth()-d.sizeDiff.width,m=j.outerHeight()-d.sizeDiff.height;d._helper&&!e.animate&&/relative/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m}),d._helper&&!e.animate&&/static/.test(i.css("position"))&&a(this).css({left:k.left-h.left-g.left,width:l,height:m})}}),a.ui.plugin.add("resizable","ghost",{start:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size;d.ghost=d.originalElement.clone(),d.ghost.css({opacity:.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof e.ghost=="string"?e.ghost:""),d.ghost.appendTo(d.helper)},resize:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})},stop:function(b,c){var d=a(this).data("resizable"),e=d.options;d.ghost&&d.helper&&d.helper.get(0).removeChild(d.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(b,c){var d=a(this).data("resizable"),e=d.options,f=d.size,g=d.originalSize,h=d.originalPosition,i=d.axis,j=e._aspectRatio||b.shiftKey;e.grid=typeof e.grid=="number"?[e.grid,e.grid]:e.grid;var k=Math.round((f.width-g.width)/(e.grid[0]||1))*(e.grid[0]||1),l=Math.round((f.height-g.height)/(e.grid[1]||1))*(e.grid[1]||1);/^(se|s|e)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l):/^(ne)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l):/^(sw)$/.test(i)?(d.size.width=g.width+k,d.size.height=g.height+l,d.position.left=h.left-k):(d.size.width=g.width+k,d.size.height=g.height+l,d.position.top=h.top-l,d.position.left=h.left-k)}});var c=function(a){return parseInt(a,10)||0},d=function(a){return!isNaN(parseInt(a,10))}})(jQuery);
+/*
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ * 
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
+/**
+ * jQuery.ScrollTo - Easy element scrolling using jQuery.
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 5/25/2009
+ * @author Ariel Flesler
+ * @version 1.4.2
+ *
+ * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
+ */
+;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp.html
new file mode 100644
index 000000000..827500579
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp.html
@@ -0,0 +1,339 @@
+<!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/main.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">
+$(document).ready(function(){initNavTree('main_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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">main.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;mbed.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="algorithm_8h_source.html">algorithm.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="_m_a_x30102_8h_source.html">MAX30102.h</a>&quot;</code><br/>
+</div>
+<p><a href="main_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a2134a5a06f0865c945543a1f07eba387"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>&#160;&#160;&#160;255</td></tr>
+<tr class="separator:a2134a5a06f0865c945543a1f07eba387"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a81e0624d7e9f10f8f7e52a569ba24753"><td class="memItemLeft" align="right" valign="top">Serial&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a> (USBTX, USBRX)</td></tr>
+<tr class="separator:a81e0624d7e9f10f8f7e52a569ba24753"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a07a24850120a56110cc2838d0afcafcf"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a> [500]</td></tr>
+<tr class="separator:a07a24850120a56110cc2838d0afcafcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac16b6dd0e762f0ccc30e7102f97260d6"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a></td></tr>
+<tr class="separator:ac16b6dd0e762f0ccc30e7102f97260d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85d1012c3814f9e393e6ff8d84e56723"><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a> [500]</td></tr>
+<tr class="separator:a85d1012c3814f9e393e6ff8d84e56723"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a786e6c57c793d9af51360154ef90eb93"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a786e6c57c793d9af51360154ef90eb93">n_sp02</a></td></tr>
+<tr class="separator:a786e6c57c793d9af51360154ef90eb93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2518324dce002f592cf6d7f0b1ad9024"><td class="memItemLeft" align="right" valign="top">int8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a></td></tr>
+<tr class="separator:a2518324dce002f592cf6d7f0b1ad9024"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3171c70bfa71c3a4f960bf3e8203d13f"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a></td></tr>
+<tr class="separator:a3171c70bfa71c3a4f960bf3e8203d13f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43fb8ea97a26647405ca359095323280"><td class="memItemLeft" align="right" valign="top">int8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a></td></tr>
+<tr class="separator:a43fb8ea97a26647405ca359095323280"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5e493da8cbdd1414d56e8f08282fcc2"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2">uch_dummy</a></td></tr>
+<tr class="separator:ac5e493da8cbdd1414d56e8f08282fcc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><hr/>
+<p>Project: MAXREFDES117# Filename: <a class="el" href="main_8cpp.html">main.cpp</a> Description: This module contains the Main application for the MAXREFDES117 example program. <hr/>
+<p>This code follows the following naming conventions:</p>
+<p>char ch_pmod_value char (array) s_pmod_s_string[16] float f_pmod_value int32_t n_pmod_value int32_t (array) an_pmod_value[16] int16_t w_pmod_value int16_t (array) aw_pmod_value[16] uint16_t uw_pmod_value uint16_t (array) auw_pmod_value[16] uint8_t uch_pmod_value uint8_t (array) auch_pmod_buffer[16] uint32_t un_pmod_value int32_t * pn_pmod_value <hr/>
+
+<p>Definition in file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a2134a5a06f0865c945543a1f07eba387"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define MAX_BRIGHTNESS&#160;&#160;&#160;255</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00078">78</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int main </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00103">103</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a81e0624d7e9f10f8f7e52a569ba24753"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">Serial pc </td>
+          <td>(</td>
+          <td class="paramtype">USBTX&#160;</td>
+          <td class="paramname">, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">USBRX&#160;</td>
+          <td class="paramname">&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a class="anchor" id="a07a24850120a56110cc2838d0afcafcf"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t aun_ir_buffer[500]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00080">80</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a85d1012c3814f9e393e6ff8d84e56723"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint32_t aun_red_buffer[500]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00082">82</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a43fb8ea97a26647405ca359095323280"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8_t ch_hr_valid</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00086">86</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2518324dce002f592cf6d7f0b1ad9024"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int8_t ch_spo2_valid</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00084">84</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3171c70bfa71c3a4f960bf3e8203d13f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t n_heart_rate</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00085">85</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac16b6dd0e762f0ccc30e7102f97260d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t n_ir_buffer_length</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00081">81</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a786e6c57c793d9af51360154ef90eb93"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int32_t n_sp02</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00083">83</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac5e493da8cbdd1414d56e8f08282fcc2"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t uch_dummy</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="main_8cpp_source.html#l00087">87</a> of file <a class="el" href="main_8cpp_source.html">main.cpp</a>.</p>
+
+</div>
+</div>
+</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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="main_8cpp.html">main.cpp</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp.js
new file mode 100644
index 000000000..103f1ed8d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp.js
@@ -0,0 +1,14 @@
+var main_8cpp =
+[
+    [ "MAX_BRIGHTNESS", "main_8cpp.html#a2134a5a06f0865c945543a1f07eba387", null ],
+    [ "main", "main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4", null ],
+    [ "pc", "main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753", null ],
+    [ "aun_ir_buffer", "main_8cpp.html#a07a24850120a56110cc2838d0afcafcf", null ],
+    [ "aun_red_buffer", "main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723", null ],
+    [ "ch_hr_valid", "main_8cpp.html#a43fb8ea97a26647405ca359095323280", null ],
+    [ "ch_spo2_valid", "main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024", null ],
+    [ "n_heart_rate", "main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f", null ],
+    [ "n_ir_buffer_length", "main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6", null ],
+    [ "n_sp02", "main_8cpp.html#a786e6c57c793d9af51360154ef90eb93", null ],
+    [ "uch_dummy", "main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp_source.html
new file mode 100644
index 000000000..677f249c7
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/main_8cpp_source.html
@@ -0,0 +1,298 @@
+<!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/main.cpp Source File</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">
+$(document).ready(function(){initNavTree('main_8cpp_source.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>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><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">main.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="main_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">* Permission is hereby granted, free of charge, to any person obtaining a</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">* copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">* to deal in the Software without restriction, including without limitation</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">* the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">* and/or sell copies of the Software, and to permit persons to whom the</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">* Software is furnished to do so, subject to the following conditions:</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">* The above copyright notice and this permission notice shall be included</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">* in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">* THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">* OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">* Except as contained in this notice, the name of Maxim Integrated</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">* Products, Inc. shall not be used except as stated in the Maxim Integrated</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">* Products, Inc. Branding Policy.</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">* The mere transfer of this software does not imply any licenses</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">* of trade secrets, proprietary technology, copyrights, patents,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">* trademarks, maskwork rights, or any other form of intellectual</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">* property whatsoever. Maxim Integrated Products, Inc. retains all</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">* ownership rights.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">*******************************************************************************</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="preprocessor">#include &quot;mbed.h&quot;</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="algorithm_8h.html">algorithm.h</a>&quot;</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_m_a_x30102_8h.html">MAX30102.h</a>&quot;</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="main_8cpp.html#a2134a5a06f0865c945543a1f07eba387">   78</a></span>&#160;<span class="preprocessor">#define MAX_BRIGHTNESS 255</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">   80</a></span>&#160;uint32_t <a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>[500]; <span class="comment">//IR LED sensor data</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">   81</a></span>&#160;int32_t <a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>;    <span class="comment">//data length</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">   82</a></span>&#160;uint32_t <a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[500];    <span class="comment">//Red LED sensor data</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="main_8cpp.html#a786e6c57c793d9af51360154ef90eb93">   83</a></span>&#160;int32_t <a class="code" href="main_8cpp.html#a786e6c57c793d9af51360154ef90eb93">n_sp02</a>; <span class="comment">//SPO2 value</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024">   84</a></span>&#160;int8_t <a class="code" href="main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a>;   <span class="comment">//indicator to show if the SP02 calculation is valid</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f">   85</a></span>&#160;int32_t <a class="code" href="main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a>;   <span class="comment">//heart rate value</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="main_8cpp.html#a43fb8ea97a26647405ca359095323280">   86</a></span>&#160;int8_t  <a class="code" href="main_8cpp.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a>;    <span class="comment">//indicator to show if the heart rate calculation is valid</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2">   87</a></span>&#160;uint8_t <a class="code" href="main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2">uch_dummy</a>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;Serial <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>(USBTX, USBRX);    <span class="comment">//initializes the serial port</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor">#ifdef TARGET_KL25Z </span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="preprocessor"></span>PwmOut led(PTB18);  <span class="comment">//initializes the pwm output that connects to the on board LED</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;DigitalIn INT(PTD1);  <span class="comment">//pin PTD1 connects to the interrupt output pin of the MAX30102</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#ifdef TARGET_K64F</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="preprocessor"></span>DigitalIn INT(PTD1);  <span class="comment">//pin PTD1 connects to the interrupt output pin of the MAX30102</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#ifdef TARGET_MAX32600MBED</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor"></span>PwmOut led(LED_RED);    <span class="comment">//initializes the pwm output that connects to the on board LED</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;DigitalIn INT(P2_0);  <span class="comment">//pin P20 connects to the interrupt output pin of the MAX30102</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="comment">// the setup routine runs once when you press reset:</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">  103</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a>() { </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    uint32_t un_min, un_max, un_prev_data;  <span class="comment">//variables to calculate the on-board LED brightness that reflects the heartbeats</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    int32_t n_brightness;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keywordtype">float</span> f_temp;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <a class="code" href="_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b" title="Reset the MAX30102.">maxim_max30102_reset</a>(); <span class="comment">//resets the MAX30102</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="comment">// initialize serial communication at 115200 bits per second:</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.baud(115200);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.format(8,SerialBase::None,1);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    wait(1);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="comment">//read and clear status register</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <a class="code" href="_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(0,&amp;<a class="code" href="main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2">uch_dummy</a>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="comment">//wait until the user presses a key</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keywordflow">while</span>(<a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.readable()==0)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;\x1B[2J&quot;</span>);  <span class="comment">//clear terminal program screen</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;Press any key to start conversion\n\r&quot;</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        wait(1);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <a class="code" href="main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2">uch_dummy</a>=getchar();</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <a class="code" href="_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df" title="Initialize the MAX30102.">maxim_max30102_init</a>();  <span class="comment">//initializes the MAX30102</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    n_brightness=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    un_min=0x3FFFF;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    un_max=0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>=500; <span class="comment">//buffer length of 100 stores 5 seconds of samples running at 100sps</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="comment">//read the first 500 samples, and determine the signal range</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6">n_ir_buffer_length</a>;i++)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        <span class="keywordflow">while</span>(INT.read()==1);   <span class="comment">//wait until the interrupt pin asserts</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        <a class="code" href="_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>((<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>+i), (<a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>+i));  <span class="comment">//read from MAX30102 FIFO</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;            </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <span class="keywordflow">if</span>(un_min&gt;<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i])</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;            un_min=<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i];    <span class="comment">//update signal min</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        <span class="keywordflow">if</span>(un_max&lt;<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i])</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;            un_max=<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i];    <span class="comment">//update signal max</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;red=&quot;</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;%i&quot;</span>, <a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i]);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;, ir=&quot;</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;%i\n\r&quot;</span>, <a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>[i]);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    un_prev_data=<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="comment">//calculate heart rate and SpO2 after first 500 samples (first 5 seconds of samples)</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <a class="code" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6" title="Calculate the heart rate and SpO2 level.">maxim_heart_rate_and_oxygen_saturation</a>(<a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>, n_ir_buffer_length, <a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>, &amp;<a class="code" href="main_8cpp.html#a786e6c57c793d9af51360154ef90eb93">n_sp02</a>, &amp;<a class="code" href="main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a>, &amp;<a class="code" href="main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a>, &amp;<a class="code" href="main_8cpp.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a>); </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="comment">//Continuously taking samples from MAX30102.  Heart rate and SpO2 are calculated every 1 second</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <span class="keywordflow">while</span>(1)</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        i=0;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        un_min=0x3FFFF;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        un_max=0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        <span class="comment">//dumping the first 100 sets of samples in the memory and shift the last 400 sets of samples to the top</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        <span class="keywordflow">for</span>(i=100;i&lt;500;i++)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;            <a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i-100]=<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;            <a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>[i-100]=<a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>[i];</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;            </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;            <span class="comment">//update the signal min and max</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;            <span class="keywordflow">if</span>(un_min&gt;<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i])</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;            un_min=<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;            <span class="keywordflow">if</span>(un_max&lt;<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i])</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;            un_max=<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <span class="comment">//take 100 sets of samples before calculating the heart rate.</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;        <span class="keywordflow">for</span>(i=400;i&lt;500;i++)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;            un_prev_data=<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i-1];</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;            <span class="keywordflow">while</span>(INT.read()==1);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;            <a class="code" href="_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>((<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>+i), (<a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>+i));</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;            <span class="keywordflow">if</span>(<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i]&gt;un_prev_data)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;            {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                f_temp=<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i]-un_prev_data;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;                f_temp/=(un_max-un_min);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;                f_temp*=<a class="code" href="main_8cpp.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;                n_brightness-=(int)f_temp;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;                <span class="keywordflow">if</span>(n_brightness&lt;0)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;                    n_brightness=0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;            }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;            {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                f_temp=un_prev_data-<a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i];</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;                f_temp/=(un_max-un_min);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                f_temp*=<a class="code" href="main_8cpp.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;                n_brightness+=(int)f_temp;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;                <span class="keywordflow">if</span>(n_brightness&gt;<a class="code" href="main_8cpp.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>)</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;                    n_brightness=<a class="code" href="main_8cpp.html#a2134a5a06f0865c945543a1f07eba387">MAX_BRIGHTNESS</a>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;            }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="preprocessor">#if defined(TARGET_KL25Z) || defined(TARGET_MAX32600MBED)</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="preprocessor"></span>            led.write(1-(<span class="keywordtype">float</span>)n_brightness/256);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="preprocessor"></span>            <span class="comment">//send samples and calculation result to terminal program through UART</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;            <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;red=&quot;</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;            <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;%i&quot;</span>, <a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>[i]);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;            <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;, ir=&quot;</span>);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;            <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;%i&quot;</span>, <a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>[i]);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;            <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;, HR=%i, &quot;</span>, <a class="code" href="main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a>); </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;            <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;HRvalid=%i, &quot;</span>, <a class="code" href="main_8cpp.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a>);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;            <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;SpO2=%i, &quot;</span>, <a class="code" href="main_8cpp.html#a786e6c57c793d9af51360154ef90eb93">n_sp02</a>);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;            <a class="code" href="main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753">pc</a>.printf(<span class="stringliteral">&quot;SPO2Valid=%i\n\r&quot;</span>, <a class="code" href="main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a>);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <a class="code" href="algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6" title="Calculate the heart rate and SpO2 level.">maxim_heart_rate_and_oxygen_saturation</a>(<a class="code" href="main_8cpp.html#a07a24850120a56110cc2838d0afcafcf">aun_ir_buffer</a>, n_ir_buffer_length, <a class="code" href="main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723">aun_red_buffer</a>, &amp;<a class="code" href="main_8cpp.html#a786e6c57c793d9af51360154ef90eb93">n_sp02</a>, &amp;<a class="code" href="main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024">ch_spo2_valid</a>, &amp;<a class="code" href="main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f">n_heart_rate</a>, &amp;<a class="code" href="main_8cpp.html#a43fb8ea97a26647405ca359095323280">ch_hr_valid</a>); </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;}</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160; </div>
+</div><!-- fragment --></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_70c5cd4c8bba287fe799894cc0903ca4.html">RD117_MBED</a></li><li class="navelem"><a class="el" href="main_8cpp.html">main.cpp</a></li>
+    <li class="footer">Generated on Wed Jun 22 2016 15:24:07 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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp.html
new file mode 100644
index 000000000..8f38ddc93
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp.html
@@ -0,0 +1,354 @@
+<!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/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><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('max30102_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="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">max30102.cpp File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="max30102_8h_source.html">max30102.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="_soft_i2_c_master_8h_source.html">SoftI2CMaster.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="algorithm_8h_source.html">algorithm.h</a>&quot;</code><br/>
+</div>
+<p><a href="max30102_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">maxim_max30102_write_reg</a> (uint8_t uch_addr, uint8_t uch_data)</td></tr>
+<tr class="memdesc:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a value to a MAX30102 register.  <a href="#a4c2ec1539c1ec8354cdaefe2c3bf48d6"></a><br/></td></tr>
+<tr class="separator:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0cd2c5a58e57ebbe8c9361384798331f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f">maxim_max30102_read_reg</a> (uint8_t uch_addr, uint8_t *puch_data)</td></tr>
+<tr class="memdesc:a0cd2c5a58e57ebbe8c9361384798331f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a MAX30102 register.  <a href="#a0cd2c5a58e57ebbe8c9361384798331f"></a><br/></td></tr>
+<tr class="separator:a0cd2c5a58e57ebbe8c9361384798331f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4113aeee76935425d8a557a79a4193df"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8cpp.html#a4113aeee76935425d8a557a79a4193df">maxim_max30102_init</a> ()</td></tr>
+<tr class="memdesc:a4113aeee76935425d8a557a79a4193df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize the MAX30102.  <a href="#a4113aeee76935425d8a557a79a4193df"></a><br/></td></tr>
+<tr class="separator:a4113aeee76935425d8a557a79a4193df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968">maxim_max30102_read_fifo</a> (uint32_t *pun_red_led, uint32_t *pun_ir_led)</td></tr>
+<tr class="memdesc:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a set of samples from the MAX30102 FIFO register.  <a href="#a483073cbc9dbb7a5a2495ce2ae4fb968"></a><br/></td></tr>
+<tr class="separator:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1df3bb178b66379a2975c56395c47d9b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b">maxim_max30102_reset</a> ()</td></tr>
+<tr class="memdesc:a1df3bb178b66379a2975c56395c47d9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the MAX30102.  <a href="#a1df3bb178b66379a2975c56395c47d9b"></a><br/></td></tr>
+<tr class="separator:a1df3bb178b66379a2975c56395c47d9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><pre class="fragment">******************************************************
+</pre><p>Project: MAXREFDES117# Filename: <a class="el" href="max30102_8cpp.html">max30102.cpp</a> Description: This module is an embedded controller driver for the MAX30102</p>
+<p>Revision History: <br/>
+ 1-18-2016 Rev 01.00 GL Initial release. <br/>
+ <hr/>
+<p>This code follows the following naming conventions:</p>
+<p>char ch_pmod_value char (array) s_pmod_s_string[16] float f_pmod_value int32_t n_pmod_value int32_t (array) an_pmod_value[16] int16_t w_pmod_value int16_t (array) aw_pmod_value[16] uint16_t uw_pmod_value uint16_t (array) auw_pmod_value[16] uint8_t uch_pmod_value uint8_t (array) auch_pmod_buffer[16] uint32_t un_pmod_value int32_t * pn_pmod_value <hr/>
+
+<p>Definition in file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a4113aeee76935425d8a557a79a4193df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_init </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initialize the MAX30102. </p>
+<dl class="section user"><dt>Details</dt><dd>This function initializes the MAX30102</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00111">111</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a483073cbc9dbb7a5a2495ce2ae4fb968"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_read_fifo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_red_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_ir_led</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Read a set of samples from the MAX30102 FIFO register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function reads a set of samples from the MAX30102 FIFO register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pun_red_led</td><td>- pointer that stores the red LED reading data </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pun_ir_led</td><td>- pointer that stores the IR LED reading data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00154">154</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0cd2c5a58e57ebbe8c9361384798331f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_read_reg </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>puch_data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Read a MAX30102 register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function reads a MAX30102 register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_addr</td><td>- register address </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">puch_data</td><td>- pointer that stores the register data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00088">88</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1df3bb178b66379a2975c56395c47d9b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_reset </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Reset the MAX30102. </p>
+<dl class="section user"><dt>Details</dt><dd>This function resets the MAX30102</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00202">202</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c2ec1539c1ec8354cdaefe2c3bf48d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_write_reg </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Write a value to a MAX30102 register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function writes a value to a MAX30102 register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_addr</td><td>- register address </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_data</td><td>- register data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00066">66</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+</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="max30102_8cpp.html">max30102.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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp.js
new file mode 100644
index 000000000..1da6ec5f3
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp.js
@@ -0,0 +1,8 @@
+var max30102_8cpp =
+[
+    [ "maxim_max30102_init", "max30102_8cpp.html#a4113aeee76935425d8a557a79a4193df", null ],
+    [ "maxim_max30102_read_fifo", "max30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968", null ],
+    [ "maxim_max30102_read_reg", "max30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f", null ],
+    [ "maxim_max30102_reset", "max30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b", null ],
+    [ "maxim_max30102_write_reg", "max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp_source.html
new file mode 100644
index 000000000..632f6602c
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8cpp_source.html
@@ -0,0 +1,263 @@
+<!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/max30102.cpp Source File</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('max30102_8cpp_source.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">max30102.cpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="max30102_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">* Permission is hereby granted, free of charge, to any person obtaining a</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">* copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">* to deal in the Software without restriction, including without limitation</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">* the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">* and/or sell copies of the Software, and to permit persons to whom the</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">* Software is furnished to do so, subject to the following conditions:</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">* The above copyright notice and this permission notice shall be included</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">* in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">* THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">* OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">* Except as contained in this notice, the name of Maxim Integrated</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">* Products, Inc. shall not be used except as stated in the Maxim Integrated</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">* Products, Inc. Branding Policy.</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">* The mere transfer of this software does not imply any licenses</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">* of trade secrets, proprietary technology, copyrights, patents,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">* trademarks, maskwork rights, or any other form of intellectual</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">* property whatsoever. Maxim Integrated Products, Inc. retains all</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">* ownership rights.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">*******************************************************************************</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="max30102_8h.html">max30102.h</a>&quot;</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_soft_i2_c_master_8h.html">SoftI2CMaster.h</a>&quot;</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="algorithm_8h.html">algorithm.h</a>&quot;</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="max30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">   66</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(uint8_t uch_addr, uint8_t uch_data)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;{</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a876a5d83cf8b5fa662b04a81657d8d30">i2c_start</a>(<a class="code" href="max30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">I2C_WRITE_ADDR</a>))</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13">i2c_write</a>(uch_addr))</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13">i2c_write</a>(uch_data))</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  <a class="code" href="_soft_i2_c_master_8h.html#ad35d4e4f52ca74b503d5e5e1e0a3f5f3">i2c_stop</a>();</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;}</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="max30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f">   88</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(uint8_t uch_addr, uint8_t *puch_data)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;{</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a876a5d83cf8b5fa662b04a81657d8d30">i2c_start</a>(<a class="code" href="max30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">I2C_WRITE_ADDR</a>))</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13">i2c_write</a>(uch_addr))</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a68105c3bb259544bcc000c21b8e5d355">i2c_rep_start</a>(<a class="code" href="max30102_8h.html#a11a0148c64950f3315f38d957cd43d37">I2C_READ_ADDR</a>))</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;  </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  *puch_data=<a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  <a class="code" href="_soft_i2_c_master_8h.html#ad35d4e4f52ca74b503d5e5e1e0a3f5f3">i2c_stop</a>();</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;}</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="code" href="max30102_8h.html#a4113aeee76935425d8a557a79a4193df">  111</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a4113aeee76935425d8a557a79a4193df" title="Initialize the MAX30102.">maxim_max30102_init</a>()</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;{</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <a class="code" href="_soft_i2_c_master_8h.html#ad5dc48c57198db1ee444a61405d2ea3d">i2c_init</a>();</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d">REG_INTR_ENABLE_1</a>,0xc0)) <span class="comment">// INTR setting</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1">REG_INTR_ENABLE_2</a>,0x00))</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#aba8c69cb46224fb35783f5b60e75b115">REG_FIFO_WR_PTR</a>,0x00))  <span class="comment">//FIFO_WR_PTR[4:0]</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707">REG_OVF_COUNTER</a>,0x00))  <span class="comment">//OVF_COUNTER[4:0]</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f">REG_FIFO_RD_PTR</a>,0x00))  <span class="comment">//FIFO_RD_PTR[4:0]</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca">REG_FIFO_CONFIG</a>,0x4f))  <span class="comment">//sample avg = 4, fifo rollover=false, fifo almost full = 17</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">REG_MODE_CONFIG</a>,0x03))   <span class="comment">//0x02 for Red only, 0x03 for SpO2 mode 0x07 multimode LED</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#a38546015e987a72b8c9eb13228237dd0">REG_SPO2_CONFIG</a>,0x27))  <span class="comment">// SPO2_ADC range = 4096nA, SPO2 sample rate (100 Hz), LED pulseWidth (411uS)</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b">REG_LED1_PA</a>,0x24))   <span class="comment">//Choose value for ~ 7mA for LED1</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21">REG_LED2_PA</a>,0x24))   <span class="comment">// Choose value for ~ 7mA for LED2</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#a371750304ec49457d3d38f60428f8ff1">REG_PILOT_PA</a>,0x7f))   <span class="comment">// Choose value for ~ 25mA for Pilot LED</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;  </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;}</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_UNO)</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="preprocessor"></span><span class="comment">//Arduino Uno doesn&#39;t have enough SRAM to store 100 samples of IR led data and red led data in 32-bit format</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="comment">//To solve this problem, 16-bit MSB of the sampled data will be truncated.  Samples become 16-bit data.</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>(uint16_t *pun_red_led, uint16_t *pun_ir_led)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"><a class="code" href="max30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968">  154</a></span>&#160;<span class="preprocessor"></span><span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>(uint32_t *pun_red_led, uint32_t *pun_ir_led)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;{</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  uint32_t un_temp;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  uint8_t uch_temp;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  *pun_ir_led=0;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  *pun_red_led=0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  <a class="code" href="max30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(<a class="code" href="max30102_8h.html#a7d161a2394a67a2176d549edb94f4191">REG_INTR_STATUS_1</a>, &amp;uch_temp);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  <a class="code" href="max30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(<a class="code" href="max30102_8h.html#a61d809a1e313a2787b23e96de9554c4a">REG_INTR_STATUS_2</a>, &amp;uch_temp);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a876a5d83cf8b5fa662b04a81657d8d30">i2c_start</a>(<a class="code" href="max30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">I2C_WRITE_ADDR</a>))</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a5abe73d680cae254aafa5227e6d87a13">i2c_write</a>(<a class="code" href="max30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd">REG_FIFO_DATA</a>))</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  <span class="keywordflow">if</span>(!<a class="code" href="_soft_i2_c_master_8h.html#a68105c3bb259544bcc000c21b8e5d355">i2c_rep_start</a>(<a class="code" href="max30102_8h.html#a11a0148c64950f3315f38d957cd43d37">I2C_READ_ADDR</a>))</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;  </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  un_temp=<a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  un_temp&lt;&lt;=16;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  *pun_red_led+=un_temp;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  un_temp=<a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  un_temp&lt;&lt;=8;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  *pun_red_led+=un_temp;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  un_temp=<a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  *pun_red_led+=un_temp;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  un_temp=<a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;  un_temp&lt;&lt;=16;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  *pun_ir_led+=un_temp;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  un_temp=<a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keyword">false</span>);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  un_temp&lt;&lt;=8;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  *pun_ir_led+=un_temp;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  un_temp=<a class="code" href="_soft_i2_c_master_8h.html#a717c8440b070832a7d3375cfd5a526ef">i2c_read</a>(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  *pun_ir_led+=un_temp;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  <a class="code" href="_soft_i2_c_master_8h.html#ad35d4e4f52ca74b503d5e5e1e0a3f5f3">i2c_stop</a>();</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  *pun_red_led&amp;=0x03FFFF;  <span class="comment">//Mask MSB [23:18]</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  *pun_ir_led&amp;=0x03FFFF;  <span class="comment">//Mask MSB [23:18]</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;}</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div>
+<div class="line"><a name="l00202"></a><span class="lineno"><a class="code" href="max30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd">  202</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b" title="Reset the MAX30102.">maxim_max30102_reset</a>()</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;{</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <span class="keywordflow">if</span>(!<a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(<a class="code" href="max30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">REG_MODE_CONFIG</a>,0x40))</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;    </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;}</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div>
+</div><!-- fragment --></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="max30102_8cpp.html">max30102.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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h.html
new file mode 100644
index 000000000..3cb457be6
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h.html
@@ -0,0 +1,741 @@
+<!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/max30102.h 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('max30102_8h.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="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">max30102.h File Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;arduino.h&gt;</code><br/>
+</div>
+<p><a href="max30102_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a7978167075eb8954c1090fc7ce9647c6"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">I2C_WRITE_ADDR</a>&#160;&#160;&#160;0xAE</td></tr>
+<tr class="separator:a7978167075eb8954c1090fc7ce9647c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a11a0148c64950f3315f38d957cd43d37"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a11a0148c64950f3315f38d957cd43d37">I2C_READ_ADDR</a>&#160;&#160;&#160;0xAF</td></tr>
+<tr class="separator:a11a0148c64950f3315f38d957cd43d37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d161a2394a67a2176d549edb94f4191"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a7d161a2394a67a2176d549edb94f4191">REG_INTR_STATUS_1</a>&#160;&#160;&#160;0x00</td></tr>
+<tr class="separator:a7d161a2394a67a2176d549edb94f4191"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61d809a1e313a2787b23e96de9554c4a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a61d809a1e313a2787b23e96de9554c4a">REG_INTR_STATUS_2</a>&#160;&#160;&#160;0x01</td></tr>
+<tr class="separator:a61d809a1e313a2787b23e96de9554c4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae07f3c26106a0a37b6eddd8d2653137d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d">REG_INTR_ENABLE_1</a>&#160;&#160;&#160;0x02</td></tr>
+<tr class="separator:ae07f3c26106a0a37b6eddd8d2653137d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8d58d945ad576d492f669c7b9affbf1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1">REG_INTR_ENABLE_2</a>&#160;&#160;&#160;0x03</td></tr>
+<tr class="separator:ab8d58d945ad576d492f669c7b9affbf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba8c69cb46224fb35783f5b60e75b115"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#aba8c69cb46224fb35783f5b60e75b115">REG_FIFO_WR_PTR</a>&#160;&#160;&#160;0x04</td></tr>
+<tr class="separator:aba8c69cb46224fb35783f5b60e75b115"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9c8026aa9a22fad4c22ee6b10613707"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707">REG_OVF_COUNTER</a>&#160;&#160;&#160;0x05</td></tr>
+<tr class="separator:af9c8026aa9a22fad4c22ee6b10613707"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b9d75d4ac3cb579e8b46dea27f4303f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f">REG_FIFO_RD_PTR</a>&#160;&#160;&#160;0x06</td></tr>
+<tr class="separator:a3b9d75d4ac3cb579e8b46dea27f4303f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05bf6ede83fa400eac4dd65788d996fd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd">REG_FIFO_DATA</a>&#160;&#160;&#160;0x07</td></tr>
+<tr class="separator:a05bf6ede83fa400eac4dd65788d996fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1b1bbfe23c9461e0ae75b71b9f805ca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca">REG_FIFO_CONFIG</a>&#160;&#160;&#160;0x08</td></tr>
+<tr class="separator:ad1b1bbfe23c9461e0ae75b71b9f805ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:accdea52b28f1bd3f4cd63d05ab12887f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">REG_MODE_CONFIG</a>&#160;&#160;&#160;0x09</td></tr>
+<tr class="separator:accdea52b28f1bd3f4cd63d05ab12887f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38546015e987a72b8c9eb13228237dd0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a38546015e987a72b8c9eb13228237dd0">REG_SPO2_CONFIG</a>&#160;&#160;&#160;0x0A</td></tr>
+<tr class="separator:a38546015e987a72b8c9eb13228237dd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f3a6641b201203d41ed3d23b638a96b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b">REG_LED1_PA</a>&#160;&#160;&#160;0x0C</td></tr>
+<tr class="separator:a5f3a6641b201203d41ed3d23b638a96b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7df43b0f854c9caf2fe04ccdebb18d21"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21">REG_LED2_PA</a>&#160;&#160;&#160;0x0D</td></tr>
+<tr class="separator:a7df43b0f854c9caf2fe04ccdebb18d21"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a371750304ec49457d3d38f60428f8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a371750304ec49457d3d38f60428f8ff1">REG_PILOT_PA</a>&#160;&#160;&#160;0x10</td></tr>
+<tr class="separator:a371750304ec49457d3d38f60428f8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d333cff4d002cb1d09a319e6917bc5c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c">REG_MULTI_LED_CTRL1</a>&#160;&#160;&#160;0x11</td></tr>
+<tr class="separator:a9d333cff4d002cb1d09a319e6917bc5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05ed274928d49bb6ddd6def6e45fac10"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10">REG_MULTI_LED_CTRL2</a>&#160;&#160;&#160;0x12</td></tr>
+<tr class="separator:a05ed274928d49bb6ddd6def6e45fac10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a579a9e43d89bdda85d9ccb206339d681"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a579a9e43d89bdda85d9ccb206339d681">REG_TEMP_INTR</a>&#160;&#160;&#160;0x1F</td></tr>
+<tr class="separator:a579a9e43d89bdda85d9ccb206339d681"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5321d8a33f1225ab437032e0e8ecbb3d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d">REG_TEMP_FRAC</a>&#160;&#160;&#160;0x20</td></tr>
+<tr class="separator:a5321d8a33f1225ab437032e0e8ecbb3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad16bc92e2f92e516ca396214861a6379"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#ad16bc92e2f92e516ca396214861a6379">REG_TEMP_CONFIG</a>&#160;&#160;&#160;0x21</td></tr>
+<tr class="separator:ad16bc92e2f92e516ca396214861a6379"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d80b09e301a0155949b7c337ce5f5ab"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab">REG_PROX_INT_THRESH</a>&#160;&#160;&#160;0x30</td></tr>
+<tr class="separator:a3d80b09e301a0155949b7c337ce5f5ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16f4b970762f7e8aa1f5c7a780a48c23"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23">REG_REV_ID</a>&#160;&#160;&#160;0xFE</td></tr>
+<tr class="separator:a16f4b970762f7e8aa1f5c7a780a48c23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a46083d1b6d3e1d5f89b0f1598dc6d163"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163">REG_PART_ID</a>&#160;&#160;&#160;0xFF</td></tr>
+<tr class="separator:a46083d1b6d3e1d5f89b0f1598dc6d163"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a4113aeee76935425d8a557a79a4193df"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a4113aeee76935425d8a557a79a4193df">maxim_max30102_init</a> ()</td></tr>
+<tr class="memdesc:a4113aeee76935425d8a557a79a4193df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize the MAX30102.  <a href="#a4113aeee76935425d8a557a79a4193df"></a><br/></td></tr>
+<tr class="separator:a4113aeee76935425d8a557a79a4193df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968">maxim_max30102_read_fifo</a> (uint32_t *pun_red_led, uint32_t *pun_ir_led)</td></tr>
+<tr class="memdesc:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a set of samples from the MAX30102 FIFO register.  <a href="#a483073cbc9dbb7a5a2495ce2ae4fb968"></a><br/></td></tr>
+<tr class="separator:a483073cbc9dbb7a5a2495ce2ae4fb968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6">maxim_max30102_write_reg</a> (uint8_t uch_addr, uint8_t uch_data)</td></tr>
+<tr class="memdesc:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Write a value to a MAX30102 register.  <a href="#a4c2ec1539c1ec8354cdaefe2c3bf48d6"></a><br/></td></tr>
+<tr class="separator:a4c2ec1539c1ec8354cdaefe2c3bf48d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0cd2c5a58e57ebbe8c9361384798331f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f">maxim_max30102_read_reg</a> (uint8_t uch_addr, uint8_t *puch_data)</td></tr>
+<tr class="memdesc:a0cd2c5a58e57ebbe8c9361384798331f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read a MAX30102 register.  <a href="#a0cd2c5a58e57ebbe8c9361384798331f"></a><br/></td></tr>
+<tr class="separator:a0cd2c5a58e57ebbe8c9361384798331f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94ab5935f6ce28aa5ce31aa842eb83dd"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="max30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd">maxim_max30102_reset</a> (void)</td></tr>
+<tr class="memdesc:a94ab5935f6ce28aa5ce31aa842eb83dd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the MAX30102.  <a href="#a94ab5935f6ce28aa5ce31aa842eb83dd"></a><br/></td></tr>
+<tr class="separator:a94ab5935f6ce28aa5ce31aa842eb83dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><pre class="fragment">******************************************************
+</pre><p>Project: MAXREFDES117# Filename: <a class="el" href="max30102_8h.html">max30102.h</a> Description: This module is an embedded controller driver header file for MAX30102</p>
+<p>Revision History: <br/>
+ 1-18-2016 Rev 01.00 GL Initial release. <br/>
+ <hr/>
+<p>This code follows the following naming conventions:</p>
+<p>char ch_pmod_value char (array) s_pmod_s_string[16] float f_pmod_value int32_t n_pmod_value int32_t (array) an_pmod_value[16] int16_t w_pmod_value int16_t (array) aw_pmod_value[16] uint16_t uw_pmod_value uint16_t (array) auw_pmod_value[16] uint8_t uch_pmod_value uint8_t (array) auch_pmod_buffer[16] uint32_t un_pmod_value int32_t * pn_pmod_value <hr/>
+
+<p>Definition in file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+</div><h2 class="groupheader">Macro Definition Documentation</h2>
+<a class="anchor" id="a11a0148c64950f3315f38d957cd43d37"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_READ_ADDR&#160;&#160;&#160;0xAF</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00067">67</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7978167075eb8954c1090fc7ce9647c6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define I2C_WRITE_ADDR&#160;&#160;&#160;0xAE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00066">66</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad1b1bbfe23c9461e0ae75b71b9f805ca"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_FIFO_CONFIG&#160;&#160;&#160;0x08</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00078">78</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a05bf6ede83fa400eac4dd65788d996fd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_FIFO_DATA&#160;&#160;&#160;0x07</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00077">77</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3b9d75d4ac3cb579e8b46dea27f4303f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_FIFO_RD_PTR&#160;&#160;&#160;0x06</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00076">76</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aba8c69cb46224fb35783f5b60e75b115"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_FIFO_WR_PTR&#160;&#160;&#160;0x04</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00074">74</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae07f3c26106a0a37b6eddd8d2653137d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_INTR_ENABLE_1&#160;&#160;&#160;0x02</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00072">72</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab8d58d945ad576d492f669c7b9affbf1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_INTR_ENABLE_2&#160;&#160;&#160;0x03</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00073">73</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d161a2394a67a2176d549edb94f4191"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_INTR_STATUS_1&#160;&#160;&#160;0x00</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00070">70</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a61d809a1e313a2787b23e96de9554c4a"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_INTR_STATUS_2&#160;&#160;&#160;0x01</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00071">71</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5f3a6641b201203d41ed3d23b638a96b"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_LED1_PA&#160;&#160;&#160;0x0C</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00081">81</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7df43b0f854c9caf2fe04ccdebb18d21"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_LED2_PA&#160;&#160;&#160;0x0D</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00082">82</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="accdea52b28f1bd3f4cd63d05ab12887f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_MODE_CONFIG&#160;&#160;&#160;0x09</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00079">79</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d333cff4d002cb1d09a319e6917bc5c"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_MULTI_LED_CTRL1&#160;&#160;&#160;0x11</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00084">84</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a05ed274928d49bb6ddd6def6e45fac10"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_MULTI_LED_CTRL2&#160;&#160;&#160;0x12</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00085">85</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af9c8026aa9a22fad4c22ee6b10613707"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_OVF_COUNTER&#160;&#160;&#160;0x05</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00075">75</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a46083d1b6d3e1d5f89b0f1598dc6d163"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_PART_ID&#160;&#160;&#160;0xFF</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00091">91</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a371750304ec49457d3d38f60428f8ff1"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_PILOT_PA&#160;&#160;&#160;0x10</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00083">83</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3d80b09e301a0155949b7c337ce5f5ab"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_PROX_INT_THRESH&#160;&#160;&#160;0x30</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00089">89</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a16f4b970762f7e8aa1f5c7a780a48c23"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_REV_ID&#160;&#160;&#160;0xFE</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00090">90</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a38546015e987a72b8c9eb13228237dd0"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_SPO2_CONFIG&#160;&#160;&#160;0x0A</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00080">80</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad16bc92e2f92e516ca396214861a6379"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_TEMP_CONFIG&#160;&#160;&#160;0x21</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00088">88</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5321d8a33f1225ab437032e0e8ecbb3d"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_TEMP_FRAC&#160;&#160;&#160;0x20</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00087">87</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a579a9e43d89bdda85d9ccb206339d681"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define REG_TEMP_INTR&#160;&#160;&#160;0x1F</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Definition at line <a class="el" href="max30102_8h_source.html#l00086">86</a> of file <a class="el" href="max30102_8h_source.html">max30102.h</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="a4113aeee76935425d8a557a79a4193df"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_init </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Initialize the MAX30102. </p>
+<dl class="section user"><dt>Details</dt><dd>This function initializes the MAX30102</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00111">111</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a483073cbc9dbb7a5a2495ce2ae4fb968"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_read_fifo </td>
+          <td>(</td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_red_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t *&#160;</td>
+          <td class="paramname"><em>pun_ir_led</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Read a set of samples from the MAX30102 FIFO register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function reads a set of samples from the MAX30102 FIFO register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pun_red_led</td><td>- pointer that stores the red LED reading data </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">*pun_ir_led</td><td>- pointer that stores the IR LED reading data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00154">154</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0cd2c5a58e57ebbe8c9361384798331f"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_read_reg </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t *&#160;</td>
+          <td class="paramname"><em>puch_data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Read a MAX30102 register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function reads a MAX30102 register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_addr</td><td>- register address </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">puch_data</td><td>- pointer that stores the register data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00088">88</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94ab5935f6ce28aa5ce31aa842eb83dd"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_reset </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Reset the MAX30102. </p>
+<dl class="section user"><dt>Details</dt><dd>This function resets the MAX30102</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">None</td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00202">202</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c2ec1539c1ec8354cdaefe2c3bf48d6"></a>
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool maxim_max30102_write_reg </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>uch_data</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Write a value to a MAX30102 register. </p>
+<dl class="section user"><dt>Details</dt><dd>This function writes a value to a MAX30102 register</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_addr</td><td>- register address </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">uch_data</td><td>- register data</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+  <table class="retval">
+    <tr><td class="paramname">true</td><td>on success </td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p>Definition at line <a class="el" href="max30102_8cpp_source.html#l00066">66</a> of file <a class="el" href="max30102_8cpp_source.html">max30102.cpp</a>.</p>
+
+</div>
+</div>
+</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="max30102_8h.html">max30102.h</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h.js
new file mode 100644
index 000000000..c11d6e492
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h.js
@@ -0,0 +1,32 @@
+var max30102_8h =
+[
+    [ "I2C_READ_ADDR", "max30102_8h.html#a11a0148c64950f3315f38d957cd43d37", null ],
+    [ "I2C_WRITE_ADDR", "max30102_8h.html#a7978167075eb8954c1090fc7ce9647c6", null ],
+    [ "REG_FIFO_CONFIG", "max30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca", null ],
+    [ "REG_FIFO_DATA", "max30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd", null ],
+    [ "REG_FIFO_RD_PTR", "max30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f", null ],
+    [ "REG_FIFO_WR_PTR", "max30102_8h.html#aba8c69cb46224fb35783f5b60e75b115", null ],
+    [ "REG_INTR_ENABLE_1", "max30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d", null ],
+    [ "REG_INTR_ENABLE_2", "max30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1", null ],
+    [ "REG_INTR_STATUS_1", "max30102_8h.html#a7d161a2394a67a2176d549edb94f4191", null ],
+    [ "REG_INTR_STATUS_2", "max30102_8h.html#a61d809a1e313a2787b23e96de9554c4a", null ],
+    [ "REG_LED1_PA", "max30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b", null ],
+    [ "REG_LED2_PA", "max30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21", null ],
+    [ "REG_MODE_CONFIG", "max30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f", null ],
+    [ "REG_MULTI_LED_CTRL1", "max30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c", null ],
+    [ "REG_MULTI_LED_CTRL2", "max30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10", null ],
+    [ "REG_OVF_COUNTER", "max30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707", null ],
+    [ "REG_PART_ID", "max30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163", null ],
+    [ "REG_PILOT_PA", "max30102_8h.html#a371750304ec49457d3d38f60428f8ff1", null ],
+    [ "REG_PROX_INT_THRESH", "max30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab", null ],
+    [ "REG_REV_ID", "max30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23", null ],
+    [ "REG_SPO2_CONFIG", "max30102_8h.html#a38546015e987a72b8c9eb13228237dd0", null ],
+    [ "REG_TEMP_CONFIG", "max30102_8h.html#ad16bc92e2f92e516ca396214861a6379", null ],
+    [ "REG_TEMP_FRAC", "max30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d", null ],
+    [ "REG_TEMP_INTR", "max30102_8h.html#a579a9e43d89bdda85d9ccb206339d681", null ],
+    [ "maxim_max30102_init", "max30102_8h.html#a4113aeee76935425d8a557a79a4193df", null ],
+    [ "maxim_max30102_read_fifo", "max30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968", null ],
+    [ "maxim_max30102_read_reg", "max30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f", null ],
+    [ "maxim_max30102_reset", "max30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd", null ],
+    [ "maxim_max30102_write_reg", "max30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6", null ]
+];
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h_source.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h_source.html
new file mode 100644
index 000000000..e5e24e9d0
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/max30102_8h_source.html
@@ -0,0 +1,196 @@
+<!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/max30102.h Source File</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('max30102_8h_source.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">max30102.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="max30102_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">* Permission is hereby granted, free of charge, to any person obtaining a</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">* copy of this software and associated documentation files (the &quot;Software&quot;),</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">* to deal in the Software without restriction, including without limitation</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">* the rights to use, copy, modify, merge, publish, distribute, sublicense,</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">* and/or sell copies of the Software, and to permit persons to whom the</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">* Software is furnished to do so, subject to the following conditions:</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">* The above copyright notice and this permission notice shall be included</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">* in all copies or substantial portions of the Software.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">* THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment">* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment">* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">* OTHER DEALINGS IN THE SOFTWARE.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">* Except as contained in this notice, the name of Maxim Integrated</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">* Products, Inc. shall not be used except as stated in the Maxim Integrated</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment">* Products, Inc. Branding Policy.</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">*</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">* The mere transfer of this software does not imply any licenses</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">* of trade secrets, proprietary technology, copyrights, patents,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment">* trademarks, maskwork rights, or any other form of intellectual</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">* property whatsoever. Maxim Integrated Products, Inc. retains all</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">* ownership rights.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">*******************************************************************************</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#ifndef MAX30102_H_</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define MAX30102_H_</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#include &lt;arduino.h&gt;</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="code" href="max30102_8h.html#a7978167075eb8954c1090fc7ce9647c6">   66</a></span>&#160;<span class="preprocessor">#define I2C_WRITE_ADDR 0xAE</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="max30102_8h.html#a11a0148c64950f3315f38d957cd43d37">   67</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define I2C_READ_ADDR 0xAF</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">//register addresses</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="code" href="max30102_8h.html#a7d161a2394a67a2176d549edb94f4191">   70</a></span>&#160;<span class="preprocessor">#define REG_INTR_STATUS_1 0x00</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="max30102_8h.html#a61d809a1e313a2787b23e96de9554c4a">   71</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_INTR_STATUS_2 0x01</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"><a class="code" href="max30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d">   72</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_INTR_ENABLE_1 0x02</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno"><a class="code" href="max30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1">   73</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_INTR_ENABLE_2 0x03</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="code" href="max30102_8h.html#aba8c69cb46224fb35783f5b60e75b115">   74</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_FIFO_WR_PTR 0x04</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="max30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707">   75</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_OVF_COUNTER 0x05</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno"><a class="code" href="max30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f">   76</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_FIFO_RD_PTR 0x06</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="code" href="max30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd">   77</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_FIFO_DATA 0x07</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="code" href="max30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca">   78</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_FIFO_CONFIG 0x08</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="max30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f">   79</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_MODE_CONFIG 0x09</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno"><a class="code" href="max30102_8h.html#a38546015e987a72b8c9eb13228237dd0">   80</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_SPO2_CONFIG 0x0A</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno"><a class="code" href="max30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b">   81</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_LED1_PA 0x0C</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="max30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21">   82</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_LED2_PA 0x0D</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="code" href="max30102_8h.html#a371750304ec49457d3d38f60428f8ff1">   83</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_PILOT_PA 0x10</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="max30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c">   84</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_MULTI_LED_CTRL1 0x11</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="max30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10">   85</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_MULTI_LED_CTRL2 0x12</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="code" href="max30102_8h.html#a579a9e43d89bdda85d9ccb206339d681">   86</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_TEMP_INTR 0x1F</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="max30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d">   87</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_TEMP_FRAC 0x20</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="max30102_8h.html#ad16bc92e2f92e516ca396214861a6379">   88</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_TEMP_CONFIG 0x21</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="max30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab">   89</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_PROX_INT_THRESH 0x30</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="max30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23">   90</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_REV_ID 0xFE</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="max30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163">   91</a></span>&#160;<span class="preprocessor"></span><span class="preprocessor">#define REG_PART_ID 0xFF</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="preprocessor"></span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a4113aeee76935425d8a557a79a4193df" title="Initialize the MAX30102.">maxim_max30102_init</a>();</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="preprocessor">#if defined(ARDUINO_AVR_UNO)</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="preprocessor"></span><span class="comment">//Arduino Uno doesn&#39;t have enough SRAM to store 100 samples of IR led data and red led data in 32-bit format</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment">//To solve this problem, 16-bit MSB of the sampled data will be truncated.  Samples become 16-bit data.</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>(uint16_t *pun_red_led, uint16_t *pun_ir_led);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="preprocessor"></span><span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968" title="Read a set of samples from the MAX30102 FIFO register.">maxim_max30102_read_fifo</a>(uint32_t *pun_red_led, uint32_t *pun_ir_led);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="preprocessor"></span><span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6" title="Write a value to a MAX30102 register.">maxim_max30102_write_reg</a>(uint8_t uch_addr, uint8_t uch_data);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f" title="Read a MAX30102 register.">maxim_max30102_read_reg</a>(uint8_t uch_addr, uint8_t *puch_data);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="max30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b" title="Reset the MAX30102.">maxim_max30102_reset</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/*  MAX30102_H_ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></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="max30102_8h.html">max30102.h</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>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/maxim-logo-1.jpg b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/maxim-logo-1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..083102ecef4b5608b525ddc239f2682c9c859c3b
GIT binary patch
literal 5329
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

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_f.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_f.png
new file mode 100644
index 0000000000000000000000000000000000000000..f581216456977005702071ad33d083dabb964fea
GIT binary patch
literal 149
zcmeAS@N?(olHy`uVBq!ia0y~yU|?imV6fm|Vqjp{%*48zfq@~$)5S5Qg7NKLN4^#V
z9_9mE>h!0_dd;?Yde`GkVsIWuW5uBp+x~Fgth2rmUhsB<oy8Svld59-5OpnC?<Y=+
zE(G+<P;OtJX;5S0GC%69(kHK7Z>G3DQCa%?|4Z)rCFP1K?hSWWFfcGMc)I$ztaD0e
F0sytLH%0&e

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_g.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_g.png
new file mode 100644
index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81
GIT binary patch
literal 95
zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU|{25V_;xl68K`sz`&s9>Eakt!T9#BAuj_1
z2lGLH5An2?hw;3+c6B?R`YL3e_I+`nnVp?Km|^dqCL2};1_lOCS3j3^P6<r_r(zf(

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_h.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/nav_h.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6dce2b665186cd474316a0e1fd69f6101f399a5
GIT binary patch
literal 96
zcmeAS@N?(olHy`uVBq!ia0y~yU|?imVBq0kVqjp<dFjBwz`&sH>Eakt!T9#Bp(uj`
z$KeZGG}2sZ`x{?|Jo$S<!Sibm>$H-*H~$YYAMax6s^Y)w4$|Z4>gTe~DWM4fZowUU

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtree.css b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtree.css
new file mode 100644
index 000000000..f42ab8786
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtree.css
@@ -0,0 +1,143 @@
+#nav-tree .children_ul {
+  margin:0;
+  padding:4px;
+}
+
+#nav-tree ul {
+  list-style:none outside none;
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree li {
+  white-space:nowrap;
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree .plus {
+  margin:0px;
+}
+
+#nav-tree .selected {
+  background-image: url('tab_a.png');
+  background-repeat:repeat-x;
+  color: #fff;
+  text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+  margin:0px;
+  padding:0px;
+  border:0px;
+  vertical-align: middle;
+}
+
+#nav-tree a {
+  text-decoration:none;
+  padding:0px;
+  margin:0px;
+  outline:none;
+}
+
+#nav-tree .label {
+  margin:0px;
+  padding:0px;
+  font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+#nav-tree .label a {
+  padding:2px;
+}
+
+#nav-tree .selected a {
+  text-decoration:none;
+  color:#fff;
+}
+
+#nav-tree .children_ul {
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree .item {
+  margin:0px;
+  padding:0px;
+}
+
+#nav-tree {
+  padding: 0px 0px;
+  background-color: #FAFAFF; 
+  font-size:14px;
+  overflow:auto;
+}
+
+#doc-content {
+  overflow:auto;
+  display:block;
+  padding:0px;
+  margin:0px;
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#side-nav {
+  padding:0 6px 0 0;
+  margin: 0px;
+  display:block;
+  position: absolute;
+  left: 0px;
+  width: 300px;
+}
+
+.ui-resizable .ui-resizable-handle {
+  display:block;
+}
+
+.ui-resizable-e {
+  background:url("ftv2splitbar.png") repeat scroll right center transparent;
+  cursor:e-resize;
+  height:100%;
+  right:0;
+  top:0;
+  width:6px;
+}
+
+.ui-resizable-handle {
+  display:none;
+  font-size:0.1px;
+  position:absolute;
+  z-index:1;
+}
+
+#nav-tree-contents {
+  margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+  background-image:url('nav_h.png');
+  background-repeat:repeat-x;
+  background-color: #FAFCFC;
+  -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#nav-sync {
+  position:absolute;
+  top:5px;
+  right:24px;
+  z-index:0;
+}
+
+#nav-sync img {
+  opacity:0.3;
+}
+
+#nav-sync img:hover {
+  opacity:0.9;
+}
+
+@media print
+{
+  #nav-tree { display: none; }
+  div.ui-resizable-handle { display: none; position: relative; }
+}
+
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtree.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtree.js
new file mode 100644
index 000000000..0a9ec5768
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtree.js
@@ -0,0 +1,519 @@
+var NAVTREE =
+[
+  [ "MAXREFDES117# Code Documentation", "index.html", [
+    [ "Main Page", "index.html", null ],
+    [ "Files", null, [
+      [ "File List", "files.html", "files" ],
+      [ "Globals", "globals.html", [
+        [ "All", "globals.html", null ],
+        [ "Functions", "globals_func.html", null ],
+        [ "Variables", "globals_vars.html", null ],
+        [ "Macros", "globals_defs.html", null ]
+      ] ]
+    ] ]
+  ] ]
+];
+
+var NAVTREEINDEX =
+[
+"_m_a_x30102_8cpp.html"
+];
+
+var SYNCONMSG = 'click to disable panel synchronisation';
+var SYNCOFFMSG = 'click to enable panel synchronisation';
+var navTreeSubIndices = new Array();
+
+function getData(varName)
+{
+  var i = varName.lastIndexOf('/');
+  var n = i>=0 ? varName.substring(i+1) : varName;
+  return eval(n.replace(/\-/g,'_'));
+}
+
+function stripPath(uri)
+{
+  return uri.substring(uri.lastIndexOf('/')+1);
+}
+
+function stripPath2(uri)
+{
+  var i = uri.lastIndexOf('/');
+  var s = uri.substring(i+1);
+  var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
+  return m ? uri.substring(i-6) : s;
+}
+
+function localStorageSupported()
+{
+  try {
+    return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
+  }
+  catch(e) {
+    return false;
+  }
+}
+
+
+function storeLink(link)
+{
+  if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
+      window.localStorage.setItem('navpath',link);
+  }
+}
+
+function deleteLink()
+{
+  if (localStorageSupported()) {
+    window.localStorage.setItem('navpath','');
+  } 
+}
+
+function cachedLink()
+{
+  if (localStorageSupported()) {
+    return window.localStorage.getItem('navpath');
+  } else {
+    return '';
+  }
+}
+
+function getScript(scriptName,func,show)
+{
+  var head = document.getElementsByTagName("head")[0]; 
+  var script = document.createElement('script');
+  script.id = scriptName;
+  script.type = 'text/javascript';
+  script.onload = func; 
+  script.src = scriptName+'.js'; 
+  if ($.browser.msie && $.browser.version<=8) { 
+    // script.onload does work with older versions of IE
+    script.onreadystatechange = function() {
+      if (script.readyState=='complete' || script.readyState=='loaded') { 
+        func(); if (show) showRoot(); 
+      }
+    }
+  }
+  head.appendChild(script); 
+}
+
+function createIndent(o,domNode,node,level)
+{
+  if (node.parentNode && node.parentNode.parentNode) {
+    createIndent(o,domNode,node.parentNode,level+1);
+  }
+  var imgNode = document.createElement("img");
+  imgNode.width = 16;
+  imgNode.height = 22;
+  if (level==0 && node.childrenData) {
+    node.plus_img = imgNode;
+    node.expandToggle = document.createElement("a");
+    node.expandToggle.href = "javascript:void(0)";
+    node.expandToggle.onclick = function() {
+      if (node.expanded) {
+        $(node.getChildrenUL()).slideUp("fast");
+        if (node.isLast) {
+          node.plus_img.src = node.relpath+"ftv2plastnode.png";
+        } else {
+          node.plus_img.src = node.relpath+"ftv2pnode.png";
+        }
+        node.expanded = false;
+      } else {
+        expandNode(o, node, false, false);
+      }
+    }
+    node.expandToggle.appendChild(imgNode);
+    domNode.appendChild(node.expandToggle);
+  } else {
+    domNode.appendChild(imgNode);
+  }
+  if (level==0) {
+    if (node.isLast) {
+      if (node.childrenData) {
+        imgNode.src = node.relpath+"ftv2plastnode.png";
+      } else {
+        imgNode.src = node.relpath+"ftv2lastnode.png";
+        domNode.appendChild(imgNode);
+      }
+    } else {
+      if (node.childrenData) {
+        imgNode.src = node.relpath+"ftv2pnode.png";
+      } else {
+        imgNode.src = node.relpath+"ftv2node.png";
+        domNode.appendChild(imgNode);
+      }
+    }
+  } else {
+    if (node.isLast) {
+      imgNode.src = node.relpath+"ftv2blank.png";
+    } else {
+      imgNode.src = node.relpath+"ftv2vertline.png";
+    }
+  }
+  imgNode.border = "0";
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+  var node = new Object();
+  node.children = Array();
+  node.childrenData = childrenData;
+  node.depth = po.depth + 1;
+  node.relpath = po.relpath;
+  node.isLast = lastNode;
+
+  node.li = document.createElement("li");
+  po.getChildrenUL().appendChild(node.li);
+  node.parentNode = po;
+
+  node.itemDiv = document.createElement("div");
+  node.itemDiv.className = "item";
+
+  node.labelSpan = document.createElement("span");
+  node.labelSpan.className = "label";
+
+  createIndent(o,node.itemDiv,node,0);
+  node.itemDiv.appendChild(node.labelSpan);
+  node.li.appendChild(node.itemDiv);
+
+  var a = document.createElement("a");
+  node.labelSpan.appendChild(a);
+  node.label = document.createTextNode(text);
+  node.expanded = false;
+  a.appendChild(node.label);
+  if (link) {
+    var url;
+    if (link.substring(0,1)=='^') {
+      url = link.substring(1);
+      link = url;
+    } else {
+      url = node.relpath+link;
+    }
+    a.className = stripPath(link.replace('#',':'));
+    if (link.indexOf('#')!=-1) {
+      var aname = '#'+link.split('#')[1];
+      var srcPage = stripPath($(location).attr('pathname'));
+      var targetPage = stripPath(link.split('#')[0]);
+      a.href = srcPage!=targetPage ? url : '#';
+      a.onclick = function(){
+        storeLink(link);
+        if (!$(a).parent().parent().hasClass('selected'))
+        {
+          $('.item').removeClass('selected');
+          $('.item').removeAttr('id');
+          $(a).parent().parent().addClass('selected');
+          $(a).parent().parent().attr('id','selected');
+        }
+        var pos, anchor = $(aname), docContent = $('#doc-content');
+        if (anchor.parent().attr('class')=='memItemLeft') {
+          pos = anchor.parent().position().top;
+        } else if (anchor.position()) {
+          pos = anchor.position().top;
+        }
+        if (pos) {
+          var dist = Math.abs(Math.min(
+                     pos-docContent.offset().top,
+                     docContent[0].scrollHeight-
+                     docContent.height()-docContent.scrollTop()));
+          docContent.animate({
+            scrollTop: pos + docContent.scrollTop() - docContent.offset().top
+          },Math.max(50,Math.min(500,dist)),function(){
+            window.location.replace(aname);
+          });
+        }
+      };
+    } else {
+      a.href = url;
+      a.onclick = function() { storeLink(link); }
+    }
+  } else {
+    if (childrenData != null) 
+    {
+      a.className = "nolink";
+      a.href = "javascript:void(0)";
+      a.onclick = node.expandToggle.onclick;
+    }
+  }
+
+  node.childrenUL = null;
+  node.getChildrenUL = function() {
+    if (!node.childrenUL) {
+      node.childrenUL = document.createElement("ul");
+      node.childrenUL.className = "children_ul";
+      node.childrenUL.style.display = "none";
+      node.li.appendChild(node.childrenUL);
+    }
+    return node.childrenUL;
+  };
+
+  return node;
+}
+
+function showRoot()
+{
+  var headerHeight = $("#top").height();
+  var footerHeight = $("#nav-path").height();
+  var windowHeight = $(window).height() - headerHeight - footerHeight;
+  (function (){ // retry until we can scroll to the selected item
+    try {
+      var navtree=$('#nav-tree');
+      navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+    } catch (err) {
+      setTimeout(arguments.callee, 0);
+    }
+  })();
+}
+
+function expandNode(o, node, imm, showRoot)
+{
+  if (node.childrenData && !node.expanded) {
+    if (typeof(node.childrenData)==='string') {
+      var varName    = node.childrenData;
+      getScript(node.relpath+varName,function(){
+        node.childrenData = getData(varName);
+        expandNode(o, node, imm, showRoot);
+      }, showRoot);
+    } else {
+      if (!node.childrenVisited) {
+        getNode(o, node);
+      } if (imm || ($.browser.msie && $.browser.version>8)) { 
+        // somehow slideDown jumps to the start of tree for IE9 :-(
+        $(node.getChildrenUL()).show();
+      } else {
+        $(node.getChildrenUL()).slideDown("fast");
+      }
+      if (node.isLast) {
+        node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+      } else {
+        node.plus_img.src = node.relpath+"ftv2mnode.png";
+      }
+      node.expanded = true;
+    }
+  }
+}
+
+function glowEffect(n,duration)
+{
+  n.addClass('glow').delay(duration).queue(function(next){
+    $(this).removeClass('glow');next();
+  });
+}
+
+function highlightAnchor()
+{
+  var anchor = $($(location).attr('hash'));
+  if (anchor.parent().attr('class')=='memItemLeft'){
+    var rows = $('.memberdecls tr[class$="'+
+               window.location.hash.substring(1)+'"]');
+    glowEffect(rows.children(),300); // member without details
+  } else if (anchor.parents().slice(2).prop('tagName')=='TR') {
+    glowEffect(anchor.parents('div.memitem'),1000); // enum value
+  } else if (anchor.parent().attr('class')=='fieldtype'){
+    glowEffect(anchor.parent().parent(),1000); // struct field
+  } else if (anchor.parent().is(":header")) {
+    glowEffect(anchor.parent(),1000); // section header
+  } else {
+    glowEffect(anchor.next(),1000); // normal member
+  }
+}
+
+function selectAndHighlight(hash,n)
+{
+  var a;
+  if (hash) {
+    var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1);
+    a=$('.item a[class$="'+link+'"]');
+  }
+  if (a && a.length) {
+    a.parent().parent().addClass('selected');
+    a.parent().parent().attr('id','selected');
+    highlightAnchor();
+  } else if (n) {
+    $(n.itemDiv).addClass('selected');
+    $(n.itemDiv).attr('id','selected');
+  }
+  showRoot();
+}
+
+function showNode(o, node, index, hash)
+{
+  if (node && node.childrenData) {
+    if (typeof(node.childrenData)==='string') {
+      var varName    = node.childrenData;
+      getScript(node.relpath+varName,function(){
+        node.childrenData = getData(varName);
+        showNode(o,node,index,hash);
+      },true);
+    } else {
+      if (!node.childrenVisited) {
+        getNode(o, node);
+      }
+      $(node.getChildrenUL()).show();
+      if (node.isLast) {
+        node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+      } else {
+        node.plus_img.src = node.relpath+"ftv2mnode.png";
+      }
+      node.expanded = true;
+      var n = node.children[o.breadcrumbs[index]];
+      if (index+1<o.breadcrumbs.length) {
+        showNode(o,n,index+1,hash);
+      } else {
+        if (typeof(n.childrenData)==='string') {
+          var varName = n.childrenData;
+          getScript(n.relpath+varName,function(){
+            n.childrenData = getData(varName);
+            node.expanded=false;
+            showNode(o,node,index,hash); // retry with child node expanded
+          },true);
+        } else {
+          var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
+          if (rootBase=="index" || rootBase=="pages") {
+            expandNode(o, n, true, true);
+          }
+          selectAndHighlight(hash,n);
+        }
+      }
+    }
+  } else {
+    selectAndHighlight(hash);
+  }
+}
+
+function getNode(o, po)
+{
+  po.childrenVisited = true;
+  var l = po.childrenData.length-1;
+  for (var i in po.childrenData) {
+    var nodeData = po.childrenData[i];
+    po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+      i==l);
+  }
+}
+
+function gotoNode(o,subIndex,root,hash,relpath)
+{
+  var nti = navTreeSubIndices[subIndex][root+hash];
+  o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
+  if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
+    navTo(o,NAVTREE[0][1],"",relpath);
+    $('.item').removeClass('selected');
+    $('.item').removeAttr('id');
+  }
+  if (o.breadcrumbs) {
+    o.breadcrumbs.unshift(0); // add 0 for root node
+    showNode(o, o.node, 0, hash);
+  }
+}
+
+function navTo(o,root,hash,relpath)
+{
+  var link = cachedLink();
+  if (link) {
+    var parts = link.split('#');
+    root = parts[0];
+    if (parts.length>1) hash = '#'+parts[1];
+    else hash='';
+  }
+  if (root==NAVTREE[0][1]) {
+    $('#nav-sync').css('top','30px');
+  } else {
+    $('#nav-sync').css('top','5px');
+  }
+  if (hash.match(/^#l\d+$/)) {
+    var anchor=$('a[name='+hash.substring(1)+']');
+    glowEffect(anchor.parent(),1000); // line number
+    hash=''; // strip line number anchors
+    //root=root.replace(/_source\./,'.'); // source link to doc link
+  }
+  var url=root+hash;
+  var i=-1;
+  while (NAVTREEINDEX[i+1]<=url) i++;
+  if (navTreeSubIndices[i]) {
+    gotoNode(o,i,root,hash,relpath)
+  } else {
+    getScript(relpath+'navtreeindex'+i,function(){
+      navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
+      if (navTreeSubIndices[i]) {
+        gotoNode(o,i,root,hash,relpath);
+      }
+    },true);
+  }
+}
+
+function showSyncOff(n,relpath)
+{
+    n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
+}
+
+function showSyncOn(n,relpath)
+{
+    n.html('<img src="'+relpath+'sync_on.png"/ title="'+SYNCONMSG+'">');
+}
+
+function toggleSyncButton(relpath)
+{
+  var navSync = $('#nav-sync');
+  if (navSync.hasClass('sync')) {
+    navSync.removeClass('sync');
+    showSyncOff(navSync,relpath);
+    storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash'));
+  } else {
+    navSync.addClass('sync');
+    showSyncOn(navSync,relpath);
+    deleteLink();
+  }
+}
+
+function initNavTree(toroot,relpath)
+{
+  var o = new Object();
+  o.toroot = toroot;
+  o.node = new Object();
+  o.node.li = document.getElementById("nav-tree-contents");
+  o.node.childrenData = NAVTREE;
+  o.node.children = new Array();
+  o.node.childrenUL = document.createElement("ul");
+  o.node.getChildrenUL = function() { return o.node.childrenUL; };
+  o.node.li.appendChild(o.node.childrenUL);
+  o.node.depth = 0;
+  o.node.relpath = relpath;
+  o.node.expanded = false;
+  o.node.isLast = true;
+  o.node.plus_img = document.createElement("img");
+  o.node.plus_img.src = relpath+"ftv2pnode.png";
+  o.node.plus_img.width = 16;
+  o.node.plus_img.height = 22;
+
+  if (localStorageSupported()) {
+    var navSync = $('#nav-sync');
+    if (cachedLink()) {
+      showSyncOff(navSync,relpath);
+      navSync.removeClass('sync');
+    } else {
+      showSyncOn(navSync,relpath);
+    }
+    navSync.click(function(){ toggleSyncButton(relpath); });
+  }
+
+  navTo(o,toroot,window.location.hash,relpath);
+
+  $(window).bind('hashchange', function(){
+     if (window.location.hash && window.location.hash.length>1){
+       var a;
+       if ($(location).attr('hash')){
+         var clslink=stripPath($(location).attr('pathname'))+':'+
+                               $(location).attr('hash').substring(1);
+         a=$('.item a[class$="'+clslink+'"]');
+       }
+       if (a==null || !$(a).parent().parent().hasClass('selected')){
+         $('.item').removeClass('selected');
+         $('.item').removeAttr('id');
+       }
+       var link=stripPath2($(location).attr('pathname'));
+       navTo(o,link,$(location).attr('hash'),relpath);
+     }
+  })
+
+  $(window).load(showRoot);
+}
+
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtreeindex0.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtreeindex0.js
new file mode 100644
index 000000000..44a969be4
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/navtreeindex0.js
@@ -0,0 +1,95 @@
+var NAVTREEINDEX0 =
+{
+"_m_a_x30102_8cpp.html":[1,0,0,1,0],
+"_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f":[1,0,0,1,0,3],
+"_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b":[1,0,0,1,0,4],
+"_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df":[1,0,0,1,0,1],
+"_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968":[1,0,0,1,0,2],
+"_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6":[1,0,0,1,0,5],
+"_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976":[1,0,0,1,0,0],
+"_m_a_x30102_8cpp_source.html":[1,0,0,1,0],
+"_m_a_x30102_8h.html":[1,0,0,1,1],
+"_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd":[1,0,0,1,1,3],
+"_m_a_x30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10":[1,0,0,1,1,14],
+"_m_a_x30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f":[1,0,0,1,1,26],
+"_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37":[1,0,0,1,1,0],
+"_m_a_x30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23":[1,0,0,1,1,19],
+"_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1":[1,0,0,1,1,17],
+"_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0":[1,0,0,1,1,20],
+"_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f":[1,0,0,1,1,4],
+"_m_a_x30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab":[1,0,0,1,1,18],
+"_m_a_x30102_8h.html#a4113aeee76935425d8a557a79a4193df":[1,0,0,1,1,24],
+"_m_a_x30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163":[1,0,0,1,1,16],
+"_m_a_x30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968":[1,0,0,1,1,25],
+"_m_a_x30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6":[1,0,0,1,1,28],
+"_m_a_x30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d":[1,0,0,1,1,22],
+"_m_a_x30102_8h.html#a579a9e43d89bdda85d9ccb206339d681":[1,0,0,1,1,23],
+"_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b":[1,0,0,1,1,10],
+"_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a":[1,0,0,1,1,9],
+"_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6":[1,0,0,1,1,1],
+"_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191":[1,0,0,1,1,8],
+"_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21":[1,0,0,1,1,11],
+"_m_a_x30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd":[1,0,0,1,1,27],
+"_m_a_x30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c":[1,0,0,1,1,13],
+"_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1":[1,0,0,1,1,7],
+"_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115":[1,0,0,1,1,5],
+"_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f":[1,0,0,1,1,12],
+"_m_a_x30102_8h.html#ad16bc92e2f92e516ca396214861a6379":[1,0,0,1,1,21],
+"_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca":[1,0,0,1,1,2],
+"_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d":[1,0,0,1,1,6],
+"_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707":[1,0,0,1,1,15],
+"_m_a_x30102_8h_source.html":[1,0,0,1,1],
+"algorithm_8cpp.html":[1,0,0,0,0],
+"algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9":[1,0,0,0,0,0],
+"algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060":[1,0,0,0,0,5],
+"algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6":[1,0,0,0,0,1],
+"algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff":[1,0,0,0,0,4],
+"algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf":[1,0,0,0,0,2],
+"algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a":[1,0,0,0,0,3],
+"algorithm_8cpp_source.html":[1,0,0,0,0],
+"algorithm_8h.html":[1,0,0,0,1],
+"algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929":[1,0,0,0,1,17],
+"algorithm_8h.html#a2a4e5ddbe0e04c48b166f2ff176667a9":[1,0,0,0,1,8],
+"algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119":[1,0,0,0,1,2],
+"algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8":[1,0,0,0,1,3],
+"algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7":[1,0,0,0,1,7],
+"algorithm_8h.html#a44b6312f81810d4deb64071d12ab0060":[1,0,0,0,1,13],
+"algorithm_8h.html#a62050365673e666cd0d661a3664c26e6":[1,0,0,0,1,9],
+"algorithm_8h.html#a65e9886d74aaee76545e83dd09011727":[1,0,0,0,1,1],
+"algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7":[1,0,0,0,1,0],
+"algorithm_8h.html#a6cae46e51640b712afc2ebeefd2d51ff":[1,0,0,0,1,12],
+"algorithm_8h.html#a72c76142c07186ae6d7200ec3c9a4f76":[1,0,0,0,1,16],
+"algorithm_8h.html#a7d4e0b0915b58092f3b4bb2fbd252f3f":[1,0,0,0,1,15],
+"algorithm_8h.html#aa03906cc2e2d27ef4f3fa4db4312b524":[1,0,0,0,1,4],
+"algorithm_8h.html#aab95338e44281c269f0b9b0f529741bf":[1,0,0,0,1,10],
+"algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384":[1,0,0,0,1,6],
+"algorithm_8h.html#adc6be68be81530d67a25c1a9905bec3a":[1,0,0,0,1,11],
+"algorithm_8h.html#adfeeb6b08271807492803acc50347108":[1,0,0,0,1,18],
+"algorithm_8h.html#aea73b3b76ec2f4743e97452ee93c9cd2":[1,0,0,0,1,14],
+"algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae":[1,0,0,0,1,5],
+"algorithm_8h_source.html":[1,0,0,0,1],
+"dir_19b53f07f52837a342947cc20e6d978f.html":[1,0,0,0],
+"dir_70c5cd4c8bba287fe799894cc0903ca4.html":[1,0,0],
+"dir_d4a9a7556cca61907ce453116086a23a.html":[1,0,0,1],
+"files.html":[1,0],
+"globals.html":[1,1,0],
+"globals_defs.html":[1,1,3],
+"globals_func.html":[1,1,1],
+"globals_vars.html":[1,1,2],
+"index.html":[],
+"index.html":[0],
+"main_8cpp.html":[1,0,0,2],
+"main_8cpp.html#a07a24850120a56110cc2838d0afcafcf":[1,0,0,2,3],
+"main_8cpp.html#a2134a5a06f0865c945543a1f07eba387":[1,0,0,2,0],
+"main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024":[1,0,0,2,6],
+"main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f":[1,0,0,2,7],
+"main_8cpp.html#a43fb8ea97a26647405ca359095323280":[1,0,0,2,5],
+"main_8cpp.html#a786e6c57c793d9af51360154ef90eb93":[1,0,0,2,9],
+"main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753":[1,0,0,2,2],
+"main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723":[1,0,0,2,4],
+"main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6":[1,0,0,2,8],
+"main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2":[1,0,0,2,10],
+"main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4":[1,0,0,2,1],
+"main_8cpp_source.html":[1,0,0,2],
+"pages.html":[]
+};
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/open.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/open.png
new file mode 100644
index 0000000000000000000000000000000000000000..4455dd052b486c7eed671dd60c9c2d1d9a8ab540
GIT binary patch
literal 122
zcmeAS@N?(olHy`uVBq!ia0y~yVBiE{4mJh`h6fYb1Q-|?96eneLn;{G&OOM<pvc3b
zuIaVGM0<nD!Da6PI$9R&tL4inQ@3T<({|;aU4wK~kXVCoayU1G;OpgEg#YeUu|Lu-
ZAF-D!^ZBm31q=)f44$rjF6*2UngDD)C6fRE

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/resize.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/resize.js
new file mode 100644
index 000000000..9fe82ba9e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/resize.js
@@ -0,0 +1,93 @@
+var cookie_namespace = 'doxygen'; 
+var sidenav,navtree,content,header;
+
+function readCookie(cookie) 
+{
+  var myCookie = cookie_namespace+"_"+cookie+"=";
+  if (document.cookie) 
+  {
+    var index = document.cookie.indexOf(myCookie);
+    if (index != -1) 
+    {
+      var valStart = index + myCookie.length;
+      var valEnd = document.cookie.indexOf(";", valStart);
+      if (valEnd == -1) 
+      {
+        valEnd = document.cookie.length;
+      }
+      var val = document.cookie.substring(valStart, valEnd);
+      return val;
+    }
+  }
+  return 0;
+}
+
+function writeCookie(cookie, val, expiration) 
+{
+  if (val==undefined) return;
+  if (expiration == null) 
+  {
+    var date = new Date();
+    date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+    expiration = date.toGMTString();
+  }
+  document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
+}
+ 
+function resizeWidth() 
+{
+  var windowWidth = $(window).width() + "px";
+  var sidenavWidth = $(sidenav).width();
+  content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar
+  writeCookie('width',sidenavWidth, null);
+}
+
+function restoreWidth(navWidth)
+{
+  var windowWidth = $(window).width() + "px";
+  content.css({marginLeft:parseInt(navWidth)+6+"px"});
+  sidenav.css({width:navWidth + "px"});
+}
+
+function resizeHeight() 
+{
+  var headerHeight = header.height();
+  var footerHeight = footer.height();
+  var windowHeight = $(window).height() - headerHeight - footerHeight;
+  content.css({height:windowHeight + "px"});
+  navtree.css({height:windowHeight + "px"});
+  sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
+}
+
+function initResizable()
+{
+  header  = $("#top");
+  sidenav = $("#side-nav");
+  content = $("#doc-content");
+  navtree = $("#nav-tree");
+  footer  = $("#nav-path");
+  $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+  $(window).resize(function() { resizeHeight(); });
+  var width = readCookie('width');
+  if (width) { restoreWidth(width); } else { resizeWidth(); }
+  resizeHeight();
+  var url = location.href;
+  var i=url.indexOf("#");
+  if (i>=0) window.location.hash=url.substr(i);
+  var _preventDefault = function(evt) { evt.preventDefault(); };
+  $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+  $(document).bind('touchmove',function(e){
+    try {
+      var target = e.target;
+      while (target) {
+        if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
+        target = target.parentNode;
+      }
+      e.preventDefault();
+    } catch(err) {
+      e.preventDefault();
+    }
+  });
+}
+
+
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_5f.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_5f.html
new file mode 100644
index 000000000..1f27755ab
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_5f.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_5f.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_5f.js
new file mode 100644
index 000000000..f3cfc5f66
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_5f.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['_5f_5fattribute_5f_5f',['__attribute__',['../_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9',1,'SoftI2CMaster.h']]],
+  ['_5f_5ftmp_5freg_5f_5f',['__tmp_reg__',['../_soft_i2_c_master_8h.html#a0e6fc492b674d6ccceccb06e3bbf907b',1,'SoftI2CMaster.h']]],
+  ['_5fsofti2c_5fh',['_SOFTI2C_H',['../_soft_i2_c_master_8h.html#a3bf497cc1d59d184775241e80a21085e',1,'SoftI2CMaster.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_61.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_61.html
new file mode 100644
index 000000000..a3164d553
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_61.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_61.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_61.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_61.js
new file mode 100644
index 000000000..a33f36406
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_61.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['algorithm_2ecpp',['algorithm.cpp',['../algorithm_8cpp.html',1,'']]],
+  ['algorithm_2eh',['algorithm.h',['../algorithm_8h.html',1,'']]],
+  ['aun_5fir_5fbuffer',['aun_ir_buffer',['../main_8cpp.html#a07a24850120a56110cc2838d0afcafcf',1,'main.cpp']]],
+  ['aun_5fred_5fbuffer',['aun_red_buffer',['../main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723',1,'main.cpp']]],
+  ['auw_5fhamm',['auw_hamm',['../algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_62.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_62.html
new file mode 100644
index 000000000..ee8871cb3
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_62.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_62.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_62.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_62.js
new file mode 100644
index 000000000..f2bb9345a
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_62.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['buffer_5fsize',['BUFFER_SIZE',['../algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_63.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_63.html
new file mode 100644
index 000000000..56b5ad1e9
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_63.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_63.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_63.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_63.js
new file mode 100644
index 000000000..4e7566ffc
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_63.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['ch_5fhr_5fvalid',['ch_hr_valid',['../main_8cpp.html#a43fb8ea97a26647405ca359095323280',1,'main.cpp']]],
+  ['ch_5fspo2_5fvalid',['ch_spo2_valid',['../main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024',1,'main.cpp']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_66.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_66.html
new file mode 100644
index 000000000..3d1f8b35e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_66.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_66.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_66.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_66.js
new file mode 100644
index 000000000..59ef048f5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_66.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['false',['false',['../algorithm_8h.html#a65e9886d74aaee76545e83dd09011727',1,'algorithm.h']]],
+  ['fs',['FS',['../algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_67.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_67.html
new file mode 100644
index 000000000..41a459ae7
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_67.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_67.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_67.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_67.js
new file mode 100644
index 000000000..efaa118b4
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_67.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['getbrightness',['getBrightness',['../class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f',1,'Adafruit_NeoPixel']]],
+  ['getpixelcolor',['getPixelColor',['../class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa',1,'Adafruit_NeoPixel']]],
+  ['getpixels',['getPixels',['../class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067',1,'Adafruit_NeoPixel']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_68.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_68.html
new file mode 100644
index 000000000..6df909782
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_68.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_68.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_68.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_68.js
new file mode 100644
index 000000000..75625372d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_68.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['hamming_5fsize',['HAMMING_SIZE',['../algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8',1,'algorithm.h']]],
+  ['hr_5ffifo_5fsize',['HR_FIFO_SIZE',['../algorithm_8h.html#aa03906cc2e2d27ef4f3fa4db4312b524',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_69.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_69.html
new file mode 100644
index 000000000..1a00b554d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_69.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_69.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_69.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_69.js
new file mode 100644
index 000000000..1d3b12d60
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_69.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['i2c',['i2c',['../_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976',1,'MAX30102.cpp']]],
+  ['i2c_5fread_5faddr',['I2C_READ_ADDR',['../_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37',1,'MAX30102.h']]],
+  ['i2c_5fwrite_5faddr',['I2C_WRITE_ADDR',['../_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6',1,'MAX30102.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6c.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6c.html
new file mode 100644
index 000000000..f6383cc22
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6c.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6c.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6c.js
new file mode 100644
index 000000000..7f8b68c5d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['loop',['loop',['../_r_d117___a_r_d_u_i_n_o_8ino.html#afe461d27b9c48d5921c00d521181f12f',1,'RD117_ARDUINO.ino']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6d.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6d.html
new file mode 100644
index 000000000..2e27d4d64
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6d.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6d.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6d.js
new file mode 100644
index 000000000..e9b1cb8aa
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6d.js
@@ -0,0 +1,22 @@
+var searchData=
+[
+  ['main_20page',['Main Page',['../index.html',1,'']]],
+  ['ma4_5fsize',['MA4_SIZE',['../algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae',1,'algorithm.h']]],
+  ['main',['main',['../main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main.cpp']]],
+  ['main_2ecpp',['main.cpp',['../main_8cpp.html',1,'']]],
+  ['max30102_2ecpp',['MAX30102.cpp',['../_m_a_x30102_8cpp.html',1,'']]],
+  ['max30102_2eh',['MAX30102.h',['../_m_a_x30102_8h.html',1,'']]],
+  ['max_5fbrightness',['MAX_BRIGHTNESS',['../main_8cpp.html#a2134a5a06f0865c945543a1f07eba387',1,'main.cpp']]],
+  ['maxim_5ffind_5fpeaks',['maxim_find_peaks',['../algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9',1,'maxim_find_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num):&#160;algorithm.cpp'],['../algorithm_8h.html#a2a4e5ddbe0e04c48b166f2ff176667a9',1,'maxim_find_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num):&#160;algorithm.cpp']]],
+  ['maxim_5fheart_5frate_5fand_5foxygen_5fsaturation',['maxim_heart_rate_and_oxygen_saturation',['../algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6',1,'maxim_heart_rate_and_oxygen_saturation(uint32_t *pun_ir_buffer, int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid, int32_t *pn_heart_rate, int8_t *pch_hr_valid):&#160;algorithm.cpp'],['../algorithm_8h.html#a62050365673e666cd0d661a3664c26e6',1,'maxim_heart_rate_and_oxygen_saturation(uint32_t *pun_ir_buffer, int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid, int32_t *pn_heart_rate, int8_t *pch_hr_valid):&#160;algorithm.cpp']]],
+  ['maxim_5fmax30102_5finit',['maxim_max30102_init',['../_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df',1,'maxim_max30102_init():&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a4113aeee76935425d8a557a79a4193df',1,'maxim_max30102_init():&#160;MAX30102.cpp']]],
+  ['maxim_5fmax30102_5fread_5ffifo',['maxim_max30102_read_fifo',['../_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968',1,'maxim_max30102_read_fifo(uint32_t *pun_red_led, uint32_t *pun_ir_led):&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968',1,'maxim_max30102_read_fifo(uint32_t *pun_red_led, uint32_t *pun_ir_led):&#160;MAX30102.cpp']]],
+  ['maxim_5fmax30102_5fread_5freg',['maxim_max30102_read_reg',['../_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f',1,'maxim_max30102_read_reg(uint8_t uch_addr, uint8_t *puch_data):&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f',1,'maxim_max30102_read_reg(uint8_t uch_addr, uint8_t *puch_data):&#160;MAX30102.cpp']]],
+  ['maxim_5fmax30102_5freset',['maxim_max30102_reset',['../_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b',1,'maxim_max30102_reset():&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd',1,'maxim_max30102_reset(void):&#160;MAX30102.cpp']]],
+  ['maxim_5fmax30102_5fwrite_5freg',['maxim_max30102_write_reg',['../_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6',1,'maxim_max30102_write_reg(uint8_t uch_addr, uint8_t uch_data):&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6',1,'maxim_max30102_write_reg(uint8_t uch_addr, uint8_t uch_data):&#160;MAX30102.cpp']]],
+  ['maxim_5fpeaks_5fabove_5fmin_5fheight',['maxim_peaks_above_min_height',['../algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf',1,'maxim_peaks_above_min_height(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height):&#160;algorithm.cpp'],['../algorithm_8h.html#aab95338e44281c269f0b9b0f529741bf',1,'maxim_peaks_above_min_height(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height):&#160;algorithm.cpp']]],
+  ['maxim_5fremove_5fclose_5fpeaks',['maxim_remove_close_peaks',['../algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a',1,'maxim_remove_close_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_min_distance):&#160;algorithm.cpp'],['../algorithm_8h.html#adc6be68be81530d67a25c1a9905bec3a',1,'maxim_remove_close_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_min_distance):&#160;algorithm.cpp']]],
+  ['maxim_5fsort_5fascend',['maxim_sort_ascend',['../algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff',1,'maxim_sort_ascend(int32_t *pn_x, int32_t n_size):&#160;algorithm.cpp'],['../algorithm_8h.html#a6cae46e51640b712afc2ebeefd2d51ff',1,'maxim_sort_ascend(int32_t *pn_x, int32_t n_size):&#160;algorithm.cpp']]],
+  ['maxim_5fsort_5findices_5fdescend',['maxim_sort_indices_descend',['../algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060',1,'maxim_sort_indices_descend(int32_t *pn_x, int32_t *pn_indx, int32_t n_size):&#160;algorithm.cpp'],['../algorithm_8h.html#a44b6312f81810d4deb64071d12ab0060',1,'maxim_sort_indices_descend(int32_t *pn_x, int32_t *pn_indx, int32_t n_size):&#160;algorithm.cpp']]],
+  ['min',['min',['../algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6e.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6e.html
new file mode 100644
index 000000000..1f92ee5b6
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6e.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6e.js
new file mode 100644
index 000000000..31433021e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_6e.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['n_5fheart_5frate',['n_heart_rate',['../main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f',1,'main.cpp']]],
+  ['n_5fir_5fbuffer_5flength',['n_ir_buffer_length',['../main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6',1,'main.cpp']]],
+  ['n_5fsp02',['n_sp02',['../main_8cpp.html#a786e6c57c793d9af51360154ef90eb93',1,'main.cpp']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_70.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_70.html
new file mode 100644
index 000000000..0340151b6
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_70.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_70.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_70.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_70.js
new file mode 100644
index 000000000..95bca2eec
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_70.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['pc',['pc',['../main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753',1,'main.cpp']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_72.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_72.html
new file mode 100644
index 000000000..0ab18d65f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_72.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_72.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_72.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_72.js
new file mode 100644
index 000000000..e29e58959
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_72.js
@@ -0,0 +1,25 @@
+var searchData=
+[
+  ['reg_5ffifo_5fconfig',['REG_FIFO_CONFIG',['../_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca',1,'MAX30102.h']]],
+  ['reg_5ffifo_5fdata',['REG_FIFO_DATA',['../_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd',1,'MAX30102.h']]],
+  ['reg_5ffifo_5frd_5fptr',['REG_FIFO_RD_PTR',['../_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f',1,'MAX30102.h']]],
+  ['reg_5ffifo_5fwr_5fptr',['REG_FIFO_WR_PTR',['../_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115',1,'MAX30102.h']]],
+  ['reg_5fintr_5fenable_5f1',['REG_INTR_ENABLE_1',['../_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d',1,'MAX30102.h']]],
+  ['reg_5fintr_5fenable_5f2',['REG_INTR_ENABLE_2',['../_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1',1,'MAX30102.h']]],
+  ['reg_5fintr_5fstatus_5f1',['REG_INTR_STATUS_1',['../_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191',1,'MAX30102.h']]],
+  ['reg_5fintr_5fstatus_5f2',['REG_INTR_STATUS_2',['../_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a',1,'MAX30102.h']]],
+  ['reg_5fled1_5fpa',['REG_LED1_PA',['../_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b',1,'MAX30102.h']]],
+  ['reg_5fled2_5fpa',['REG_LED2_PA',['../_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21',1,'MAX30102.h']]],
+  ['reg_5fmode_5fconfig',['REG_MODE_CONFIG',['../_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f',1,'MAX30102.h']]],
+  ['reg_5fmulti_5fled_5fctrl1',['REG_MULTI_LED_CTRL1',['../_m_a_x30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c',1,'MAX30102.h']]],
+  ['reg_5fmulti_5fled_5fctrl2',['REG_MULTI_LED_CTRL2',['../_m_a_x30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10',1,'MAX30102.h']]],
+  ['reg_5fovf_5fcounter',['REG_OVF_COUNTER',['../_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707',1,'MAX30102.h']]],
+  ['reg_5fpart_5fid',['REG_PART_ID',['../_m_a_x30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163',1,'MAX30102.h']]],
+  ['reg_5fpilot_5fpa',['REG_PILOT_PA',['../_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1',1,'MAX30102.h']]],
+  ['reg_5fprox_5fint_5fthresh',['REG_PROX_INT_THRESH',['../_m_a_x30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab',1,'MAX30102.h']]],
+  ['reg_5frev_5fid',['REG_REV_ID',['../_m_a_x30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23',1,'MAX30102.h']]],
+  ['reg_5fspo2_5fconfig',['REG_SPO2_CONFIG',['../_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0',1,'MAX30102.h']]],
+  ['reg_5ftemp_5fconfig',['REG_TEMP_CONFIG',['../_m_a_x30102_8h.html#ad16bc92e2f92e516ca396214861a6379',1,'MAX30102.h']]],
+  ['reg_5ftemp_5ffrac',['REG_TEMP_FRAC',['../_m_a_x30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d',1,'MAX30102.h']]],
+  ['reg_5ftemp_5fintr',['REG_TEMP_INTR',['../_m_a_x30102_8h.html#a579a9e43d89bdda85d9ccb206339d681',1,'MAX30102.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_73.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_73.html
new file mode 100644
index 000000000..1ec8f174d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_73.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_73.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_73.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_73.js
new file mode 100644
index 000000000..56bb31333
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_73.js
@@ -0,0 +1,16 @@
+var searchData=
+[
+  ['scl_5fddr',['SCL_DDR',['../_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b',1,'SoftI2CMaster.h']]],
+  ['scl_5fin',['SCL_IN',['../_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49',1,'SoftI2CMaster.h']]],
+  ['scl_5fout',['SCL_OUT',['../_soft_i2_c_master_8h.html#a07204a69a1872edbb272cde4d0c1e23f',1,'SoftI2CMaster.h']]],
+  ['sda_5fddr',['SDA_DDR',['../_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653',1,'SoftI2CMaster.h']]],
+  ['sda_5fin',['SDA_IN',['../_soft_i2_c_master_8h.html#ac4b553fc156d15aeeeaaf6cfe7695c83',1,'SoftI2CMaster.h']]],
+  ['sda_5fout',['SDA_OUT',['../_soft_i2_c_master_8h.html#ae154abbe60d159b6f4951ade68cc5fae',1,'SoftI2CMaster.h']]],
+  ['setbrightness',['setBrightness',['../class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53',1,'Adafruit_NeoPixel']]],
+  ['setpin',['setPin',['../class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b',1,'Adafruit_NeoPixel']]],
+  ['setpixelcolor',['setPixelColor',['../class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1',1,'Adafruit_NeoPixel::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b)'],['../class_adafruit___neo_pixel.html#a35eda2252e3ed976a11d35cb8f4b2e41',1,'Adafruit_NeoPixel::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w)'],['../class_adafruit___neo_pixel.html#abbf243cce591dc37be507cf173485bc8',1,'Adafruit_NeoPixel::setPixelColor(uint16_t n, uint32_t c)']]],
+  ['setup',['setup',['../_r_d117___a_r_d_u_i_n_o_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'RD117_ARDUINO.ino']]],
+  ['show',['show',['../class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7',1,'Adafruit_NeoPixel']]],
+  ['softi2cmaster_2eh',['SoftI2CMaster.h',['../_soft_i2_c_master_8h.html',1,'']]],
+  ['softi2dmaster_5fh_5f',['SOFTI2DMASTER_H_',['../_soft_i2_c_master_8h.html#ae00bf2b1fa56ce97ea467dc60682022c',1,'SoftI2CMaster.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_74.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_74.html
new file mode 100644
index 000000000..fdc6589d0
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_74.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_74.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_74.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_74.js
new file mode 100644
index 000000000..549c70c68
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_74.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['true',['true',['../algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_75.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_75.html
new file mode 100644
index 000000000..ab8455ed5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_75.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_75.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_75.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_75.js
new file mode 100644
index 000000000..48a3fb1a5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_75.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['uch_5fdummy',['uch_dummy',['../main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2',1,'main.cpp']]],
+  ['uch_5fspo2_5ftable',['uch_spo2_table',['../algorithm_8h.html#adfeeb6b08271807492803acc50347108',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_7e.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_7e.html
new file mode 100644
index 000000000..63512c6f9
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_7e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_7e.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_7e.js
new file mode 100644
index 000000000..5d71164d2
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/all_7e.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['_7eadafruit_5fneopixel',['~Adafruit_NeoPixel',['../class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db',1,'Adafruit_NeoPixel']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/classes_61.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/classes_61.html
new file mode 100644
index 000000000..85e5d72a3
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/classes_61.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_61.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/classes_61.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/classes_61.js
new file mode 100644
index 000000000..433c37049
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/classes_61.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['adafruit_5fneopixel',['Adafruit_NeoPixel',['../class_adafruit___neo_pixel.html',1,'']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/close.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/close.png
new file mode 100644
index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9
GIT binary patch
literal 273
zcmeAS@N?(olHy`uVBq!ia0y~yVBiK}4mJh`hLvl|)fgBUZg{#lhDb=32JRJdbKton
zA<88pBIW$rbWi<q=X5q>jSKh6tCh9xi%p+@`?Q+n!RFfgXE*8G*v9+3QmISnNMVo7
z`H9O`PI%UrIqQr?-;Q<O_xG9cI8RCKT%>Wty6>_6MEw<qoWd?ve74!mqJL|fYiMZ6
z+*BQ<9q*-I?>dy;?;}uqfAPBP=a-GbCOi*zGvsM5p1Q(t@|@$3uW)T!;1YH0m_+$m
z$Gs|^Q+^9Y21Z{Jd;3e_PX6`M`PrAX90e9+N`*&ixX;u#IA8tS@w}AI>(}g>b5kXA
dR_DdqvvXBW;1hH`#K6G7;OXk;vd$@?2>^;gZ`%L>

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_5f.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_5f.html
new file mode 100644
index 000000000..548a82497
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_5f.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_5f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_5f.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_5f.js
new file mode 100644
index 000000000..0a63cad63
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_5f.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['_5f_5ftmp_5freg_5f_5f',['__tmp_reg__',['../_soft_i2_c_master_8h.html#a0e6fc492b674d6ccceccb06e3bbf907b',1,'SoftI2CMaster.h']]],
+  ['_5fsofti2c_5fh',['_SOFTI2C_H',['../_soft_i2_c_master_8h.html#a3bf497cc1d59d184775241e80a21085e',1,'SoftI2CMaster.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_62.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_62.html
new file mode 100644
index 000000000..48009dac4
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_62.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_62.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_62.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_62.js
new file mode 100644
index 000000000..f2bb9345a
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_62.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['buffer_5fsize',['BUFFER_SIZE',['../algorithm_8h.html#a6b20d41d6252e9871430c242cb1a56e7',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_66.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_66.html
new file mode 100644
index 000000000..4ddd13f0e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_66.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_66.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_66.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_66.js
new file mode 100644
index 000000000..59ef048f5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_66.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['false',['false',['../algorithm_8h.html#a65e9886d74aaee76545e83dd09011727',1,'algorithm.h']]],
+  ['fs',['FS',['../algorithm_8h.html#a30588c5eca7c9cb6ebba02a0236f0119',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_68.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_68.html
new file mode 100644
index 000000000..43d93b87b
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_68.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_68.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_68.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_68.js
new file mode 100644
index 000000000..75625372d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_68.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['hamming_5fsize',['HAMMING_SIZE',['../algorithm_8h.html#a35be9e52c9110f5d91a4064e2f7b73c8',1,'algorithm.h']]],
+  ['hr_5ffifo_5fsize',['HR_FIFO_SIZE',['../algorithm_8h.html#aa03906cc2e2d27ef4f3fa4db4312b524',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_69.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_69.html
new file mode 100644
index 000000000..ebf00b8a0
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_69.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_69.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_69.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_69.js
new file mode 100644
index 000000000..9d3ea8d2b
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_69.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['i2c_5fread_5faddr',['I2C_READ_ADDR',['../_m_a_x30102_8h.html#a11a0148c64950f3315f38d957cd43d37',1,'MAX30102.h']]],
+  ['i2c_5fwrite_5faddr',['I2C_WRITE_ADDR',['../_m_a_x30102_8h.html#a7978167075eb8954c1090fc7ce9647c6',1,'MAX30102.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6d.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6d.html
new file mode 100644
index 000000000..d2827022a
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6d.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_6d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6d.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6d.js
new file mode 100644
index 000000000..3fb637229
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6d.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['ma4_5fsize',['MA4_SIZE',['../algorithm_8h.html#af8c3cbac49a22022b17cc7b34d42cbae',1,'algorithm.h']]],
+  ['max_5fbrightness',['MAX_BRIGHTNESS',['../main_8cpp.html#a2134a5a06f0865c945543a1f07eba387',1,'main.cpp']]],
+  ['min',['min',['../algorithm_8h.html#abb702d8b501669a23aa0ab3b281b9384',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6e.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6e.html
new file mode 100644
index 000000000..5b7f68f32
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_6e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6e.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6e.js
new file mode 100644
index 000000000..a9f96cdac
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_6e.js
@@ -0,0 +1,35 @@
+var searchData=
+[
+  ['neo_5fbgr',['NEO_BGR',['../_adafruit___neo_pixel_8h.html#a9129664a08911b56227dd641116f105f',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fbgrw',['NEO_BGRW',['../_adafruit___neo_pixel_8h.html#a5b49f89982b6e60d20f7aaab79030d54',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fbgwr',['NEO_BGWR',['../_adafruit___neo_pixel_8h.html#a143de1c7084e1f833beecbdae00b321c',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fbrg',['NEO_BRG',['../_adafruit___neo_pixel_8h.html#afde6ec00a4ec8fad0267ae1a6689379e',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fbrgw',['NEO_BRGW',['../_adafruit___neo_pixel_8h.html#aad617c46d4a64cd4ec8d0ed1a0f30073',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fbrwg',['NEO_BRWG',['../_adafruit___neo_pixel_8h.html#a4b4571bfc0a3ebfb4720ce4e5fbe9acf',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fbwgr',['NEO_BWGR',['../_adafruit___neo_pixel_8h.html#a2595b8689ce5bd39634d017620ae57b8',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fbwrg',['NEO_BWRG',['../_adafruit___neo_pixel_8h.html#aaf438f131d0fa8a0be6791a553145860',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fgbr',['NEO_GBR',['../_adafruit___neo_pixel_8h.html#abca04ce54125372080f2fbf2afdcf027',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fgbrw',['NEO_GBRW',['../_adafruit___neo_pixel_8h.html#af60d024b8f8954960e59056c57520080',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fgbwr',['NEO_GBWR',['../_adafruit___neo_pixel_8h.html#a20be9abdf372b9c71d9fdacc3e6a9d1a',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fgrb',['NEO_GRB',['../_adafruit___neo_pixel_8h.html#a95d0d6b0a1f52bc72d9dcea2b3a48e3f',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fgrbw',['NEO_GRBW',['../_adafruit___neo_pixel_8h.html#a722066abc60b560235b3b22082c2e68e',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fgrwb',['NEO_GRWB',['../_adafruit___neo_pixel_8h.html#a35a185ff488486a74745e9094892558c',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fgwbr',['NEO_GWBR',['../_adafruit___neo_pixel_8h.html#aaaaa406f36f1c596526579944ca7043d',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fgwrb',['NEO_GWRB',['../_adafruit___neo_pixel_8h.html#aa29b3544b4257e851de2e214894d1236',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fkhz400',['NEO_KHZ400',['../_adafruit___neo_pixel_8h.html#a9c4067fd0cceb0432d1758fc07ede469',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fkhz800',['NEO_KHZ800',['../_adafruit___neo_pixel_8h.html#a475fef7028a743310aa4311a97899d5d',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5frbg',['NEO_RBG',['../_adafruit___neo_pixel_8h.html#a7d6aaa56c8e2603312cba8dbdf9c5661',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5frbgw',['NEO_RBGW',['../_adafruit___neo_pixel_8h.html#a198dc192119c166c544efc3e89fdd1cd',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5frbwg',['NEO_RBWG',['../_adafruit___neo_pixel_8h.html#a7b6b551a990b498bed36aadba4a498d5',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5frgb',['NEO_RGB',['../_adafruit___neo_pixel_8h.html#aa4f80df5ab240d93359f40956462f758',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5frgbw',['NEO_RGBW',['../_adafruit___neo_pixel_8h.html#a71f7c6e45f4c63fceca6b5b73c7a7c9d',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5frgwb',['NEO_RGWB',['../_adafruit___neo_pixel_8h.html#abcce73b2eafdf1bb331a8f02fba95d10',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5frwbg',['NEO_RWBG',['../_adafruit___neo_pixel_8h.html#a9254ebc9367c071457d0321f64c9d5fa',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5frwgb',['NEO_RWGB',['../_adafruit___neo_pixel_8h.html#a122c6bb3e44525d2f975dcd89b094267',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fwbgr',['NEO_WBGR',['../_adafruit___neo_pixel_8h.html#a015eeccbf1bd19907c34d7b39b63bb84',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fwbrg',['NEO_WBRG',['../_adafruit___neo_pixel_8h.html#a3eed3aeba511a2478a1ee8c17516732b',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fwgbr',['NEO_WGBR',['../_adafruit___neo_pixel_8h.html#af722c80d41894df25c363b9ebf371b4e',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fwgrb',['NEO_WGRB',['../_adafruit___neo_pixel_8h.html#a59561d96a0f8a526ee3448e7b104d8b3',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fwrbg',['NEO_WRBG',['../_adafruit___neo_pixel_8h.html#a266a08af576ed4331db48b16bf572d29',1,'Adafruit_NeoPixel.h']]],
+  ['neo_5fwrgb',['NEO_WRGB',['../_adafruit___neo_pixel_8h.html#a4ee056fd3d7b09538908b35643a2508a',1,'Adafruit_NeoPixel.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_72.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_72.html
new file mode 100644
index 000000000..e6a82c4d5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_72.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_72.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_72.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_72.js
new file mode 100644
index 000000000..e29e58959
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_72.js
@@ -0,0 +1,25 @@
+var searchData=
+[
+  ['reg_5ffifo_5fconfig',['REG_FIFO_CONFIG',['../_m_a_x30102_8h.html#ad1b1bbfe23c9461e0ae75b71b9f805ca',1,'MAX30102.h']]],
+  ['reg_5ffifo_5fdata',['REG_FIFO_DATA',['../_m_a_x30102_8h.html#a05bf6ede83fa400eac4dd65788d996fd',1,'MAX30102.h']]],
+  ['reg_5ffifo_5frd_5fptr',['REG_FIFO_RD_PTR',['../_m_a_x30102_8h.html#a3b9d75d4ac3cb579e8b46dea27f4303f',1,'MAX30102.h']]],
+  ['reg_5ffifo_5fwr_5fptr',['REG_FIFO_WR_PTR',['../_m_a_x30102_8h.html#aba8c69cb46224fb35783f5b60e75b115',1,'MAX30102.h']]],
+  ['reg_5fintr_5fenable_5f1',['REG_INTR_ENABLE_1',['../_m_a_x30102_8h.html#ae07f3c26106a0a37b6eddd8d2653137d',1,'MAX30102.h']]],
+  ['reg_5fintr_5fenable_5f2',['REG_INTR_ENABLE_2',['../_m_a_x30102_8h.html#ab8d58d945ad576d492f669c7b9affbf1',1,'MAX30102.h']]],
+  ['reg_5fintr_5fstatus_5f1',['REG_INTR_STATUS_1',['../_m_a_x30102_8h.html#a7d161a2394a67a2176d549edb94f4191',1,'MAX30102.h']]],
+  ['reg_5fintr_5fstatus_5f2',['REG_INTR_STATUS_2',['../_m_a_x30102_8h.html#a61d809a1e313a2787b23e96de9554c4a',1,'MAX30102.h']]],
+  ['reg_5fled1_5fpa',['REG_LED1_PA',['../_m_a_x30102_8h.html#a5f3a6641b201203d41ed3d23b638a96b',1,'MAX30102.h']]],
+  ['reg_5fled2_5fpa',['REG_LED2_PA',['../_m_a_x30102_8h.html#a7df43b0f854c9caf2fe04ccdebb18d21',1,'MAX30102.h']]],
+  ['reg_5fmode_5fconfig',['REG_MODE_CONFIG',['../_m_a_x30102_8h.html#accdea52b28f1bd3f4cd63d05ab12887f',1,'MAX30102.h']]],
+  ['reg_5fmulti_5fled_5fctrl1',['REG_MULTI_LED_CTRL1',['../_m_a_x30102_8h.html#a9d333cff4d002cb1d09a319e6917bc5c',1,'MAX30102.h']]],
+  ['reg_5fmulti_5fled_5fctrl2',['REG_MULTI_LED_CTRL2',['../_m_a_x30102_8h.html#a05ed274928d49bb6ddd6def6e45fac10',1,'MAX30102.h']]],
+  ['reg_5fovf_5fcounter',['REG_OVF_COUNTER',['../_m_a_x30102_8h.html#af9c8026aa9a22fad4c22ee6b10613707',1,'MAX30102.h']]],
+  ['reg_5fpart_5fid',['REG_PART_ID',['../_m_a_x30102_8h.html#a46083d1b6d3e1d5f89b0f1598dc6d163',1,'MAX30102.h']]],
+  ['reg_5fpilot_5fpa',['REG_PILOT_PA',['../_m_a_x30102_8h.html#a371750304ec49457d3d38f60428f8ff1',1,'MAX30102.h']]],
+  ['reg_5fprox_5fint_5fthresh',['REG_PROX_INT_THRESH',['../_m_a_x30102_8h.html#a3d80b09e301a0155949b7c337ce5f5ab',1,'MAX30102.h']]],
+  ['reg_5frev_5fid',['REG_REV_ID',['../_m_a_x30102_8h.html#a16f4b970762f7e8aa1f5c7a780a48c23',1,'MAX30102.h']]],
+  ['reg_5fspo2_5fconfig',['REG_SPO2_CONFIG',['../_m_a_x30102_8h.html#a38546015e987a72b8c9eb13228237dd0',1,'MAX30102.h']]],
+  ['reg_5ftemp_5fconfig',['REG_TEMP_CONFIG',['../_m_a_x30102_8h.html#ad16bc92e2f92e516ca396214861a6379',1,'MAX30102.h']]],
+  ['reg_5ftemp_5ffrac',['REG_TEMP_FRAC',['../_m_a_x30102_8h.html#a5321d8a33f1225ab437032e0e8ecbb3d',1,'MAX30102.h']]],
+  ['reg_5ftemp_5fintr',['REG_TEMP_INTR',['../_m_a_x30102_8h.html#a579a9e43d89bdda85d9ccb206339d681',1,'MAX30102.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_73.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_73.html
new file mode 100644
index 000000000..913ae48c4
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_73.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_73.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_73.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_73.js
new file mode 100644
index 000000000..90ebde0f7
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_73.js
@@ -0,0 +1,10 @@
+var searchData=
+[
+  ['scl_5fddr',['SCL_DDR',['../_soft_i2_c_master_8h.html#a5020a160f5b8f0a1697cfadbe778424b',1,'SoftI2CMaster.h']]],
+  ['scl_5fin',['SCL_IN',['../_soft_i2_c_master_8h.html#a10c618a025b8bdb8ea596fdc24197f49',1,'SoftI2CMaster.h']]],
+  ['scl_5fout',['SCL_OUT',['../_soft_i2_c_master_8h.html#a07204a69a1872edbb272cde4d0c1e23f',1,'SoftI2CMaster.h']]],
+  ['sda_5fddr',['SDA_DDR',['../_soft_i2_c_master_8h.html#a16bb6708250d17ee2118d29e4865a653',1,'SoftI2CMaster.h']]],
+  ['sda_5fin',['SDA_IN',['../_soft_i2_c_master_8h.html#ac4b553fc156d15aeeeaaf6cfe7695c83',1,'SoftI2CMaster.h']]],
+  ['sda_5fout',['SDA_OUT',['../_soft_i2_c_master_8h.html#ae154abbe60d159b6f4951ade68cc5fae',1,'SoftI2CMaster.h']]],
+  ['softi2dmaster_5fh_5f',['SOFTI2DMASTER_H_',['../_soft_i2_c_master_8h.html#ae00bf2b1fa56ce97ea467dc60682022c',1,'SoftI2CMaster.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_74.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_74.html
new file mode 100644
index 000000000..7c78f103f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_74.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_74.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_74.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_74.js
new file mode 100644
index 000000000..549c70c68
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/defines_74.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['true',['true',['../algorithm_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_61.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_61.html
new file mode 100644
index 000000000..5a8e45499
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_61.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_61.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_61.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_61.js
new file mode 100644
index 000000000..17135d4f1
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_61.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['algorithm_2ecpp',['algorithm.cpp',['../algorithm_8cpp.html',1,'']]],
+  ['algorithm_2eh',['algorithm.h',['../algorithm_8h.html',1,'']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_6d.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_6d.html
new file mode 100644
index 000000000..d9d93006b
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_6d.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_6d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_6d.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_6d.js
new file mode 100644
index 000000000..913a4161e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_6d.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['main_2ecpp',['main.cpp',['../main_8cpp.html',1,'']]],
+  ['max30102_2ecpp',['MAX30102.cpp',['../_m_a_x30102_8cpp.html',1,'']]],
+  ['max30102_2eh',['MAX30102.h',['../_m_a_x30102_8h.html',1,'']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_72.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_72.html
new file mode 100644
index 000000000..609fb48fc
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_72.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_72.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_72.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_72.js
new file mode 100644
index 000000000..6f99fa1e7
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_72.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['rd117_5farduino_2eino',['RD117_ARDUINO.ino',['../_r_d117___a_r_d_u_i_n_o_8ino.html',1,'']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_73.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_73.html
new file mode 100644
index 000000000..e0de9e6b5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_73.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_73.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_73.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_73.js
new file mode 100644
index 000000000..50164c8f9
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/files_73.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['softi2cmaster_2eh',['SoftI2CMaster.h',['../_soft_i2_c_master_8h.html',1,'']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_5f.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_5f.html
new file mode 100644
index 000000000..cb54e927d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_5f.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_5f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_5f.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_5f.js
new file mode 100644
index 000000000..e95f60940
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_5f.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['_5f_5fattribute_5f_5f',['__attribute__',['../_soft_i2_c_master_8h.html#a342f1dd5ca489cfb78fffa200fcee9d9',1,'SoftI2CMaster.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_61.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_61.html
new file mode 100644
index 000000000..7f395337e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_61.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_61.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_61.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_61.js
new file mode 100644
index 000000000..7140a912d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_61.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['adafruit_5fneopixel',['Adafruit_NeoPixel',['../class_adafruit___neo_pixel.html#ac314debe6917c8c9b320b785139c6e58',1,'Adafruit_NeoPixel::Adafruit_NeoPixel(uint16_t n, uint8_t p=6, neoPixelType t=NEO_GRB+NEO_KHZ800)'],['../class_adafruit___neo_pixel.html#ab1ac0c48cf3fd9185e40308c37f1d320',1,'Adafruit_NeoPixel::Adafruit_NeoPixel(void)']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_62.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_62.html
new file mode 100644
index 000000000..def0606e7
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_62.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_62.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_62.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_62.js
new file mode 100644
index 000000000..b3270dd3b
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_62.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['begin',['begin',['../class_adafruit___neo_pixel.html#aad78931e44ce43c9b9c460dba7c9bbb7',1,'Adafruit_NeoPixel']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_63.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_63.html
new file mode 100644
index 000000000..9ebe11d69
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_63.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_63.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_63.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_63.js
new file mode 100644
index 000000000..42109ea13
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_63.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['canshow',['canShow',['../class_adafruit___neo_pixel.html#ad38ce8112667b70ad7c411a98892af0e',1,'Adafruit_NeoPixel']]],
+  ['clear',['clear',['../class_adafruit___neo_pixel.html#ac8bb3912a3ce86b15842e79d0b421204',1,'Adafruit_NeoPixel']]],
+  ['color',['Color',['../class_adafruit___neo_pixel.html#ae3e6c2fabbee89d19487424acd8d9fec',1,'Adafruit_NeoPixel::Color(uint8_t r, uint8_t g, uint8_t b)'],['../class_adafruit___neo_pixel.html#a9846704aaabd4e102beba5a5484d5738',1,'Adafruit_NeoPixel::Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w)']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_67.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_67.html
new file mode 100644
index 000000000..d0ab42a3f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_67.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_67.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_67.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_67.js
new file mode 100644
index 000000000..efaa118b4
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_67.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['getbrightness',['getBrightness',['../class_adafruit___neo_pixel.html#a553bf1a0513094c73cb54a235f74ac7f',1,'Adafruit_NeoPixel']]],
+  ['getpixelcolor',['getPixelColor',['../class_adafruit___neo_pixel.html#a10a836ddc4ebd3e26b1e71a5875764fa',1,'Adafruit_NeoPixel']]],
+  ['getpixels',['getPixels',['../class_adafruit___neo_pixel.html#a18bc91d2bad52cf603814d4df6f33067',1,'Adafruit_NeoPixel']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_69.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_69.html
new file mode 100644
index 000000000..e2041976c
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_69.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_69.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_69.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_69.js
new file mode 100644
index 000000000..dd2ca0d2f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_69.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['i2c',['i2c',['../_m_a_x30102_8cpp.html#ae3e7ab47cd5395225bf7c67b8ee84976',1,'MAX30102.cpp']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6c.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6c.html
new file mode 100644
index 000000000..da371cfab
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6c.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6c.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6c.js
new file mode 100644
index 000000000..7f8b68c5d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['loop',['loop',['../_r_d117___a_r_d_u_i_n_o_8ino.html#afe461d27b9c48d5921c00d521181f12f',1,'RD117_ARDUINO.ino']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6d.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6d.html
new file mode 100644
index 000000000..d01ac5376
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6d.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6d.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6d.js
new file mode 100644
index 000000000..9fcea7bbc
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6d.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+  ['main',['main',['../main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main.cpp']]],
+  ['maxim_5ffind_5fpeaks',['maxim_find_peaks',['../algorithm_8cpp.html#a2a4e5ddbe0e04c48b166f2ff176667a9',1,'maxim_find_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num):&#160;algorithm.cpp'],['../algorithm_8h.html#a2a4e5ddbe0e04c48b166f2ff176667a9',1,'maxim_find_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num):&#160;algorithm.cpp']]],
+  ['maxim_5fheart_5frate_5fand_5foxygen_5fsaturation',['maxim_heart_rate_and_oxygen_saturation',['../algorithm_8cpp.html#a62050365673e666cd0d661a3664c26e6',1,'maxim_heart_rate_and_oxygen_saturation(uint32_t *pun_ir_buffer, int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid, int32_t *pn_heart_rate, int8_t *pch_hr_valid):&#160;algorithm.cpp'],['../algorithm_8h.html#a62050365673e666cd0d661a3664c26e6',1,'maxim_heart_rate_and_oxygen_saturation(uint32_t *pun_ir_buffer, int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid, int32_t *pn_heart_rate, int8_t *pch_hr_valid):&#160;algorithm.cpp']]],
+  ['maxim_5fmax30102_5finit',['maxim_max30102_init',['../_m_a_x30102_8cpp.html#a4113aeee76935425d8a557a79a4193df',1,'maxim_max30102_init():&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a4113aeee76935425d8a557a79a4193df',1,'maxim_max30102_init():&#160;MAX30102.cpp']]],
+  ['maxim_5fmax30102_5fread_5ffifo',['maxim_max30102_read_fifo',['../_m_a_x30102_8cpp.html#a483073cbc9dbb7a5a2495ce2ae4fb968',1,'maxim_max30102_read_fifo(uint32_t *pun_red_led, uint32_t *pun_ir_led):&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a483073cbc9dbb7a5a2495ce2ae4fb968',1,'maxim_max30102_read_fifo(uint32_t *pun_red_led, uint32_t *pun_ir_led):&#160;MAX30102.cpp']]],
+  ['maxim_5fmax30102_5fread_5freg',['maxim_max30102_read_reg',['../_m_a_x30102_8cpp.html#a0cd2c5a58e57ebbe8c9361384798331f',1,'maxim_max30102_read_reg(uint8_t uch_addr, uint8_t *puch_data):&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a0cd2c5a58e57ebbe8c9361384798331f',1,'maxim_max30102_read_reg(uint8_t uch_addr, uint8_t *puch_data):&#160;MAX30102.cpp']]],
+  ['maxim_5fmax30102_5freset',['maxim_max30102_reset',['../_m_a_x30102_8cpp.html#a1df3bb178b66379a2975c56395c47d9b',1,'maxim_max30102_reset():&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a94ab5935f6ce28aa5ce31aa842eb83dd',1,'maxim_max30102_reset(void):&#160;MAX30102.cpp']]],
+  ['maxim_5fmax30102_5fwrite_5freg',['maxim_max30102_write_reg',['../_m_a_x30102_8cpp.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6',1,'maxim_max30102_write_reg(uint8_t uch_addr, uint8_t uch_data):&#160;MAX30102.cpp'],['../_m_a_x30102_8h.html#a4c2ec1539c1ec8354cdaefe2c3bf48d6',1,'maxim_max30102_write_reg(uint8_t uch_addr, uint8_t uch_data):&#160;MAX30102.cpp']]],
+  ['maxim_5fpeaks_5fabove_5fmin_5fheight',['maxim_peaks_above_min_height',['../algorithm_8cpp.html#aab95338e44281c269f0b9b0f529741bf',1,'maxim_peaks_above_min_height(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height):&#160;algorithm.cpp'],['../algorithm_8h.html#aab95338e44281c269f0b9b0f529741bf',1,'maxim_peaks_above_min_height(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height):&#160;algorithm.cpp']]],
+  ['maxim_5fremove_5fclose_5fpeaks',['maxim_remove_close_peaks',['../algorithm_8cpp.html#adc6be68be81530d67a25c1a9905bec3a',1,'maxim_remove_close_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_min_distance):&#160;algorithm.cpp'],['../algorithm_8h.html#adc6be68be81530d67a25c1a9905bec3a',1,'maxim_remove_close_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_min_distance):&#160;algorithm.cpp']]],
+  ['maxim_5fsort_5fascend',['maxim_sort_ascend',['../algorithm_8cpp.html#a6cae46e51640b712afc2ebeefd2d51ff',1,'maxim_sort_ascend(int32_t *pn_x, int32_t n_size):&#160;algorithm.cpp'],['../algorithm_8h.html#a6cae46e51640b712afc2ebeefd2d51ff',1,'maxim_sort_ascend(int32_t *pn_x, int32_t n_size):&#160;algorithm.cpp']]],
+  ['maxim_5fsort_5findices_5fdescend',['maxim_sort_indices_descend',['../algorithm_8cpp.html#a44b6312f81810d4deb64071d12ab0060',1,'maxim_sort_indices_descend(int32_t *pn_x, int32_t *pn_indx, int32_t n_size):&#160;algorithm.cpp'],['../algorithm_8h.html#a44b6312f81810d4deb64071d12ab0060',1,'maxim_sort_indices_descend(int32_t *pn_x, int32_t *pn_indx, int32_t n_size):&#160;algorithm.cpp']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6e.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6e.html
new file mode 100644
index 000000000..d734dd07e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6e.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6e.js
new file mode 100644
index 000000000..68c17a8b8
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_6e.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['numpixels',['numPixels',['../class_adafruit___neo_pixel.html#ac893a5c07c41604539022af84665c04b',1,'Adafruit_NeoPixel']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_70.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_70.html
new file mode 100644
index 000000000..c62125ede
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_70.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_70.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_70.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_70.js
new file mode 100644
index 000000000..95bca2eec
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_70.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['pc',['pc',['../main_8cpp.html#a81e0624d7e9f10f8f7e52a569ba24753',1,'main.cpp']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_73.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_73.html
new file mode 100644
index 000000000..774d577f5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_73.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_73.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_73.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_73.js
new file mode 100644
index 000000000..e2a01b1d2
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_73.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['setbrightness',['setBrightness',['../class_adafruit___neo_pixel.html#afa1740af1d8eec971eada06d53901c53',1,'Adafruit_NeoPixel']]],
+  ['setpin',['setPin',['../class_adafruit___neo_pixel.html#a345b7a6f550461926ed5187b2df42d6b',1,'Adafruit_NeoPixel']]],
+  ['setpixelcolor',['setPixelColor',['../class_adafruit___neo_pixel.html#a0ec91c90f337e806cd98956514257cf1',1,'Adafruit_NeoPixel::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b)'],['../class_adafruit___neo_pixel.html#a35eda2252e3ed976a11d35cb8f4b2e41',1,'Adafruit_NeoPixel::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w)'],['../class_adafruit___neo_pixel.html#abbf243cce591dc37be507cf173485bc8',1,'Adafruit_NeoPixel::setPixelColor(uint16_t n, uint32_t c)']]],
+  ['setup',['setup',['../_r_d117___a_r_d_u_i_n_o_8ino.html#a4fc01d736fe50cf5b977f755b675f11d',1,'RD117_ARDUINO.ino']]],
+  ['show',['show',['../class_adafruit___neo_pixel.html#ae335a7c214036a6c1734969f2bc3f4f7',1,'Adafruit_NeoPixel']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_75.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_75.html
new file mode 100644
index 000000000..2d61754d1
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_75.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_75.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_75.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_75.js
new file mode 100644
index 000000000..ba520c8a2
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_75.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['updatelength',['updateLength',['../class_adafruit___neo_pixel.html#a05542d574f1a9a73f9e3547990321944',1,'Adafruit_NeoPixel']]],
+  ['updatetype',['updateType',['../class_adafruit___neo_pixel.html#a65e59263e0f5a04c7202d4385d3a539b',1,'Adafruit_NeoPixel']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_7e.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_7e.html
new file mode 100644
index 000000000..fd1d3ce20
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_7e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_7e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_7e.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_7e.js
new file mode 100644
index 000000000..5d71164d2
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/functions_7e.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['_7eadafruit_5fneopixel',['~Adafruit_NeoPixel',['../class_adafruit___neo_pixel.html#a16d970aa16f9d0128800346f4ca567db',1,'Adafruit_NeoPixel']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/mag_sel.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/mag_sel.png
new file mode 100644
index 0000000000000000000000000000000000000000..81f6040a2092402b4d98f9ffa8855d12a0d4ca17
GIT binary patch
literal 563
zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZeDV_;yI(4)JRfq{Xuz$3Dlfq`2Xgc%uT
z&5>YWU{FZ*2=ZlM$eqE!P~6AB@W6tBq3J3ELlrv%!>KI{48|@D3^HXcW?Fk07#MeY
zx;TbZ+<G!)cbAf*NZbBfVpamXnDr}|0|kAqI9xF|Ff@3{{y|ivM$XXOSg`nIm`jV<
zONW3Eks}9I<OXC-lD#>1W+|^)#0~pZkN$kUYB?uZb;*>P<#iv<{`%gy@B7i8HPa@a
zY<XIAGHtWsOrJ^TpRWwjVqs$Zs1@L$X*t)g$Uq_?@|wEy)~KZyGX!|pj-HnETOO=)
zT4}0Rpw`qADMo9;w9__APCnV<q2jbRu6}RI?QM)2(@%$JiJJHdFAVU|>N-@l_t>`F
zS6{6bU-bC)`|t6@!v-s^W<3fH-gaA;;b@Ye?`4*TWtoctG(Kd@2(%^IBsBckbh^`p
ziQ#x5!#(xbe|PL3$uD@+pFH{WQwE9t<1?0ZzTS1o#P`@^Lxz_nQVmgSzctvs{ZzGg
z+Tn*2e%Ab3swu;F`DMw4(pZKbx5fS9fB3%G_`fT&7VBp1d%WTP`_AK!mt4-wx&5rf
zO0d^0bNg-n7ngY$ZO%_#_xe$#-1ghN^Ut?0(umO$ui7hj{PDyH9k<n2tGH_Sh=hi=
zu39ypr*40|*=*lkclEBnp8EQ0*SgpB=ReGhxjwc1aO3a4erB_4*FO3G{CAZ!L*$BG
W8K?Y@E@xn1VDNPHb6Mw<&;$UMruU8j

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/nomatches.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/nomatches.html
new file mode 100644
index 000000000..b1ded27e9
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/nomatches.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/pages_6d.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/pages_6d.html
new file mode 100644
index 000000000..958ccc652
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/pages_6d.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_6d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/pages_6d.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/pages_6d.js
new file mode 100644
index 000000000..1608e57e1
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/pages_6d.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['main_20page',['Main Page',['../index.html',1,'']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search.css b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search.css
new file mode 100644
index 000000000..eb19dd756
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search.css
@@ -0,0 +1,238 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+    float: left;
+}
+
+#MSearchBox {
+    white-space : nowrap;
+    position: absolute;
+    float: none;
+    display: inline;
+    margin-top: 8px;
+    right: 0px;
+    width: 170px;
+    z-index: 102;
+    background-color: white;
+}
+
+#MSearchBox .left
+{
+    display:block;
+    position:absolute;
+    left:10px;
+    width:20px;
+    height:19px;
+    background:url('search_l.png') no-repeat;
+    background-position:right;
+}
+
+#MSearchSelect {
+    display:block;
+    position:absolute;
+    width:20px;
+    height:19px;
+}
+
+.left #MSearchSelect {
+    left:4px;
+}
+
+.right #MSearchSelect {
+    right:5px;
+}
+
+#MSearchField {
+    display:block;
+    position:absolute;
+    height:19px;
+    background:url('search_m.png') repeat-x;
+    border:none;
+    width:116px;
+    margin-left:20px;
+    padding-left:4px;
+    color: #909090;
+    outline: none;
+    font: 9pt Arial, Verdana, sans-serif;
+}
+
+#FSearchBox #MSearchField {
+    margin-left:15px;
+}
+
+#MSearchBox .right {
+    display:block;
+    position:absolute;
+    right:10px;
+    top:0px;
+    width:20px;
+    height:19px;
+    background:url('search_r.png') no-repeat;
+    background-position:left;
+}
+
+#MSearchClose {
+    display: none;
+    position: absolute;
+    top: 4px;
+    background : none;
+    border: none;
+    margin: 0px 4px 0px 0px;
+    padding: 0px 0px;
+    outline: none;
+}
+
+.left #MSearchClose {
+    left: 6px;
+}
+
+.right #MSearchClose {
+    right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+    color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #9CD3D1;
+    background-color: #FAFCFC;
+    z-index: 1;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    -moz-border-radius: 4px;
+    -webkit-border-top-left-radius: 4px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+    font: 8pt Arial, Verdana, sans-serif;
+    padding-left:  2px;
+    padding-right: 12px;
+    border: 0px;
+}
+
+span.SelectionMark {
+    margin-right: 4px;
+    font-family: monospace;
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem {
+    display: block;
+    outline-style: none;
+    color: #000000; 
+    text-decoration: none;
+    padding-left:   6px;
+    padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+    color: #000000; 
+    outline-style: none;
+    text-decoration: none;
+}
+
+a.SelectItem:hover {
+    color: #FFFFFF;
+    background-color: #449D99;
+    outline-style: none;
+    text-decoration: none;
+    cursor: pointer;
+    display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+    width: 60ex;
+    height: 15em;
+}
+
+#MSearchResultsWindow {
+    display: none;
+    position: absolute;
+    left: 0; top: 0;
+    border: 1px solid #000;
+    background-color: #F0F8F8;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+    clear:both; 
+    padding-bottom: 15px;
+}
+
+.SREntry {
+    font-size: 10pt;
+    padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+    font-size: 8pt;
+    padding: 1px 5px;
+}
+
+body.SRPage {
+    margin: 5px 2px;
+}
+
+.SRChildren {
+    padding-left: 3ex; padding-bottom: .5em 
+}
+
+.SRPage .SRChildren {
+    display: none;
+}
+
+.SRSymbol {
+    font-weight: bold; 
+    color: #49A8A3;
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRScope {
+    display: block;
+    color: #49A8A3; 
+    font-family: Arial, Verdana, sans-serif;
+    text-decoration: none;
+    outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+    text-decoration: underline;
+}
+
+span.SRScope {
+    padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+    padding: 2px 5px;
+    font-size: 8pt;
+    font-style: italic;
+}
+
+.SRResult {
+    display: none;
+}
+
+DIV.searchresults {
+    margin-left: 10px;
+    margin-right: 10px;
+}
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search.js
new file mode 100644
index 000000000..f2384114e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search.js
@@ -0,0 +1,805 @@
+// Search script generated by doxygen
+// Copyright (C) 2009 by Dimitri van Heesch.
+
+// The code in this file is loosly based on main.js, part of Natural Docs,
+// which is Copyright (C) 2003-2008 Greg Valure
+// Natural Docs is licensed under the GPL.
+
+var indexSectionsWithContent =
+{
+  0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001011000110101011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000010000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001011000100001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+  5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+};
+
+var indexSectionNames =
+{
+  0: "all",
+  1: "files",
+  2: "functions",
+  3: "variables",
+  4: "defines",
+  5: "pages"
+};
+
+function convertToId(search)
+{
+  var result = '';
+  for (i=0;i<search.length;i++)
+  {
+    var c = search.charAt(i);
+    var cn = c.charCodeAt(0);
+    if (c.match(/[a-z0-9]/))
+    {
+      result+=c;
+    }
+    else if (cn<16) 
+    {
+      result+="_0"+cn.toString(16);
+    }
+    else 
+    {
+      result+="_"+cn.toString(16);
+    }
+  }
+  return result;
+}
+
+function getXPos(item)
+{
+  var x = 0;
+  if (item.offsetWidth)
+  {
+    while (item && item!=document.body)
+    {
+      x   += item.offsetLeft;
+      item = item.offsetParent;
+    }
+  }
+  return x;
+}
+
+function getYPos(item)
+{
+  var y = 0;
+  if (item.offsetWidth)
+  {
+     while (item && item!=document.body)
+     {
+       y   += item.offsetTop;
+       item = item.offsetParent;
+     }
+  }
+  return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+   Parameters:
+   name - The name of the global variable that will be 
+          storing this instance.  Is needed to be able to set timeouts.
+   resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+  if (!name || !resultsPath) {  alert("Missing parameters to SearchBox."); }
+   
+  // ---------- Instance variables
+  this.name                  = name;
+  this.resultsPath           = resultsPath;
+  this.keyTimeout            = 0;
+  this.keyTimeoutLength      = 500;
+  this.closeSelectionTimeout = 300;
+  this.lastSearchValue       = "";
+  this.lastResultsPage       = "";
+  this.hideTimeout           = 0;
+  this.searchIndex           = 0;
+  this.searchActive          = false;
+  this.insideFrame           = inFrame;
+  this.searchLabel           = label;
+
+  // ----------- DOM Elements
+
+  this.DOMSearchField = function()
+  {  return document.getElementById("MSearchField");  }
+
+  this.DOMSearchSelect = function()
+  {  return document.getElementById("MSearchSelect");  }
+
+  this.DOMSearchSelectWindow = function()
+  {  return document.getElementById("MSearchSelectWindow");  }
+
+  this.DOMPopupSearchResults = function()
+  {  return document.getElementById("MSearchResults");  }
+
+  this.DOMPopupSearchResultsWindow = function()
+  {  return document.getElementById("MSearchResultsWindow");  }
+
+  this.DOMSearchClose = function()
+  {  return document.getElementById("MSearchClose"); }
+
+  this.DOMSearchBox = function()
+  {  return document.getElementById("MSearchBox");  }
+
+  // ------------ Event Handlers
+
+  // Called when focus is added or removed from the search field.
+  this.OnSearchFieldFocus = function(isActive)
+  {
+    this.Activate(isActive);
+  }
+
+  this.OnSearchSelectShow = function()
+  {
+    var searchSelectWindow = this.DOMSearchSelectWindow();
+    var searchField        = this.DOMSearchSelect();
+
+    if (this.insideFrame)
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      left += searchField.offsetWidth + 6;
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      left -= searchSelectWindow.offsetWidth;
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+    else
+    {
+      var left = getXPos(searchField);
+      var top  = getYPos(searchField);
+      top += searchField.offsetHeight;
+
+      // show search selection popup
+      searchSelectWindow.style.display='block';
+      searchSelectWindow.style.left =  left + 'px';
+      searchSelectWindow.style.top  =  top  + 'px';
+    }
+
+    // stop selection hide timer
+    if (this.hideTimeout) 
+    {
+      clearTimeout(this.hideTimeout);
+      this.hideTimeout=0;
+    }
+    return false; // to avoid "image drag" default event
+  }
+
+  this.OnSearchSelectHide = function()
+  {
+    this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+                                  this.closeSelectionTimeout);
+  }
+
+  // Called when the content of the search field is changed.
+  this.OnSearchFieldChange = function(evt)
+  {
+    if (this.keyTimeout) // kill running timer
+    {
+      clearTimeout(this.keyTimeout);
+      this.keyTimeout = 0;
+    }
+
+    var e  = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 || e.keyCode==13)
+    {
+      if (e.shiftKey==1)
+      {
+        this.OnSearchSelectShow();
+        var win=this.DOMSearchSelectWindow(); 
+        for (i=0;i<win.childNodes.length;i++)
+        {
+          var child = win.childNodes[i]; // get span within a
+          if (child.className=='SelectItem')
+          {
+            child.focus();
+            return;
+          }
+        }
+        return;
+      }
+      else if (window.frames.MSearchResults.searchResults)
+      {
+        var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+        if (elem) elem.focus();
+      }
+    }
+    else if (e.keyCode==27) // Escape out of the search field
+    {
+      this.DOMSearchField().blur();
+      this.DOMPopupSearchResultsWindow().style.display = 'none';
+      this.DOMSearchClose().style.display = 'none';
+      this.lastSearchValue = '';
+      this.Activate(false);
+      return;
+    }
+
+    // strip whitespaces
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+    if (searchValue != this.lastSearchValue) // search value has changed
+    {
+      if (searchValue != "") // non-empty search
+      {
+        // set timer for search update
+        this.keyTimeout = setTimeout(this.name + '.Search()',
+                                     this.keyTimeoutLength);
+      }
+      else // empty search field
+      {
+        this.DOMPopupSearchResultsWindow().style.display = 'none';
+        this.DOMSearchClose().style.display = 'none';
+        this.lastSearchValue = '';
+      }
+    }
+  }
+
+  this.SelectItemCount = function(id)
+  {
+    var count=0;
+    var win=this.DOMSearchSelectWindow(); 
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        count++;
+      }
+    }
+    return count;
+  }
+
+  this.SelectItemSet = function(id)
+  {
+    var i,j=0;
+    var win=this.DOMSearchSelectWindow(); 
+    for (i=0;i<win.childNodes.length;i++)
+    {
+      var child = win.childNodes[i]; // get span within a
+      if (child.className=='SelectItem')
+      {
+        var node = child.firstChild;
+        if (j==id)
+        {
+          node.innerHTML='&#8226;';
+        }
+        else
+        {
+          node.innerHTML='&#160;';
+        }
+        j++;
+      }
+    }
+  }
+
+  // Called when an search filter selection is made.
+  // set item with index id as the active item
+  this.OnSelectItem = function(id)
+  {
+    this.searchIndex = id;
+    this.SelectItemSet(id);
+    var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+    if (searchValue!="" && this.searchActive) // something was found -> do a search
+    {
+      this.Search();
+    }
+  }
+
+  this.OnSearchSelectKey = function(evt)
+  {
+    var e = (evt) ? evt : window.event; // for IE
+    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+    {
+      this.searchIndex++;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==38 && this.searchIndex>0) // Up
+    {
+      this.searchIndex--;
+      this.OnSelectItem(this.searchIndex);
+    }
+    else if (e.keyCode==13 || e.keyCode==27)
+    {
+      this.OnSelectItem(this.searchIndex);
+      this.CloseSelectionWindow();
+      this.DOMSearchField().focus();
+    }
+    return false;
+  }
+
+  // --------- Actions
+
+  // Closes the results window.
+  this.CloseResultsWindow = function()
+  {
+    this.DOMPopupSearchResultsWindow().style.display = 'none';
+    this.DOMSearchClose().style.display = 'none';
+    this.Activate(false);
+  }
+
+  this.CloseSelectionWindow = function()
+  {
+    this.DOMSearchSelectWindow().style.display = 'none';
+  }
+
+  // Performs a search.
+  this.Search = function()
+  {
+    this.keyTimeout = 0;
+
+    // strip leading whitespace
+    var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+    var code = searchValue.toLowerCase().charCodeAt(0);
+    var hexCode;
+    if (code<16) 
+    {
+      hexCode="0"+code.toString(16);
+    }
+    else 
+    {
+      hexCode=code.toString(16);
+    }
+
+    var resultsPage;
+    var resultsPageWithSearch;
+    var hasResultsPage;
+
+    if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1')
+    {
+       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+       hasResultsPage = true;
+    }
+    else // nothing available for this search term
+    {
+       resultsPage = this.resultsPath + '/nomatches.html';
+       resultsPageWithSearch = resultsPage;
+       hasResultsPage = false;
+    }
+
+    window.frames.MSearchResults.location = resultsPageWithSearch;  
+    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+    if (domPopupSearchResultsWindow.style.display!='block')
+    {
+       var domSearchBox = this.DOMSearchBox();
+       this.DOMSearchClose().style.display = 'inline';
+       if (this.insideFrame)
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         domPopupSearchResultsWindow.style.position = 'relative';
+         domPopupSearchResultsWindow.style.display  = 'block';
+         var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+         domPopupSearchResultsWindow.style.width    = width + 'px';
+         domPopupSearchResults.style.width          = width + 'px';
+       }
+       else
+       {
+         var domPopupSearchResults = this.DOMPopupSearchResults();
+         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;
+         domPopupSearchResultsWindow.style.display = 'block';
+         left -= domPopupSearchResults.offsetWidth;
+         domPopupSearchResultsWindow.style.top     = top  + 'px';
+         domPopupSearchResultsWindow.style.left    = left + 'px';
+       }
+    }
+
+    this.lastSearchValue = searchValue;
+    this.lastResultsPage = resultsPage;
+  }
+
+  // -------- Activation Functions
+
+  // Activates or deactivates the search panel, resetting things to 
+  // their default values if necessary. 
+  this.Activate = function(isActive)
+  {
+    if (isActive || // open it
+        this.DOMPopupSearchResultsWindow().style.display == 'block' 
+       )
+    {
+      this.DOMSearchBox().className = 'MSearchBoxActive';
+
+      var searchField = this.DOMSearchField();
+
+      if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+      {  
+        searchField.value = '';  
+        this.searchActive = true;
+      }
+    }
+    else if (!isActive) // directly remove the panel
+    {
+      this.DOMSearchBox().className = 'MSearchBoxInactive';
+      this.DOMSearchField().value   = this.searchLabel;
+      this.searchActive             = false;
+      this.lastSearchValue          = ''
+      this.lastResultsPage          = '';
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+    // The number of matches from the last run of <Search()>.
+    this.lastMatchCount = 0;
+    this.lastKey = 0;
+    this.repeatOn = false;
+
+    // Toggles the visibility of the passed element ID.
+    this.FindChildElement = function(id)
+    {
+      var parentElement = document.getElementById(id);
+      var element = parentElement.firstChild;
+
+      while (element && element!=parentElement)
+      {
+        if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+        {
+          return element;
+        }
+
+        if (element.nodeName == 'DIV' && element.hasChildNodes())
+        {  
+           element = element.firstChild;  
+        }
+        else if (element.nextSibling)
+        {  
+           element = element.nextSibling;  
+        }
+        else
+        {
+          do
+          {
+            element = element.parentNode;
+          }
+          while (element && element!=parentElement && !element.nextSibling);
+
+          if (element && element!=parentElement)
+          {  
+            element = element.nextSibling;  
+          }
+        }
+      }
+    }
+
+    this.Toggle = function(id)
+    {
+      var element = this.FindChildElement(id);
+      if (element)
+      {
+        if (element.style.display == 'block')
+        {
+          element.style.display = 'none';
+        }
+        else
+        {
+          element.style.display = 'block';
+        }
+      }
+    }
+
+    // Searches for the passed string.  If there is no parameter,
+    // it takes it from the URL query.
+    //
+    // Always returns true, since other documents may try to call it
+    // and that may or may not be possible.
+    this.Search = function(search)
+    {
+      if (!search) // get search word from URL
+      {
+        search = window.location.search;
+        search = search.substring(1);  // Remove the leading '?'
+        search = unescape(search);
+      }
+
+      search = search.replace(/^ +/, ""); // strip leading spaces
+      search = search.replace(/ +$/, ""); // strip trailing spaces
+      search = search.toLowerCase();
+      search = convertToId(search);
+
+      var resultRows = document.getElementsByTagName("div");
+      var matches = 0;
+
+      var i = 0;
+      while (i < resultRows.length)
+      {
+        var row = resultRows.item(i);
+        if (row.className == "SRResult")
+        {
+          var rowMatchName = row.id.toLowerCase();
+          rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+          if (search.length<=rowMatchName.length && 
+             rowMatchName.substr(0, search.length)==search)
+          {
+            row.style.display = 'block';
+            matches++;
+          }
+          else
+          {
+            row.style.display = 'none';
+          }
+        }
+        i++;
+      }
+      document.getElementById("Searching").style.display='none';
+      if (matches == 0) // no results
+      {
+        document.getElementById("NoMatches").style.display='block';
+      }
+      else // at least one result
+      {
+        document.getElementById("NoMatches").style.display='none';
+      }
+      this.lastMatchCount = matches;
+      return true;
+    }
+
+    // return the first item with index index or higher that is visible
+    this.NavNext = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index++;
+      }
+      return focusItem;
+    }
+
+    this.NavPrev = function(index)
+    {
+      var focusItem;
+      while (1)
+      {
+        var focusName = 'Item'+index;
+        focusItem = document.getElementById(focusName);
+        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+        {
+          break;
+        }
+        else if (!focusItem) // last element
+        {
+          break;
+        }
+        focusItem=null;
+        index--;
+      }
+      return focusItem;
+    }
+
+    this.ProcessKeys = function(e)
+    {
+      if (e.type == "keydown") 
+      {
+        this.repeatOn = false;
+        this.lastKey = e.keyCode;
+      }
+      else if (e.type == "keypress")
+      {
+        if (!this.repeatOn)
+        {
+          if (this.lastKey) this.repeatOn = true;
+          return false; // ignore first keypress after keydown
+        }
+      }
+      else if (e.type == "keyup")
+      {
+        this.lastKey = 0;
+        this.repeatOn = false;
+      }
+      return this.lastKey!=0;
+    }
+
+    this.Nav = function(evt,itemIndex) 
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        var newIndex = itemIndex-1;
+        var focusItem = this.NavPrev(newIndex);
+        if (focusItem)
+        {
+          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+          if (child && child.style.display == 'block') // children visible
+          { 
+            var n=0;
+            var tmpElem;
+            while (1) // search for last child
+            {
+              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+              if (tmpElem)
+              {
+                focusItem = tmpElem;
+              }
+              else // found it!
+              {
+                break;
+              }
+              n++;
+            }
+          }
+        }
+        if (focusItem)
+        {
+          focusItem.focus();
+        }
+        else // return focus to search field
+        {
+           parent.document.getElementById("MSearchField").focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = itemIndex+1;
+        var focusItem;
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem && elem.style.display == 'block') // children visible
+        {
+          focusItem = document.getElementById('Item'+itemIndex+'_c0');
+        }
+        if (!focusItem) focusItem = this.NavNext(newIndex);
+        if (focusItem)  focusItem.focus();
+      }
+      else if (this.lastKey==39) // Right
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'block';
+      }
+      else if (this.lastKey==37) // Left
+      {
+        var item = document.getElementById('Item'+itemIndex);
+        var elem = this.FindChildElement(item.parentNode.parentNode.id);
+        if (elem) elem.style.display = 'none';
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+
+    this.NavChild = function(evt,itemIndex,childIndex)
+    {
+      var e  = (evt) ? evt : window.event; // for IE
+      if (e.keyCode==13) return true;
+      if (!this.ProcessKeys(e)) return false;
+
+      if (this.lastKey==38) // Up
+      {
+        if (childIndex>0)
+        {
+          var newIndex = childIndex-1;
+          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+        }
+        else // already at first child, jump to parent
+        {
+          document.getElementById('Item'+itemIndex).focus();
+        }
+      }
+      else if (this.lastKey==40) // Down
+      {
+        var newIndex = childIndex+1;
+        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+        if (!elem) // last child, jump to parent next parent
+        {
+          elem = this.NavNext(itemIndex+1);
+        }
+        if (elem)
+        {
+          elem.focus();
+        } 
+      }
+      else if (this.lastKey==27) // Escape
+      {
+        parent.searchBox.CloseResultsWindow();
+        parent.document.getElementById("MSearchField").focus();
+      }
+      else if (this.lastKey==13) // Enter
+      {
+        return true;
+      }
+      return false;
+    }
+}
+
+function setKeyActions(elem,action)
+{
+  elem.setAttribute('onkeydown',action);
+  elem.setAttribute('onkeypress',action);
+  elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+  elem.setAttribute('class',attr);
+  elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+  var results = document.getElementById("SRResults");
+  for (var e=0; e<searchData.length; e++)
+  {
+    var id = searchData[e][0];
+    var srResult = document.createElement('div');
+    srResult.setAttribute('id','SR_'+id);
+    setClassAttr(srResult,'SRResult');
+    var srEntry = document.createElement('div');
+    setClassAttr(srEntry,'SREntry');
+    var srLink = document.createElement('a');
+    srLink.setAttribute('id','Item'+e);
+    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+    setClassAttr(srLink,'SRSymbol');
+    srLink.innerHTML = searchData[e][1][0];
+    srEntry.appendChild(srLink);
+    if (searchData[e][1].length==2) // single result
+    {
+      srLink.setAttribute('href',searchData[e][1][1][0]);
+      if (searchData[e][1][1][1])
+      {
+       srLink.setAttribute('target','_parent');
+      }
+      var srScope = document.createElement('span');
+      setClassAttr(srScope,'SRScope');
+      srScope.innerHTML = searchData[e][1][1][2];
+      srEntry.appendChild(srScope);
+    }
+    else // multiple results
+    {
+      srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+      var srChildren = document.createElement('div');
+      setClassAttr(srChildren,'SRChildren');
+      for (var c=0; c<searchData[e][1].length-1; c++)
+      {
+        var srChild = document.createElement('a');
+        srChild.setAttribute('id','Item'+e+'_c'+c);
+        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+        setClassAttr(srChild,'SRScope');
+        srChild.setAttribute('href',searchData[e][1][c+1][0]);
+        if (searchData[e][1][c+1][1])
+        {
+         srChild.setAttribute('target','_parent');
+        }
+        srChild.innerHTML = searchData[e][1][c+1][2];
+        srChildren.appendChild(srChild);
+      }
+      srEntry.appendChild(srChildren);
+    }
+    srResult.appendChild(srEntry);
+    results.appendChild(srResult);
+  }
+}
+
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_l.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_l.png
new file mode 100644
index 0000000000000000000000000000000000000000..c872f4da4a01d0754f923e6c94fd8159c0621bd1
GIT binary patch
literal 604
zcmeAS@N?(olHy`uVBq!ia0y~yU=U$oU=ZeDV_;yI(4)JRfq{Xuz$3Dlfq`2Xgc%uT
z&5>YWU{FZ*2=ZlM$eqE!P~6AB@W6tBq3J3ELlrv%!>KI{48|@D3^HXcW?Fk07#JUU
zx;TbZ+*%W2yZTmuMBTZQmWIB691Pq<-UPUa>(AXKdh6msy}Q;TUJL7&mF#u?-}0BW
z>DJO_**jew3tXCyX{?p^yr<V&k-y#~WB%Jc1#<KHzstC}Sh%jgp1dvhdG77JUF&}5
zZN7OYXZvlI=Q2Hpf4Fs&-jwY=^Lfvi43nz2yWX|um{m_c{nW*3ZrifV01;KY#O0S0
zKmYu5vchKH)zZI}OM?WLWhzbea=dK9p?E-|+f{=hVQbV<^~oofCvE((DQd0K{PTwm
zcsw)@TDr&VW>C2G)@;7t^7THKYXa9_PmB~RiEW=EG~Gc*jC*p&y=z&fcQ@%sv@t5O
z=&^pcSs$r4eZK1{i|0GoY&e?S76w$5tlgx%aLT7lwaE_y)4qSd^!+cp{=C`6p`n{6
zh8~kRWUxp2ljPOs&tkkR*$QI1cf2mVW+Yhp?f2h{udXf?xVZgmm268QhtjTj0fAH2
z_dWh|=WW>!`3IdYkB%4Z{PWI&ujame)c*TrIfvX9f7Iq^y8W==g^n0Eiz9>5t{pP}
z(pmRa%==zxAkmY)S<+Q?Zm_3|g$$pC?&ov)%n6z;KVDSMyZ!$A{pnsyk6#Q92^9@G
zwO@o=QLd+bu3XgGX$%4Ci_BN8GUGk0p*GobVdktumi<!?zGq}GeR?(S!dsrd3=9km
Mp00i_>zopr04E;^4gdfE

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_m.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_m.png
new file mode 100644
index 0000000000000000000000000000000000000000..b429a16ba641960da1e52e5da85dc80fd82635c8
GIT binary patch
literal 158
zcmeAS@N?(olHy`uVBq!ia0y~yU|?ckU=Zd2k*0Cpz6=ZuEa{HEjtmUfZd~z?Fk)a}
zkSuYHC<)F_D=AMbN@Z|N$xljE@XSq2PYp^<OsOn9nQFtpz+m9%;uunKD@jLRKRqEK
z!KUtyMaQonAC)_P{r_)2At{N0IVwO$KsqAt?k?6P3`{%>OWFBt>K?i-XJBAp@O1Ta
JS?83{1OS@7FGc_W

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_r.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/search_r.png
new file mode 100644
index 0000000000000000000000000000000000000000..97ee8b439687084201b79c6f776a41f495c6392a
GIT binary patch
literal 612
zcmeAS@N?(olHy`uVBq!ia0y~yU=U(pU=ZeDV_;yIJ1O=P0|NtRfk$L90|U1(2s1Lw
znj^u$z@U)q5#-CjkUN8cp}3EM;eiDML(^3ThAMUjhErP@7>r#Q7-Y&?%(V70FfhLI
zba4!+xV7ZU{#8<rB5WV>zs=vomAy2qd&#6LnKjHCBRvI!?(cCvqrJpudOF7vL7ku&
zCzXUQ6HTW8N5uuxuZC{k{ch8_cV|2&Y8>Kywrcs@!~MlGezuib$sXzya#HzOQx~Np
zW<SkqY24PRzd?G_|GF(!?E8Hq!N7tuHL^{`Q-G!MgH8VCn>lq6(@LXPU%h8C`)oY>
ziSK_WPnhzlp*6ANX_4pSj}gZT{~X-*_Icmq7KQ^$rl>0_HBAu;@>-JFrO~w^LdQUc
zul4n=_t{%-`L4d&WpeC>CVP*eMi-M()4JCNJj^>|_}UUz1f5#``RAYX{rBsaK4?5D
z!JN!9YuUm8jRip~7sRd4W{6vJ{k1!PTc2ZSXyPn2t*Kl&x3@JZRFs)*IsR>O=;~0l
zmWnkp@t=1teQl+4x@q0(-ONieZ`};m>|(lXGBZ))ba$Bbv44JL<)SVw59V+y{aO{%
z?4c>x_OPvEU%ctXyzR};D{VtVYcH^>E>$^a>8m!`b^GmFCzk-dNKcN&uT^t>mR~M+
z>d0qU@RonGj`fq5@jsP+P0l@M8Mb<=1Yi67CWVT-dD|~nzf@mT%^|4h8(eTs@c71(
z*z5DprrDnR>3zKL9pC!`6RC&w{{ttf+{oLWDB?Qb@_D{w^7g*RF2`&4vopk(yY(38
T+?dP2z`)??>gTe~DWM4f%J>KN

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/typedefs_6e.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/typedefs_6e.html
new file mode 100644
index 000000000..ebbf394de
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/typedefs_6e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="typedefs_6e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/typedefs_6e.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/typedefs_6e.js
new file mode 100644
index 000000000..d74232e6f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/typedefs_6e.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+  ['neopixeltype',['neoPixelType',['../_adafruit___neo_pixel_8h.html#a6ff31bc7214a3ae338a80ed6142d69ff',1,'Adafruit_NeoPixel.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_61.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_61.html
new file mode 100644
index 000000000..ff1f937df
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_61.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_61.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_61.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_61.js
new file mode 100644
index 000000000..e5953b1ba
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_61.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['aun_5fir_5fbuffer',['aun_ir_buffer',['../main_8cpp.html#a07a24850120a56110cc2838d0afcafcf',1,'main.cpp']]],
+  ['aun_5fred_5fbuffer',['aun_red_buffer',['../main_8cpp.html#a85d1012c3814f9e393e6ff8d84e56723',1,'main.cpp']]],
+  ['auw_5fhamm',['auw_hamm',['../algorithm_8h.html#a1c25ffb675bce0db6a32fbf6ad514929',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_63.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_63.html
new file mode 100644
index 000000000..c649c81fb
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_63.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_63.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_63.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_63.js
new file mode 100644
index 000000000..4e7566ffc
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_63.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['ch_5fhr_5fvalid',['ch_hr_valid',['../main_8cpp.html#a43fb8ea97a26647405ca359095323280',1,'main.cpp']]],
+  ['ch_5fspo2_5fvalid',['ch_spo2_valid',['../main_8cpp.html#a2518324dce002f592cf6d7f0b1ad9024',1,'main.cpp']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_6e.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_6e.html
new file mode 100644
index 000000000..4cc41d57f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_6e.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_6e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_6e.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_6e.js
new file mode 100644
index 000000000..31433021e
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_6e.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+  ['n_5fheart_5frate',['n_heart_rate',['../main_8cpp.html#a3171c70bfa71c3a4f960bf3e8203d13f',1,'main.cpp']]],
+  ['n_5fir_5fbuffer_5flength',['n_ir_buffer_length',['../main_8cpp.html#ac16b6dd0e762f0ccc30e7102f97260d6',1,'main.cpp']]],
+  ['n_5fsp02',['n_sp02',['../main_8cpp.html#a786e6c57c793d9af51360154ef90eb93',1,'main.cpp']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_75.html b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_75.html
new file mode 100644
index 000000000..b9cc25cf2
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_75.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_75.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_75.js b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_75.js
new file mode 100644
index 000000000..48a3fb1a5
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/search/variables_75.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+  ['uch_5fdummy',['uch_dummy',['../main_8cpp.html#ac5e493da8cbdd1414d56e8f08282fcc2',1,'main.cpp']]],
+  ['uch_5fspo2_5ftable',['uch_spo2_table',['../algorithm_8h.html#adfeeb6b08271807492803acc50347108',1,'algorithm.h']]]
+];
diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/sync_off.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/sync_off.png
new file mode 100644
index 0000000000000000000000000000000000000000..45760303ba90f1e25c871e4814f19e687944fcdc
GIT binary patch
literal 837
zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8c|2VlLn;{G-u3ng370tV
z@&AD{3TG6WoHTj(l=yhg_|)o8S$2^l=ZeXMu;AM(j$Cn%k({h%x{_O1`0^5N@v@ss
zdM6%f&AYNAK-fTS*N3?pp%a}x2xf|UGatVEe)n9-cYE(BCfvAZx&Kb_`?+`C&nw<n
zeD2y;=ijCcC8u2WM(BriB~8?f>#lyZYlqf9mV!rY1pyj$BGy8s2ZFxDseJrnU+5+y
zexA|0kn4g%ov0{-@dM%NBhw#E_;L7;0kgsM{G+Xrd+yZe2<`7a{E{h0Xut2}Tn6Kh
zn{Q0rb7D=l;VY@w{WkImd@qjA6R$lfCL`F*_@+iqzd<>FnVQG}k-9>k9VQMAZ&-AW
zJ}vqfx}vHk_v3PgzNVd(HNmmoVat-&n{{ts%h*!xyYBkwce6BBcXb)N9XrM#!`s&<
z5FK*j-ixBHB9oa6I%OFR=g*d(dj5Q){;sBgI>rM%Q-1udk^k9K(8#B15GiGP;MJ3>
zQZM_a-ICzmygB%P#|iPgxS*5Qx>DPoY+Sl%l0MVq!_TIN)r+r7b&k9+X_wRjk8Izm
zp(fnF4`g<~@?u`2t*QFpyzkxkcp(L?gSwXbkFQC@96C4ag#F1KQU{i9WsQtvxNKGW
ze_Ns1c9sL@o_{+Qd{U|VZn9;#<jLJT?j+dV<Kz8UXQ3DW(2LbVAo^s>pJzMo)+9;a
znY}));9X|c+t(Kv)&|{7d-r+SQpF-0xyQdAeNNx<^&5ka;FNc_<)ag?nBLYaEiHPS
zy8fsBcaz53XBp+b?S1(EpyRgIRhr*^eq1u&XVU-w_Lsxv)n0N;{~vuI=+;)&Tei2p
z$$Xxiv%UST(30v0@#{*;8GRP6+!MHI+1AH`?;klclx3SXgq2M6)(v>JW`d{rE%|<H
zzfjrciyt{3T1b99`t>BktUcwXGZ~&8C`e+u@1<8(-`UJi{6xKWXRW)nZb|CpuQCsk
z=ZdJG`OL6kirB~Q6U;MM=f=37)i=+#c=p&Y>GQ>_dT%zYWx5gTS2N?BX2PZ=x8>wJ
z-YRMB6XSIfm%Hm>@}S{e*dpDJL5ue@zOiGNt-8$ALs|R=0|Nttr>mdKI;Vst0K(Fa
A7XSbN

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/sync_on.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/sync_on.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7d5d6950414f407065414aeff08e7008e488095
GIT binary patch
literal 830
zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8Sv_4GLn;{G-u3knNtZbA
z@&AVSL+e;IABlyDX*O}|=-#Rl=)I^BvnEraOOSWkj8&fg$BrCP`<jrH<YQCua%1N*
z%}(*;OH%x~!iH+!0#s*3{9%~#L)2blEt^>4$4a%`r_UI8JM82;uYcxT-m^;kdEaZ-
zAA9)Do^ey8mRYyk#-Nr~cN<~bM_oUh?=TiTW-ZtlAtU&9W%U8EUu*Qf{+0gNZK3yz
zF?xq;hLC+1S3@L6*WO3jg#mN6*3D#&NS^+qluv(qoa>_=iz&JX)jnS4Im~7tt$uXg
z7xweF{65ER&OR;9c!oLmP31?WyUp)iB^zchIM1K(_<M#S;|{LQ<U<!&1TQi^NRe<W
zioVJf)^5+Zp;PZn`tz<Rrg>|WZ)qjXT5vNrL+sbznqcAck)blr-X39TID6tp^s8>M
z&HDc=k5)!`FkIe}-BjA3d&>S)di|cpRj#cJ##)@MKeoLyPHMI4WiUHC>jC%c$@-}l
zR@twAT9})EUgH<FD>YIzT6@~;eXCZa)TU&ea=LW;?#3uHonEGG8kbm(zVysqxn^0Y
zg?d2smTe}7W=#qTPWEisp|bVr?!*f+v2O0ZvXyrCSC{1ZCM>BB5a3{_nXuq`|Me4|
zDO|2*yX&9Smo95KeaiP*c1FpR|Hp(b32oN(Idz|D{dCp7lY75?F%<vx&Tyj7GI`#t
zCcT}RoBstI-}Cgc*4tG-e{TQxJEqQr!^btG?X5#?bLINbvcd)ZtNrB|x4pQi^sY>8
z$Ja-e`tEKSlT8Kq+CJ>mS>^C*=C^lu?#BIUYiF3VYb(2zO?|h`0kNHN^42OR4`2WP
z`S)SQ1g$MC=3ZAzzTSIw|A<Dz?5ndJ@=GS4&I#yyB{ALgxvXExv$K0j_>N7Uob*e{
zC-&E)voBeq4w$<z9<Y({)_t)5((Jp;A7u~N{B(?eXLGSmY}e|Sb$lQ8`E?6lD`mK`
zD0q(0Pln<JlS{7rDtg_Rym#GlKKZ*Zlk|>jHC$dAa=65oF?eFG@qW#+jvY7jX0_zm
sRZYk^biFF7^YqH;vmWz4_`>(*#NzXhesAz*U|?YIboFyt=akR{09cEP8vp<R

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_a.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_a.png
new file mode 100644
index 0000000000000000000000000000000000000000..b058dc0cdfe4adc72cbc88f07b05f9ef1eaec70c
GIT binary patch
literal 147
zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K*;Vqjo6E_OVcfq@~))5S5Qg7IzaN!|tn
zp5mO)4-T&u+y6Ld({Q6+a!ygs#1ob=yCWHImlovoUN$OTF;%D4QRtzTpo6=H<zZvj
zwa@eB_MBP1Ts=2zclCR_{d<euo(su8_x~^5D6M^#>A>PYss#)T3=E#GelF{r5}E*c
C#Wl+S

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_b.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_b.png
new file mode 100644
index 0000000000000000000000000000000000000000..30c50156ab818d3cefa72b6b499b6f43aa85c5ce
GIT binary patch
literal 160
zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K*;Vqjo6E_OVcfq^02)5S5Qg7NL$gS>|o
zc-#_i+lMacn;z`9SD4GU^FTn_Tb{EVA5DYWe|)(o@x`{TsN7G@Vv6C0daF&9-}}O|
zZ&W$wbS>#x9+tdT^q^fv<M!`cIRq0u181DrVDNwa*`vN|j#ND1EspTFvX{<%FZ4W<
Qfq{X+)78&qol`;+0JuIq3;+NC

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_h.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_h.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3dd60c32b2d54215b77d478f91bc43d939a7b5e
GIT binary patch
literal 169
zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K*;Vqjo6E_OVcfq|jG)5S5Qg7NL$SgvLV
z9@mE|;f^uE@ilLD&)v2yL3W9VmHn%0F?~D47oRg@QokR|cJ{SW>OAj8p1UTCWZCz8
zZ|hKF+jGVJL&d9otJN$d>Z?9i*IzluDY)>}T7%67fs<VCE2@{uD9-GZGhVk}U+>#y
ZMv-+Af#wmNoD2*M44$rjF6*2UngCAXJpcdz

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_s.png b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tab_s.png
new file mode 100644
index 0000000000000000000000000000000000000000..a937f624bef5baf71a02200be0c632366fc3b466
GIT binary patch
literal 177
zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU{K*;Vqjo6E_OVcfq|jI)5S5Qg7NL$ey)QK
z3<n;be!nsx!$m{b(>dpR{_VTDpR3~B<c_Ya>|g)h^vLVa&%V9cQKmaR?wVQ3$KpR%
zTIM~MuxWpAquTvdR#5!rV$s{Lj&JI`wlp<VYTC688)ogisNyy$<EW4KGB2Y**5sM|
jEdo7V?1%UN`Nx|4RwH3gj@MHL1_lOCS3j3^P6<r_)woPi

literal 0
HcmV?d00001

diff --git a/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tabs.css b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tabs.css
new file mode 100644
index 000000000..35a7f75b8
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/Code_Documentation/html/tabs.css
@@ -0,0 +1,60 @@
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
+    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+.tabs2 {
+    font-size: 10px;
+}
+.tabs3 {
+    font-size: 9px;
+}
+
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
+}
+
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
+}
+
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: #306E6B;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
+}
+
+.tabs3 .tablist a {
+    padding: 0 10px;
+}
+
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
+}
+
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/lib/vendor/Maxim/rd117_mbed/RD117_MBED/MAX30102/MAX30102.cpp b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/MAX30102/MAX30102.cpp
new file mode 100644
index 000000000..19bdf56c2
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/MAX30102/MAX30102.cpp
@@ -0,0 +1,220 @@
+/** \file max30102.cpp ******************************************************
+*
+* Project: MAXREFDES117#
+* Filename: max30102.cpp
+* Description: This module is an embedded controller driver for the MAX30102
+*
+*
+* --------------------------------------------------------------------
+*
+* This code follows the following naming conventions:
+*
+* char              ch_pmod_value
+* char (array)      s_pmod_s_string[16]
+* float             f_pmod_value
+* int32_t           n_pmod_value
+* int32_t (array)   an_pmod_value[16]
+* int16_t           w_pmod_value
+* int16_t (array)   aw_pmod_value[16]
+* uint16_t          uw_pmod_value
+* uint16_t (array)  auw_pmod_value[16]
+* uint8_t           uch_pmod_value
+* uint8_t (array)   auch_pmod_buffer[16]
+* uint32_t          un_pmod_value
+* int32_t *         pn_pmod_value
+*
+* ------------------------------------------------------------------------- */
+/*******************************************************************************
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+#include "mbed.h"
+#include "MAX30102.h"
+
+#ifdef TARGET_MAX32600MBED
+I2C i2c(I2C1_SDA, I2C1_SCL);
+#else
+I2C i2c(I2C_SDA, I2C_SCL);
+#endif
+
+bool maxim_max30102_write_reg(uint8_t uch_addr, uint8_t uch_data)
+/**
+* \brief        Write a value to a MAX30102 register
+* \par          Details
+*               This function writes a value to a MAX30102 register
+*
+* \param[in]    uch_addr    - register address
+* \param[in]    uch_data    - register data
+*
+* \retval       true on success
+*/
+{
+  char ach_i2c_data[2];
+  ach_i2c_data[0]=uch_addr;
+  ach_i2c_data[1]=uch_data;
+  
+  if(i2c.write(I2C_WRITE_ADDR, ach_i2c_data, 2, false)==0)
+    return true;
+  else
+    return false;
+}
+
+bool maxim_max30102_read_reg(uint8_t uch_addr, uint8_t *puch_data)
+/**
+* \brief        Read a MAX30102 register
+* \par          Details
+*               This function reads a MAX30102 register
+*
+* \param[in]    uch_addr    - register address
+* \param[out]   puch_data    - pointer that stores the register data
+*
+* \retval       true on success
+*/
+{
+  char ch_i2c_data;
+  ch_i2c_data=uch_addr;
+  if(i2c.write(I2C_WRITE_ADDR, &ch_i2c_data, 1, true)!=0)
+    return false;
+  if(i2c.read(I2C_READ_ADDR, &ch_i2c_data, 1, false)==0)
+  {
+    *puch_data=(uint8_t) ch_i2c_data;
+    return true;
+  }
+  else
+    return false;
+}
+
+bool maxim_max30102_init()
+/**
+* \brief        Initialize the MAX30102
+* \par          Details
+*               This function initializes the MAX30102
+*
+* \param        None
+*
+* \retval       true on success
+*/
+{
+  if(!maxim_max30102_write_reg(REG_INTR_ENABLE_1,0xc0)) // INTR setting
+    return false;
+  if(!maxim_max30102_write_reg(REG_INTR_ENABLE_2,0x00))
+    return false;
+  if(!maxim_max30102_write_reg(REG_FIFO_WR_PTR,0x00))  //FIFO_WR_PTR[4:0]
+    return false;
+  if(!maxim_max30102_write_reg(REG_OVF_COUNTER,0x00))  //OVF_COUNTER[4:0]
+    return false;
+  if(!maxim_max30102_write_reg(REG_FIFO_RD_PTR,0x00))  //FIFO_RD_PTR[4:0]
+    return false;
+  if(!maxim_max30102_write_reg(REG_FIFO_CONFIG,0x0f))  //sample avg = 1, fifo rollover=false, fifo almost full = 17
+    return false;
+  if(!maxim_max30102_write_reg(REG_MODE_CONFIG,0x03))   //0x02 for Red only, 0x03 for SpO2 mode 0x07 multimode LED
+    return false;
+  if(!maxim_max30102_write_reg(REG_SPO2_CONFIG,0x27))  // SPO2_ADC range = 4096nA, SPO2 sample rate (100 Hz), LED pulseWidth (400uS)
+    return false;
+  
+  if(!maxim_max30102_write_reg(REG_LED1_PA,0x24))   //Choose value for ~ 7mA for LED1
+    return false;
+  if(!maxim_max30102_write_reg(REG_LED2_PA,0x24))   // Choose value for ~ 7mA for LED2
+    return false;
+  if(!maxim_max30102_write_reg(REG_PILOT_PA,0x7f))   // Choose value for ~ 25mA for Pilot LED
+    return false;
+  return true;  
+}
+
+bool maxim_max30102_read_fifo(uint32_t *pun_red_led, uint32_t *pun_ir_led)
+/**
+* \brief        Read a set of samples from the MAX30102 FIFO register
+* \par          Details
+*               This function reads a set of samples from the MAX30102 FIFO register
+*
+* \param[out]   *pun_red_led   - pointer that stores the red LED reading data
+* \param[out]   *pun_ir_led    - pointer that stores the IR LED reading data
+*
+* \retval       true on success
+*/
+{
+  uint32_t un_temp;
+  unsigned char uch_temp;
+  *pun_red_led=0;
+  *pun_ir_led=0;
+  char ach_i2c_data[6];
+  
+  //read and clear status register
+  maxim_max30102_read_reg(REG_INTR_STATUS_1, &uch_temp);
+  maxim_max30102_read_reg(REG_INTR_STATUS_2, &uch_temp);
+  
+  ach_i2c_data[0]=REG_FIFO_DATA;
+  if(i2c.write(I2C_WRITE_ADDR, ach_i2c_data, 1, true)!=0)
+    return false;
+  if(i2c.read(I2C_READ_ADDR, ach_i2c_data, 6, false)!=0)
+  {
+    return false;
+  }
+  un_temp=(unsigned char) ach_i2c_data[0];
+  un_temp<<=16;
+  *pun_red_led+=un_temp;
+  un_temp=(unsigned char) ach_i2c_data[1];
+  un_temp<<=8;
+  *pun_red_led+=un_temp;
+  un_temp=(unsigned char) ach_i2c_data[2];
+  *pun_red_led+=un_temp;
+  
+  un_temp=(unsigned char) ach_i2c_data[3];
+  un_temp<<=16;
+  *pun_ir_led+=un_temp;
+  un_temp=(unsigned char) ach_i2c_data[4];
+  un_temp<<=8;
+  *pun_ir_led+=un_temp;
+  un_temp=(unsigned char) ach_i2c_data[5];
+  *pun_ir_led+=un_temp;
+  *pun_red_led&=0x03FFFF;  //Mask MSB [23:18]
+  *pun_ir_led&=0x03FFFF;  //Mask MSB [23:18]
+  
+  
+  return true;
+}
+
+bool maxim_max30102_reset()
+/**
+* \brief        Reset the MAX30102
+* \par          Details
+*               This function resets the MAX30102
+*
+* \param        None
+*
+* \retval       true on success
+*/
+{
+    if(!maxim_max30102_write_reg(REG_MODE_CONFIG,0x40))
+        return false;
+    else
+        return true;    
+}
diff --git a/lib/vendor/Maxim/rd117_mbed/RD117_MBED/MAX30102/MAX30102.h b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/MAX30102/MAX30102.h
new file mode 100644
index 000000000..031f9876d
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/MAX30102/MAX30102.h
@@ -0,0 +1,97 @@
+/** \file max30102.h ******************************************************
+*
+* Project: MAXREFDES117#
+* Filename: max30102.h
+* Description: This module is an embedded controller driver header file for MAX30102
+*
+*
+* --------------------------------------------------------------------
+*
+* This code follows the following naming conventions:
+*
+* char              ch_pmod_value
+* char (array)      s_pmod_s_string[16]
+* float             f_pmod_value
+* int32_t           n_pmod_value
+* int32_t (array)   an_pmod_value[16]
+* int16_t           w_pmod_value
+* int16_t (array)   aw_pmod_value[16]
+* uint16_t          uw_pmod_value
+* uint16_t (array)  auw_pmod_value[16]
+* uint8_t           uch_pmod_value
+* uint8_t (array)   auch_pmod_buffer[16]
+* uint32_t          un_pmod_value
+* int32_t *         pn_pmod_value
+*
+* ------------------------------------------------------------------------- */
+/*******************************************************************************
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+#ifndef MAX30102_H_
+#define MAX30102_H_
+
+#include "mbed.h"
+
+#define I2C_WRITE_ADDR 0xAE
+#define I2C_READ_ADDR 0xAF
+
+//register addresses
+#define REG_INTR_STATUS_1 0x00
+#define REG_INTR_STATUS_2 0x01
+#define REG_INTR_ENABLE_1 0x02
+#define REG_INTR_ENABLE_2 0x03
+#define REG_FIFO_WR_PTR 0x04
+#define REG_OVF_COUNTER 0x05
+#define REG_FIFO_RD_PTR 0x06
+#define REG_FIFO_DATA 0x07
+#define REG_FIFO_CONFIG 0x08
+#define REG_MODE_CONFIG 0x09
+#define REG_SPO2_CONFIG 0x0A
+#define REG_LED1_PA 0x0C
+#define REG_LED2_PA 0x0D
+#define REG_PILOT_PA 0x10
+#define REG_MULTI_LED_CTRL1 0x11
+#define REG_MULTI_LED_CTRL2 0x12
+#define REG_TEMP_INTR 0x1F
+#define REG_TEMP_FRAC 0x20
+#define REG_TEMP_CONFIG 0x21
+#define REG_PROX_INT_THRESH 0x30
+#define REG_REV_ID 0xFE
+#define REG_PART_ID 0xFF
+
+bool maxim_max30102_init();
+bool maxim_max30102_read_fifo(uint32_t *pun_red_led, uint32_t *pun_ir_led);
+bool maxim_max30102_write_reg(uint8_t uch_addr, uint8_t uch_data);
+bool maxim_max30102_read_reg(uint8_t uch_addr, uint8_t *puch_data);
+bool maxim_max30102_reset(void);
+
+#endif /* MAX30102_H_ */
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/RD117_MBED/algorithm/algorithm.cpp b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/algorithm/algorithm.cpp
new file mode 100644
index 000000000..409ec615f
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/algorithm/algorithm.cpp
@@ -0,0 +1,363 @@
+/** \file algorithm.cpp ******************************************************
+*
+* Project: MAXREFDES117#
+* Filename: algorithm.cpp
+* Description: This module calculates the heart rate/SpO2 level
+*
+*
+* --------------------------------------------------------------------
+*
+* This code follows the following naming conventions:
+*
+* char              ch_pmod_value
+* char (array)      s_pmod_s_string[16]
+* float             f_pmod_value
+* int32_t           n_pmod_value
+* int32_t (array)   an_pmod_value[16]
+* int16_t           w_pmod_value
+* int16_t (array)   aw_pmod_value[16]
+* uint16_t          uw_pmod_value
+* uint16_t (array)  auw_pmod_value[16]
+* uint8_t           uch_pmod_value
+* uint8_t (array)   auch_pmod_buffer[16]
+* uint32_t          un_pmod_value
+* int32_t *         pn_pmod_value
+*
+* ------------------------------------------------------------------------- */
+/*******************************************************************************
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+#include "algorithm.h"
+#include "mbed.h"
+
+void maxim_heart_rate_and_oxygen_saturation(uint32_t *pun_ir_buffer,  int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, int32_t *pn_spo2, int8_t *pch_spo2_valid, 
+                              int32_t *pn_heart_rate, int8_t  *pch_hr_valid)
+/**
+* \brief        Calculate the heart rate and SpO2 level
+* \par          Details
+*               By detecting  peaks of PPG cycle and corresponding AC/DC of red/infra-red signal, the ratio for the SPO2 is computed.
+*               Since this algorithm is aiming for Arm M0/M3. formaula for SPO2 did not achieve the accuracy due to register overflow.
+*               Thus, accurate SPO2 is precalculated and save longo uch_spo2_table[] per each ratio.
+*
+* \param[in]    *pun_ir_buffer           - IR sensor data buffer
+* \param[in]    n_ir_buffer_length      - IR sensor data buffer length
+* \param[in]    *pun_red_buffer          - Red sensor data buffer
+* \param[out]    *pn_spo2                - Calculated SpO2 value
+* \param[out]    *pch_spo2_valid         - 1 if the calculated SpO2 value is valid
+* \param[out]    *pn_heart_rate          - Calculated heart rate value
+* \param[out]    *pch_hr_valid           - 1 if the calculated heart rate value is valid
+*
+* \retval       None
+*/
+{
+    uint32_t un_ir_mean ,un_only_once ;
+    int32_t k ,n_i_ratio_count;
+    int32_t i, s, m, n_exact_ir_valley_locs_count ,n_middle_idx;
+    int32_t n_th1, n_npks,n_c_min;      
+    int32_t an_ir_valley_locs[15] ;
+    int32_t an_exact_ir_valley_locs[15] ;
+    int32_t an_dx_peak_locs[15] ;
+    int32_t n_peak_interval_sum;
+    
+    int32_t n_y_ac, n_x_ac;
+    int32_t n_spo2_calc; 
+    int32_t n_y_dc_max, n_x_dc_max; 
+    int32_t n_y_dc_max_idx, n_x_dc_max_idx; 
+    int32_t an_ratio[5],n_ratio_average; 
+    int32_t n_nume,  n_denom ;
+    // remove DC of ir signal    
+    un_ir_mean =0; 
+    for (k=0 ; k<n_ir_buffer_length ; k++ ) un_ir_mean += pun_ir_buffer[k] ;
+    un_ir_mean =un_ir_mean/n_ir_buffer_length ;
+    for (k=0 ; k<n_ir_buffer_length ; k++ )  an_x[k] =  pun_ir_buffer[k] - un_ir_mean ; 
+    
+    // 4 pt Moving Average
+    for(k=0; k< BUFFER_SIZE-MA4_SIZE; k++){
+        n_denom= ( an_x[k]+an_x[k+1]+ an_x[k+2]+ an_x[k+3]);
+        an_x[k]=  n_denom/(int32_t)4; 
+    }
+
+    // get difference of smoothed IR signal
+    
+    for( k=0; k<BUFFER_SIZE-MA4_SIZE-1;  k++)
+        an_dx[k]= (an_x[k+1]- an_x[k]);
+
+    // 2-pt Moving Average to an_dx
+    for(k=0; k< BUFFER_SIZE-MA4_SIZE-2; k++){
+        an_dx[k] =  ( an_dx[k]+an_dx[k+1])/2 ;
+    }
+    
+    // hamming window
+    // flip wave form so that we can detect valley with peak detector
+    for ( i=0 ; i<BUFFER_SIZE-HAMMING_SIZE-MA4_SIZE-2 ;i++){
+        s= 0;
+        for( k=i; k<i+ HAMMING_SIZE ;k++){
+            s -= an_dx[k] *auw_hamm[k-i] ; 
+                     }
+        an_dx[i]= s/ (int32_t)1146; // divide by sum of auw_hamm 
+    }
+
+ 
+    n_th1=0; // threshold calculation
+    for ( k=0 ; k<BUFFER_SIZE-HAMMING_SIZE ;k++){
+        n_th1 += ((an_dx[k]>0)? an_dx[k] : ((int32_t)0-an_dx[k])) ;
+    }
+    n_th1= n_th1/ ( BUFFER_SIZE-HAMMING_SIZE);
+    // peak location is acutally index for sharpest location of raw signal since we flipped the signal         
+    maxim_find_peaks( an_dx_peak_locs, &n_npks, an_dx, BUFFER_SIZE-HAMMING_SIZE, n_th1, 8, 5 );//peak_height, peak_distance, max_num_peaks 
+
+    n_peak_interval_sum =0;
+    if (n_npks>=2){
+        for (k=1; k<n_npks; k++)
+            n_peak_interval_sum += (an_dx_peak_locs[k]-an_dx_peak_locs[k -1]);
+        n_peak_interval_sum=n_peak_interval_sum/(n_npks-1);
+        *pn_heart_rate=(int32_t)(6000/n_peak_interval_sum);// beats per minutes
+        *pch_hr_valid  = 1;
+    }
+    else  {
+        *pn_heart_rate = -999;
+        *pch_hr_valid  = 0;
+    }
+            
+    for ( k=0 ; k<n_npks ;k++)
+        an_ir_valley_locs[k]=an_dx_peak_locs[k]+HAMMING_SIZE/2; 
+
+
+    // raw value : RED(=y) and IR(=X)
+    // we need to assess DC and AC value of ir and red PPG. 
+    for (k=0 ; k<n_ir_buffer_length ; k++ )  {
+        an_x[k] =  pun_ir_buffer[k] ; 
+        an_y[k] =  pun_red_buffer[k] ; 
+    }
+
+    // find precise min near an_ir_valley_locs
+    n_exact_ir_valley_locs_count =0; 
+    for(k=0 ; k<n_npks ;k++){
+        un_only_once =1;
+        m=an_ir_valley_locs[k];
+        n_c_min= 16777216;//2^24;
+        if (m+5 <  BUFFER_SIZE-HAMMING_SIZE  && m-5 >0){
+            for(i= m-5;i<m+5; i++)
+                if (an_x[i]<n_c_min){
+                    if (un_only_once >0){
+                       un_only_once =0;
+                   } 
+                   n_c_min= an_x[i] ;
+                   an_exact_ir_valley_locs[k]=i;
+                }
+            if (un_only_once ==0)
+                n_exact_ir_valley_locs_count ++ ;
+        }
+    }
+    if (n_exact_ir_valley_locs_count <2 ){
+       *pn_spo2 =  -999 ; // do not use SPO2 since signal ratio is out of range
+       *pch_spo2_valid  = 0; 
+       return;
+    }
+    // 4 pt MA
+    for(k=0; k< BUFFER_SIZE-MA4_SIZE; k++){
+        an_x[k]=( an_x[k]+an_x[k+1]+ an_x[k+2]+ an_x[k+3])/(int32_t)4;
+        an_y[k]=( an_y[k]+an_y[k+1]+ an_y[k+2]+ an_y[k+3])/(int32_t)4;
+    }
+
+    //using an_exact_ir_valley_locs , find ir-red DC andir-red AC for SPO2 calibration ratio
+    //finding AC/DC maximum of raw ir * red between two valley locations
+    n_ratio_average =0; 
+    n_i_ratio_count =0; 
+    
+    for(k=0; k< 5; k++) an_ratio[k]=0;
+    for (k=0; k< n_exact_ir_valley_locs_count; k++){
+        if (an_exact_ir_valley_locs[k] > BUFFER_SIZE ){             
+            *pn_spo2 =  -999 ; // do not use SPO2 since valley loc is out of range
+            *pch_spo2_valid  = 0; 
+            return;
+        }
+    }
+    // find max between two valley locations 
+    // and use ratio betwen AC compoent of Ir & Red and DC compoent of Ir & Red for SPO2 
+
+    for (k=0; k< n_exact_ir_valley_locs_count-1; k++){
+        n_y_dc_max= -16777216 ; 
+        n_x_dc_max= - 16777216; 
+        if (an_exact_ir_valley_locs[k+1]-an_exact_ir_valley_locs[k] >10){
+            for (i=an_exact_ir_valley_locs[k]; i< an_exact_ir_valley_locs[k+1]; i++){
+                if (an_x[i]> n_x_dc_max) {n_x_dc_max =an_x[i];n_x_dc_max_idx =i; }
+                if (an_y[i]> n_y_dc_max) {n_y_dc_max =an_y[i];n_y_dc_max_idx=i;}
+            }
+            n_y_ac= (an_y[an_exact_ir_valley_locs[k+1]] - an_y[an_exact_ir_valley_locs[k] ] )*(n_y_dc_max_idx -an_exact_ir_valley_locs[k]); //red
+            n_y_ac=  an_y[an_exact_ir_valley_locs[k]] + n_y_ac/ (an_exact_ir_valley_locs[k+1] - an_exact_ir_valley_locs[k])  ; 
+        
+        
+            n_y_ac=  an_y[n_y_dc_max_idx] - n_y_ac;    // subracting linear DC compoenents from raw 
+            n_x_ac= (an_x[an_exact_ir_valley_locs[k+1]] - an_x[an_exact_ir_valley_locs[k] ] )*(n_x_dc_max_idx -an_exact_ir_valley_locs[k]); // ir
+            n_x_ac=  an_x[an_exact_ir_valley_locs[k]] + n_x_ac/ (an_exact_ir_valley_locs[k+1] - an_exact_ir_valley_locs[k]); 
+            n_x_ac=  an_x[n_y_dc_max_idx] - n_x_ac;      // subracting linear DC compoenents from raw 
+            n_nume=( n_y_ac *n_x_dc_max)>>7 ; //prepare X100 to preserve floating value
+            n_denom= ( n_x_ac *n_y_dc_max)>>7;
+            if (n_denom>0  && n_i_ratio_count <5 &&  n_nume != 0)
+            {   
+                an_ratio[n_i_ratio_count]= (n_nume*100)/n_denom ; //formular is ( n_y_ac *n_x_dc_max) / ( n_x_ac *n_y_dc_max) ;
+                n_i_ratio_count++;
+            }
+        }
+    }
+
+    maxim_sort_ascend(an_ratio, n_i_ratio_count);
+    n_middle_idx= n_i_ratio_count/2;
+
+    if (n_middle_idx >1)
+        n_ratio_average =( an_ratio[n_middle_idx-1] +an_ratio[n_middle_idx])/2; // use median
+    else
+        n_ratio_average = an_ratio[n_middle_idx ];
+
+    if( n_ratio_average>2 && n_ratio_average <184){
+        n_spo2_calc= uch_spo2_table[n_ratio_average] ;
+        *pn_spo2 = n_spo2_calc ;
+        *pch_spo2_valid  = 1;//  float_SPO2 =  -45.060*n_ratio_average* n_ratio_average/10000 + 30.354 *n_ratio_average/100 + 94.845 ;  // for comparison with table
+    }
+    else{
+        *pn_spo2 =  -999 ; // do not use SPO2 since signal ratio is out of range
+        *pch_spo2_valid  = 0; 
+    }
+}
+
+
+void maxim_find_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num)
+/**
+* \brief        Find peaks
+* \par          Details
+*               Find at most MAX_NUM peaks above MIN_HEIGHT separated by at least MIN_DISTANCE
+*
+* \retval       None
+*/
+{
+    maxim_peaks_above_min_height( pn_locs, pn_npks, pn_x, n_size, n_min_height );
+    maxim_remove_close_peaks( pn_locs, pn_npks, pn_x, n_min_distance );
+    *pn_npks = min( *pn_npks, n_max_num );
+}
+
+void maxim_peaks_above_min_height(int32_t *pn_locs, int32_t *pn_npks, int32_t  *pn_x, int32_t n_size, int32_t n_min_height)
+/**
+* \brief        Find peaks above n_min_height
+* \par          Details
+*               Find all peaks above MIN_HEIGHT
+*
+* \retval       None
+*/
+{
+    int32_t i = 1, n_width;
+    *pn_npks = 0;
+    
+    while (i < n_size-1){
+        if (pn_x[i] > n_min_height && pn_x[i] > pn_x[i-1]){            // find left edge of potential peaks
+            n_width = 1;
+            while (i+n_width < n_size && pn_x[i] == pn_x[i+n_width])    // find flat peaks
+                n_width++;
+            if (pn_x[i] > pn_x[i+n_width] && (*pn_npks) < 15 ){                            // find right edge of peaks
+                pn_locs[(*pn_npks)++] = i;        
+                // for flat peaks, peak location is left edge
+                i += n_width+1;
+            }
+            else
+                i += n_width;
+        }
+        else
+            i++;
+    }
+}
+
+
+void maxim_remove_close_peaks(int32_t *pn_locs, int32_t *pn_npks, int32_t *pn_x, int32_t n_min_distance)
+/**
+* \brief        Remove peaks
+* \par          Details
+*               Remove peaks separated by less than MIN_DISTANCE
+*
+* \retval       None
+*/
+{
+    
+    int32_t i, j, n_old_npks, n_dist;
+    
+    /* Order peaks from large to small */
+    maxim_sort_indices_descend( pn_x, pn_locs, *pn_npks );
+
+    for ( i = -1; i < *pn_npks; i++ ){
+        n_old_npks = *pn_npks;
+        *pn_npks = i+1;
+        for ( j = i+1; j < n_old_npks; j++ ){
+            n_dist =  pn_locs[j] - ( i == -1 ? -1 : pn_locs[i] ); // lag-zero peak of autocorr is at index -1
+            if ( n_dist > n_min_distance || n_dist < -n_min_distance )
+                pn_locs[(*pn_npks)++] = pn_locs[j];
+        }
+    }
+
+    // Resort indices longo ascending order
+    maxim_sort_ascend( pn_locs, *pn_npks );
+}
+
+void maxim_sort_ascend(int32_t *pn_x,int32_t n_size) 
+/**
+* \brief        Sort array
+* \par          Details
+*               Sort array in ascending order (insertion sort algorithm)
+*
+* \retval       None
+*/
+{
+    int32_t i, j, n_temp;
+    for (i = 1; i < n_size; i++) {
+        n_temp = pn_x[i];
+        for (j = i; j > 0 && n_temp < pn_x[j-1]; j--)
+            pn_x[j] = pn_x[j-1];
+        pn_x[j] = n_temp;
+    }
+}
+
+void maxim_sort_indices_descend(int32_t *pn_x, int32_t *pn_indx, int32_t n_size)
+/**
+* \brief        Sort indices
+* \par          Details
+*               Sort indices according to descending order (insertion sort algorithm)
+*
+* \retval       None
+*/ 
+{
+    int32_t i, j, n_temp;
+    for (i = 1; i < n_size; i++) {
+        n_temp = pn_indx[i];
+        for (j = i; j > 0 && pn_x[n_temp] > pn_x[pn_indx[j-1]]; j--)
+            pn_indx[j] = pn_indx[j-1];
+        pn_indx[j] = n_temp;
+    }
+}
+
diff --git a/lib/vendor/Maxim/rd117_mbed/RD117_MBED/algorithm/algorithm.h b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/algorithm/algorithm.h
new file mode 100644
index 000000000..ec8cd7f67
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/algorithm/algorithm.h
@@ -0,0 +1,100 @@
+/** \file algorithm.h ******************************************************
+*
+* Project: MAXREFDES117#
+* Filename: algorithm.h
+* Description: This module is the heart rate/SpO2 calculation algorithm header file
+*
+* Revision History:
+*\n 1-18-2016 Rev 01.00 SK Initial release.
+*\n
+*
+* --------------------------------------------------------------------
+*
+* This code follows the following naming conventions:
+*
+*\n char              ch_pmod_value
+*\n char (array)      s_pmod_s_string[16]
+*\n float             f_pmod_value
+*\n int32_t           n_pmod_value
+*\n int32_t (array)   an_pmod_value[16]
+*\n int16_t           w_pmod_value
+*\n int16_t (array)   aw_pmod_value[16]
+*\n uint16_t          uw_pmod_value
+*\n uint16_t (array)  auw_pmod_value[16]
+*\n uint8_t           uch_pmod_value
+*\n uint8_t (array)   auch_pmod_buffer[16]
+*\n uint32_t          un_pmod_value
+*\n int32_t *         pn_pmod_value
+*
+* ------------------------------------------------------------------------- */
+/*******************************************************************************
+* Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+#ifndef ALGORITHM_H_
+#define ALGORITHM_H_
+
+#include "mbed.h"
+
+#define true 1
+#define false 0
+#define FS 100
+#define BUFFER_SIZE  (FS* 5) 
+#define HR_FIFO_SIZE 7
+#define MA4_SIZE  4 // DO NOT CHANGE
+#define HAMMING_SIZE  5// DO NOT CHANGE
+#define min(x,y) ((x) < (y) ? (x) : (y))
+
+const uint16_t auw_hamm[31]={ 41,    276,    512,    276,     41 }; //Hamm=  long16(512* hamming(5)');
+//uch_spo2_table is computed as  -45.060*ratioAverage* ratioAverage + 30.354 *ratioAverage + 94.845 ;
+const uint8_t uch_spo2_table[184]={ 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 99, 99, 99, 99, 
+                            99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 
+                            100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, 98, 98, 97, 97, 
+                            97, 97, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 93, 93, 92, 92, 92, 91, 91, 
+                            90, 90, 89, 89, 89, 88, 88, 87, 87, 86, 86, 85, 85, 84, 84, 83, 82, 82, 81, 81, 
+                            80, 80, 79, 78, 78, 77, 76, 76, 75, 74, 74, 73, 72, 72, 71, 70, 69, 69, 68, 67, 
+                            66, 66, 65, 64, 63, 62, 62, 61, 60, 59, 58, 57, 56, 56, 55, 54, 53, 52, 51, 50, 
+                            49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 31, 30, 29, 
+                            28, 27, 26, 25, 23, 22, 21, 20, 19, 17, 16, 15, 14, 12, 11, 10, 9, 7, 6, 5, 
+                            3, 2, 1 } ;
+static  int32_t an_dx[ BUFFER_SIZE-MA4_SIZE]; // delta
+static  int32_t an_x[ BUFFER_SIZE]; //ir
+static  int32_t an_y[ BUFFER_SIZE]; //red
+
+
+void maxim_heart_rate_and_oxygen_saturation(uint32_t *pun_ir_buffer ,  int32_t n_ir_buffer_length, uint32_t *pun_red_buffer ,   int32_t *pn_spo2, int8_t *pch_spo2_valid ,  int32_t *pn_heart_rate , int8_t  *pch_hr_valid);
+void maxim_find_peaks( int32_t *pn_locs, int32_t *pn_npks,  int32_t *pn_x, int32_t n_size, int32_t n_min_height, int32_t n_min_distance, int32_t n_max_num );
+void maxim_peaks_above_min_height( int32_t *pn_locs, int32_t *pn_npks,  int32_t *pn_x, int32_t n_size, int32_t n_min_height );
+void maxim_remove_close_peaks( int32_t *pn_locs, int32_t *pn_npks,   int32_t  *pn_x, int32_t n_min_distance );
+void maxim_sort_ascend( int32_t *pn_x, int32_t n_size );
+void maxim_sort_indices_descend(  int32_t  *pn_x, int32_t *pn_indx, int32_t n_size);
+
+#endif /* ALGORITHM_H_ */
\ No newline at end of file
diff --git a/lib/vendor/Maxim/rd117_mbed/RD117_MBED/main.cpp b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/main.cpp
new file mode 100644
index 000000000..8b4596c77
--- /dev/null
+++ b/lib/vendor/Maxim/rd117_mbed/RD117_MBED/main.cpp
@@ -0,0 +1,219 @@
+/** \file main.cpp ******************************************************
+*
+* Project: MAXREFDES117#
+* Filename: main.cpp
+* Description: This module contains the Main application for the MAXREFDES117 example program.
+*
+*
+* --------------------------------------------------------------------
+*
+* This code follows the following naming conventions:
+*
+* char              ch_pmod_value
+* char (array)      s_pmod_s_string[16]
+* float             f_pmod_value
+* int32_t           n_pmod_value
+* int32_t (array)   an_pmod_value[16]
+* int16_t           w_pmod_value
+* int16_t (array)   aw_pmod_value[16]
+* uint16_t          uw_pmod_value
+* uint16_t (array)  auw_pmod_value[16]
+* uint8_t           uch_pmod_value
+* uint8_t (array)   auch_pmod_buffer[16]
+* uint32_t          un_pmod_value
+* int32_t *         pn_pmod_value
+*
+* ------------------------------------------------------------------------- */
+/*******************************************************************************
+* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining a
+* copy of this software and associated documentation files (the "Software"),
+* to deal in the Software without restriction, including without limitation
+* the rights to use, copy, modify, merge, publish, distribute, sublicense,
+* and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+* OTHER DEALINGS IN THE SOFTWARE.
+*
+* Except as contained in this notice, the name of Maxim Integrated
+* Products, Inc. shall not be used except as stated in the Maxim Integrated
+* Products, Inc. Branding Policy.
+*
+* The mere transfer of this software does not imply any licenses
+* of trade secrets, proprietary technology, copyrights, patents,
+* trademarks, maskwork rights, or any other form of intellectual
+* property whatsoever. Maxim Integrated Products, Inc. retains all
+* ownership rights.
+*******************************************************************************
+*/
+/*!\mainpage Main Page
+*
+* \section intro_sec Introduction
+*
+* This is the code documentation for the MAXREFDES117# subsystem reference design.
+* 
+*  The Files page contains the File List page and the Globals page.
+* 
+*  The Globals page contains the Functions, Variables, and Macros sub-pages.
+*
+* \image html MAXREFDES117_Block_Diagram.png "MAXREFDES117# System Block Diagram"
+* 
+* \image html MAXREFDES117_firmware_Flowchart.png "MAXREFDES117# Firmware Flowchart"
+*
+*/
+#include "mbed.h"
+#include "algorithm.h"
+#include "MAX30102.h"
+
+#define MAX_BRIGHTNESS 255
+
+uint32_t aun_ir_buffer[500]; //IR LED sensor data
+int32_t n_ir_buffer_length;    //data length
+uint32_t aun_red_buffer[500];    //Red LED sensor data
+int32_t n_sp02; //SPO2 value
+int8_t ch_spo2_valid;   //indicator to show if the SP02 calculation is valid
+int32_t n_heart_rate;   //heart rate value
+int8_t  ch_hr_valid;    //indicator to show if the heart rate calculation is valid
+uint8_t uch_dummy;
+
+Serial pc(USBTX, USBRX);    //initializes the serial port
+#ifdef TARGET_KL25Z 
+PwmOut led(PTB18);  //initializes the pwm output that connects to the on board LED
+DigitalIn INT(PTD1);  //pin PTD1 connects to the interrupt output pin of the MAX30102
+#endif
+#ifdef TARGET_K64F
+DigitalIn INT(PTD1);  //pin PTD1 connects to the interrupt output pin of the MAX30102
+#endif
+#ifdef TARGET_MAX32600MBED
+PwmOut led(LED_RED);    //initializes the pwm output that connects to the on board LED
+DigitalIn INT(P2_0);  //pin P20 connects to the interrupt output pin of the MAX30102
+#endif
+
+// the setup routine runs once when you press reset:
+int main() { 
+    uint32_t un_min, un_max, un_prev_data;  //variables to calculate the on-board LED brightness that reflects the heartbeats
+    int i;
+    int32_t n_brightness;
+    float f_temp;
+    
+    maxim_max30102_reset(); //resets the MAX30102
+    // initialize serial communication at 115200 bits per second:
+    pc.baud(115200);
+    pc.format(8,SerialBase::None,1);
+    wait(1);
+    
+    //read and clear status register
+    maxim_max30102_read_reg(0,&uch_dummy);
+    
+    //wait until the user presses a key
+    while(pc.readable()==0)
+    {
+        pc.printf("\x1B[2J");  //clear terminal program screen
+        pc.printf("Press any key to start conversion\n\r");
+        wait(1);
+    }
+    uch_dummy=getchar();
+    
+    maxim_max30102_init();  //initializes the MAX30102
+        
+        
+    n_brightness=0;
+    un_min=0x3FFFF;
+    un_max=0;
+  
+    n_ir_buffer_length=500; //buffer length of 100 stores 5 seconds of samples running at 100sps
+    
+    //read the first 500 samples, and determine the signal range
+    for(i=0;i<n_ir_buffer_length;i++)
+    {
+        while(INT.read()==1);   //wait until the interrupt pin asserts
+        
+        maxim_max30102_read_fifo((aun_red_buffer+i), (aun_ir_buffer+i));  //read from MAX30102 FIFO
+            
+        if(un_min>aun_red_buffer[i])
+            un_min=aun_red_buffer[i];    //update signal min
+        if(un_max<aun_red_buffer[i])
+            un_max=aun_red_buffer[i];    //update signal max
+        pc.printf("red=");
+        pc.printf("%i", aun_red_buffer[i]);
+        pc.printf(", ir=");
+        pc.printf("%i\n\r", aun_ir_buffer[i]);
+    }
+    un_prev_data=aun_red_buffer[i];
+    
+    
+    //calculate heart rate and SpO2 after first 500 samples (first 5 seconds of samples)
+    maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid); 
+    
+    //Continuously taking samples from MAX30102.  Heart rate and SpO2 are calculated every 1 second
+    while(1)
+    {
+        i=0;
+        un_min=0x3FFFF;
+        un_max=0;
+        
+        //dumping the first 100 sets of samples in the memory and shift the last 400 sets of samples to the top
+        for(i=100;i<500;i++)
+        {
+            aun_red_buffer[i-100]=aun_red_buffer[i];
+            aun_ir_buffer[i-100]=aun_ir_buffer[i];
+            
+            //update the signal min and max
+            if(un_min>aun_red_buffer[i])
+            un_min=aun_red_buffer[i];
+            if(un_max<aun_red_buffer[i])
+            un_max=aun_red_buffer[i];
+        }
+        
+        //take 100 sets of samples before calculating the heart rate.
+        for(i=400;i<500;i++)
+        {
+            un_prev_data=aun_red_buffer[i-1];
+            while(INT.read()==1);
+            maxim_max30102_read_fifo((aun_red_buffer+i), (aun_ir_buffer+i));
+        
+            if(aun_red_buffer[i]>un_prev_data)
+            {
+                f_temp=aun_red_buffer[i]-un_prev_data;
+                f_temp/=(un_max-un_min);
+                f_temp*=MAX_BRIGHTNESS;
+                n_brightness-=(int)f_temp;
+                if(n_brightness<0)
+                    n_brightness=0;
+            }
+            else
+            {
+                f_temp=un_prev_data-aun_red_buffer[i];
+                f_temp/=(un_max-un_min);
+                f_temp*=MAX_BRIGHTNESS;
+                n_brightness+=(int)f_temp;
+                if(n_brightness>MAX_BRIGHTNESS)
+                    n_brightness=MAX_BRIGHTNESS;
+            }
+#if defined(TARGET_KL25Z) || defined(TARGET_MAX32600MBED)
+            led.write(1-(float)n_brightness/256);
+#endif
+            //send samples and calculation result to terminal program through UART
+            pc.printf("red=");
+            pc.printf("%i", aun_red_buffer[i]);
+            pc.printf(", ir=");
+            pc.printf("%i", aun_ir_buffer[i]);
+            pc.printf(", HR=%i, ", n_heart_rate); 
+            pc.printf("HRvalid=%i, ", ch_hr_valid);
+            pc.printf("SpO2=%i, ", n_sp02);
+            pc.printf("SPO2Valid=%i\n\r", ch_spo2_valid);
+        }
+        maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid); 
+    }
+}
+ 
\ No newline at end of file
-- 
GitLab